Ошибка выставления ордера на 4-х знаках!

 

Есть функция которая открывает ордер buy по рынку 

int OpenLong(double volume, double StopLoss, double TakeProfit,int Deviation, int magic )
  {
MqlTick last_tick={0};    
 SymbolInfoTick( Symbol(),last_tick);
 double Ask = last_tick.ask;
 double Bid = last_tick.bid;
 MqlTradeRequest my_trade={0};                                                
 MqlTradeResult my_trade_result={0};  
   my_trade.action = TRADE_ACTION_DEAL;
   my_trade.symbol = Symbol();
   my_trade.volume = volume; 
   my_trade.price= NormalizeDouble(Ask,Digits());   
   my_trade.sl=NormalizeDouble(Ask-StopLoss*Point(), Digits()); 
   my_trade.tp=NormalizeDouble(Ask+TakeProfit*Point(), Digits());  
   my_trade.deviation=Deviation;
   my_trade.type=ORDER_TYPE_BUY;
   my_trade.type_filling=ORDER_FILLING_RETURN;
   my_trade.magic=magic;
 ResetLastError();  
 if(OrderSend(my_trade,my_trade_result))
 {
  Print("Ордер выставлен успешно, код результата операции - ",my_trade_result.retcode);
 }
 else
 {
  Print("Код результата операции - ",my_trade_result.retcode);  
  Print("Ошибка открытия ордера = ",GetLastError());
 }
   return(0);                                                      //--- выходим из функции открытия ордера    
  }
Вызываю ее так OpenLong ( 0.1, 10, 40, 3, 777);

 

На пяти знаках работает отлично, но на 4-х почему то SL и TP всегда равны Ask. И тестер выдает такую вот ошибку

2012.09.20 00:45:58     Core 1  2012.09.03 00:00:00   Ошибка открытия ордера = 4756
2012.09.20 00:45:58     Core 1  2012.09.03 00:00:00   Код результата операции - 10016
2012.09.20 00:45:58     Core 1  2012.09.03 00:00:00   failed instant buy 0.10 EURUSD at 1.2576 sl: 1.2576 tp: 1.2576 [Invalid stops]
 
А где проверка на минимальные отступы для стопов?
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Проверку на стопы конечно надо делать! Не учел! Но суть пока не в этом. Почему   выходит что TP и LS равны Aks ?

failed instant buy 0.10 EURUSD at 1.2576 sl: 1.2576 tp: 1.2576 [Invalid stops]

 Скажем на данный момент Ask = 1.2576, TP=40 (старых пунктов), вычислим TP в пунктах по моей формуле .

NormalizeDouble(Ask+TakeProfit*Point(), Digits()); 

my_trade.tp=NormalizeDouble(1.2576+40*Point(), Digits())   = 1.2616, так почему же получается все равно 1.2576 при отсылки запроса?

 
bakanaev:

Проверку на стопы конечно надо делать! Не учел! Но суть пока не в этом. Почему   выходит что TP и LS равны Aks ?

 Скажем на данный момент Ask = 1.2576, TP=40 (старых пунктов), вычислим TP в пунктах по моей формуле .

TakeProfit = 0

(можете Print поставить в начале ф-ии и посмотреть чему равен TP)

 

попробуйте конкретно вытаскивать данные из символа:

request.tp=SymbolInfoDouble(Symbol(),SYMBOL_BID)+TakeProfit*SymbolInfoDouble(Symbol(),SYMBOL_POINT);

 

Причина обращения: