У Вас не правильные стопы!
У покупок стоп снизу, у продаж сверху, а у Вас для всех одинаково
double Stop(int magik)
{
double sl =0.0;
switch(stop)
{
case 0://не меняем
Comment("No change");
break;
case 1://Минимальные
for(int y=0; y<= OrdersTotal()-1; y++)
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==magik && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
break;
case 1:
sl= NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
break;
}
}
break;
case 2://Фиксиров
for(int y=0; y<= OrdersTotal()-1; y++)
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==magik && OrderSymbol()==_Symbol)//Выбираем ордер
{
switch(OrderType())
{
case 0:
sl = NormalizeDouble(Bid-StopLoss*Point,Digits);
break;
case 1:
sl= NormalizeDouble(Ask+StopLoss*Point,Digits);
break;
}
}
break;
}
}
}
return(sl);
}
Здесь может и правильно, а в предыдущем коде везде стоитВроде все правильно
Так же и должно быть ведь sl и tp возвращают эти функцииЗдесь может и правильно, а в предыдущем коде везде стоит
Stop(Magic),Prof(Magic)
Тикет возвращается после открытия, а не до
switch(OrderType())Так же и должно быть ведь sl и tp возвращают эти функции
switch(OrderType())
как определяет какой именно ордер нужен?
for(int y=0; y<= OrdersTotal()-1; y++)
if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==magik && OrderSymbol()==_Symbol)//Выбираем ордер
{
}
А OrderSelect какой ордер выбирает?Код:for(int y=0; y<= OrdersTotal()-1; y++) if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==magik && OrderSymbol()==_Symbol)//Выбираем ордер { }
по позицииА OrderSelect какой ордер выбирает?
OrderSelect выбирает ордер который уже есть.по позиции
Для этого жесть case у второго будет позия 2 и ордер тайп определяет тип егоOrderSelect выбирает ордер который уже есть.
После открытия первого ордера OrderSelect выберет его и даст Вам Стоп/Тейк для выбранного типа ордера, а Вам для второго ордера нужен противоположный тип
Второго ордера еще нет, а Stop(Magic),Prof(Magic) Вы получаете по ордеру который уже есть.Для этого жесть case у второго будет позия 2 и ордер тайп определяет тип его
Второго ордера еще нет, а Stop(Magic),Prof(Magic) Вы получаете по ордеру который уже есть.
if(OrdersTotal()<1)
Причем здесь if(OrdersTotal()<1)?Код:if(OrdersTotal()<1)
Это условие не дает двигаться дальше?
подскажите пожалуйстаПричем здесь if(OrdersTotal()<1)?
Похоже Вы не знаете как работает OrderSelect и OrderSend
Я тебе сочувствую.Причем здесь if(OrdersTotal()<1)?
Похоже Вы не знаете как работает OrderSelect и OrderSend
Почему?Я тебе сочувствую.
подскажите пожалуйста
//+------------------------------------------------------------------+
if(f_IsNewBar()==true)
{
if(Open[1]-Close[1]>0 && Open[2]-Close[2]>0 && Open[3]-Close[3]>0)
{
ticket1 = OrderSend(_Symbol,OP_BUY,UstLot(),Ask,Slippage,Stop(0),Prof(0),NULL,Magic,clrAqua);
ticket2 = OrderSend(_Symbol,OP_SELL,UstLot(),Bid,Slippage,Stop(1),Prof(1),NULL,Magic,clrAqua);
}
}
//+------------------------------------------------------------------+
double Stop(int order_type=-1)
{
double sl =0.0;
if(order_type==0) sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
if(order_type==1) sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
return(sl);
}
//+------------------------------------------------------------------+
спасибоАналогично сделайте для Prof(C-подобный://+------------------------------------------------------------------+ if(f_IsNewBar()==true) { if(Open[1]-Close[1]>0 && Open[2]-Close[2]>0 && Open[3]-Close[3]>0) { ticket1 = OrderSend(_Symbol,OP_BUY,UstLot(),Ask,Slippage,Stop(0),Prof(0),NULL,Magic,clrAqua); ticket2 = OrderSend(_Symbol,OP_SELL,UstLot(),Bid,Slippage,Stop(1),Prof(1),NULL,Magic,clrAqua); } } //+------------------------------------------------------------------+ double Stop(int order_type=-1) { double sl =0.0; if(order_type==0) sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits); if(order_type==1) sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits); return(sl); } //+------------------------------------------------------------------+
Вот тебе и ответ на вопросНе работает все равно.
Почему?