Вопрос о функции MQL 'OrderSend'

 
Будьте любезны, господа продвинутые пользователи MQL4, помогите разобраться! Посылаю запрос на открытие позиции - цена из очереди, стопы проверены функцией NormalizeDouble и не меньше допустимых, однако возвращается код 130. Повторяю попытку несколько раз, через минуту и тот-же результат даже после того, как цена становится явно неактуальной и разница превышает допустимую (аргументом функции). Вот так проверяю стоп:
double CheckStopLoss(string strSymbol, double dOrderPrice, double dStopPrice, int iAct)
{
   double dStopSpread = MathAbs(dOrderPrice - dStopPrice);
   double dMinStopSpread = MarketInfo(strSymbol, MODE_POINT) * (MarketInfo(strSymbol, MODE_STOPLEVEL) + 1);
   if(dStopSpread < dMinStopSpread)
   {
      if(iAct == OP_SELL)
         dStopPrice = dOrderPrice + dMinStopSpread;
      else
         dStopPrice = dOrderPrice - dMinStopSpread;
   }
   return(NormalizeDouble(dStopPrice, MarketInfo(strSymbol, MODE_DIGITS)));
}
Цель - просто функцией NirmalizeDouble, цену беру из MarketInfo.

Заранее благодарен.
 
Из этого фрагмента ничего не видно. Возможно, Вы пытаетесь установить стоп-лосс для лонгов выше рынка, а для шортов - ниже. Функция CheckStopLoss в этом случае ошибки не обнаружит и стоп не изменит.
 
Better писал (а):
Из этого фрагмента ничего не видно. Возможно, Вы пытаетесь установить стоп-лосс для лонгов выше рынка, а для шортов - ниже. Функция CheckStopLoss в этом случае ошибки не обнаружит и стоп не изменит.
Вот функция, которая вызывает ранее упомянутую:
int Deel(int iAct)
{
   if(iAct != OP_SELL && iAct != OP_BUY)
   {
      Print("u_turn_breader \'Deel\' function: Error! Wrong param ", iAct, ".");
      return(FEED_ERROR);
   }
   RefreshRates();
   string strSymbol = TextSymbol(utOrderInstrIndex());
   double dPrice = CheckOrderPrice(utOrderPrice(), strSymbol, iAct);
   double dStop = CheckStopLoss(strSymbol, dPrice, utOrderStop(), iAct);
   double dProfit = NormalizeDouble(utOrderPrft(), MarketInfo(strSymbol, MODE_DIGITS));
   int iMagic = utOrderMagic();
   int iResult = OrderSend(strSymbol, 
                           iAct, 
                           DEEL_LOTS, 
                           dPrice, 
                           DEEL_SLIPPAGE, 
                           dStop,
                           dProfit,
                           "u-turn order #" + DoubleToStr(iMagic, 0),
                           iMagic,
                           0,
                           Yellow);
   if(iResult == -1)
   {
      int iError = GetLastError();
      utSetOrderId(iResult, iError);
      Print("\'Deel\': Error! OrderSend(", strSymbol, ", ", TextOrderAction(iAct), ", ", DEEL_LOTS, ", ", dPrice, ", ", DEEL_SLIPPAGE ,", ", dStop, " , ", dProfit, ", u-turn order #", iMagic, ", 0 , Yellow) function fail! - ", TextMqlOrderError(iError), " (", iError, ").");
   }
   else
   {
      utSetOrderId(iResult, 0);
      iResult = THREAD_SUCCESS;
   }
   return(iResult);
}

Работает она далеко не всегда. Не могу привести здесь весь код, но точно уверен, что в контексте не может возникнуть такой путаницы, да и вывод сообщения об ошибке подтверждает правильность выбранных цен. По-вашему функция OrderSend всегда работает корректно?


Сейчас только получил сообщение об ошибке:
OrderSend(EURUSD, Sell, 1, 1.2602, 3, 1.262, 1.258, String, 0, Colour) function fail - INVALID STOPS (130).


НАШЕЛ ЖУКА, СПАСИБО ЗА УЧАСТИЕ!
 
Слишком близкие стопы - есть
MarketInfo(Symbol(),MODE_TICKSIZE);

Разница м/у текущую цену (Bid или Ask в зависимости от типа ордера) и стоп должна быть хотя на 1 пункт больше чем TickSize.
 

Стопы конечно близкие, но допустимые. В первой функции к минимальному стопу добавляется пункт.