Почему не выставляется OP_SELLSTOP

 
Ниже привожу код. Хотел его немного модифицировать. Интересуют строки помеченные знаком //. При использовании строки с командой OP_BUYLIMIT, все прекрасно работает, т.е. выставляет отложенный ордер при открытии ордера на покупку. Но когда используется строка с командой OP_SELLSTOP, ордера открываются, но не выставляется отложенный ордер OP_SELLSTOP. Может кто подскажет почему и как это сделать.
void OpenPosition()
  { 

Lots = Lots();
  
  if(Signal() > 0)    
{ 
if (StopLoss>0) loss=Ask-(StopLoss*Point); 
if (TakeProfit>0) profit=Ask+(TakeProfit*Point);
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"ПОКУПКА",0,0,Blue); 

if (ticket==-1) Print ("Error Send = ",GetLastError());
else
{
  if (!OrderSelect(ticket,SELECT_BY_TICKET)) Print ("Error Select = ",GetLastError());
  else if (!OrderModify(ticket,OrderOpenPrice(),loss,profit,0)) Print ("Error Modify = ",GetLastError());
}



//ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Ask+(StopLoss*Point),3,(Ask+(StopLoss*Point))+(StopLoss*Point),(Ask+(StopLoss*Point))-(TakeProfit*Point),"ПРОДАЖА",0,0,Blue);

//ticket=OrderSend(Symbol(),OP_BUYLIMIT,Lots,Ask-(StopLoss*Point),3,(Ask-(StopLoss*Point))-(StopLoss*Point),(Ask-(StopLoss*Point))+(TakeProfit*Point),"ПОКУПКА",0,0,Blue);



return(0); 
} 
   
  if(Signal() < 0)    
{ 
if (StopLoss>0) loss=Ask+(StopLoss*Point); 
if (TakeProfit>0) profit=Ask-(TakeProfit*Point);
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"ПРОДАЖА",0,0,White); 
if (ticket==-1) Print ("Error Send = ",GetLastError());
else
{
  if (!OrderSelect(ticket,SELECT_BY_TICKET)) Print ("Error Select = ",GetLastError());
  else if (!OrderModify(ticket,OrderOpenPrice(),loss,profit,0)) Print ("Error Modify = ",GetLastError());
}

  
return(0); 
} 

  }
 
Kishar писал(а) >>
Ниже привожу код. Хотел его немного модифицировать. Интересуют строки помеченные знаком //. При использовании строки с командой OP_BUYLIMIT, все прекрасно работает, т.е. выставляет отложенный ордер при открытии ордера на покупку. Но когда используется строка с командой OP_SELLSTOP, ордера открываются, но не выставляется отложенный ордер OP_SELLSTOP. Может кто подскажет почему и как это сделать.

У Вас путаница с Asc`ами и Bid`ами.

 

Ордер sellstop также как и buylimit должен быть ниже текущей цены.Поменяйте знак при открытии на минус и будет всё ОК.

Ask-(........).

 
Тут скорее всего надо ставить SELLLIMIT, а не SELLSTOP, чтобы всё заработало.
Причина обращения: