OrderSend error 130

 
Тестирование по контрольным точкам.
      ...
      else
      {
       ticketdown=OrderSend(Symbol(),OP_SELLSTOP,lot,Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,High[1]+distance*Point+spread*Point,0,NULL,0,0);
       Print(2); //чтобы удостовериться, что именно здесь ошибка
       Print("Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point = ",DoubleToStr(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,5));
       Print("StopLevel = ",MarketInfo(Symbol(),MODE_STOPLEVEL));
      }



Подскажите, в чем ошибка? Ведь это отложенный ордер, цена открытия которого находится на расстоянии StopLevel... До уровня выставленного StopLoss далеко (расстояние в пять раз больше StopLevel)...

 
High[1]+distance*Point+spread*Point

мне кажется что этот уровень не всегда может быть выше уровня открытия ордера,

и еще, проскальзывание принципиально не учитывается?

 
sanyooooook:
мне кажется что этот уровень не всегда может быть выше уровня открытия ордера

В логике советника это предусмотрено. Что касается данного примера, то как видно на рисунке, StopLoss выше уровня открытия ордера
 

Добавь пожалуйста строчку:

Print("stoploss = ",High[1]+distance*Point+spread*Point);
 
artamir:

Добавь пожалуйста строчку:


 
sanyooooook:

и еще, проскальзывание принципиально не учитывается?


А как я его могу учитывать, кроме понимания, что результаты на реале будут несколько хуже чем при тестировании?
 

а попробуй так:

double pr = NormalizeDouble((Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point),Digits);
double sl = NormalizeDouble((High[1]+distance*Point+spread*Point),Digits);
ticketdown=OrderSend(Symbol(),OP_SELLSTOP,lot,pr,0,sl,0,"",0,0);
 

Расстояние точно равное стоп левелу тоже не всегда корректно, лучше добавлять еще 1-2 пункта запаса.

Ну и конечно нормализация цен необходима, тут artamir прав.

 
artamir:

а попробуй так:

double pr = NormalizeDouble((Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point),Digits);
double sl = NormalizeDouble((High[1]+distance*Point+spread*Point),Digits);
ticketdown=OrderSend(Symbol(),OP_SELLSTOP,lot,pr,0,sl,0,"",0,0);


Дело в том, что проблем с нормализацией чисел с плавающей точкой до этого бара и после не возникает. Кроме того все отложенные ордера на покупку выставляются правильно без нормализации (NormalizeDouble). Или здесь могут быть нюансы? Проблема почему-то только на этом участке графика...
 
hasayama:

Расстояние точно равное стоп левелу тоже не всегда корректно, лучше добавлять еще 1-2 пункта запаса.

Ну и конечно нормализация цен необходима, тут artamir прав.


Понял, попробую
 

Также следует учесть расстояние от заявленой цены ордера до СЛ который вы выставляете:

double OrderOpenLevel = Bid - ... ;

double SL = iHigh( Symbol(), Period(), 1 ) + ... ;

if ( SL - OrderOpenLevel - StopLevel - Spread < -Point/2.0 ) //--проверяем как близко находится СЛ к будущей цене открытия

{

SL = OrderOpenPriceLevel + StopLevel + Spread;

}