Не удается отследить OrderSend error 130

 

Здравствуйте!

Подскажите пожалуйста, как отследить ошибку 130 (неправильные стопы) для отложенных ордеров

(любые из OP_BUY_LIMIT, OP_BUY_STOP, OP_SELL_LIMIT, OP_SELL_STOP).

Дело в том, что она появляется не постоянно, а апериодически, через неравное количество баров (М1).

Выставлял и SL=0 и TP=0 (т.е. вообще без стопов, думал, Market Execution),

и NormalizeDouble( SL, Digits ) и NormalizeDouble( TP, Digits ), не помогает.

Причем если повторить попытку посыла ордера, ордер выставляется без ошибки.

Помогите плиз

 

Так и отслеживайте:

int ticket = OrderSend(...);
int error = GetLastError();
if (ticket <= 0)
{
   RefreshRates();
   Print("error = ", error, ", sl = ", <запрашиваемый SL>, ", tp = ", <запрашиваемый TP>, ", Bid = ", Bid, ", Ask = ", Ask, ", StopLevel = ", SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL));
}

 Если окажется, что стоплевел равен нулю, то Вы работаете с брокером А..., который устанавливает плавающий стоплевел, равный двум спредам.

 

Здравствуйте, спасибо за ответы!

Отслеживать-то да, я вижу что есть ошибка, вижу плавающие спреды, а как убрать-то ошибку?

Делать RefreshRates() перед каждым посылом?

и Sleep( 7000 ) между установками ордеров делал, то же самое 

 
adept_:

как убрать-то ошибку?

Это очевидно - делать проверку корректности параметров ордера. 

 

Почему при повторе OrderSend (внутри этого же бара) с теми же параметрами цены, SL, TP ордер всё-таки устанавливается без ошибки 130 ?

всё-таки? то да, то нет

спасибо за ответы 

 
adept_:

Почему при повторе OrderSend (внутри этого же бара) с теми же параметрами цены, SL, TP ордер всё-таки устанавливается без ошибки 130 ?

всё-таки? то да, то нет

спасибо за ответы 

Если речь идет об онлайн-торговле (а не о тестере), то это будет проявляться, когда производится попытка установки SL или TP на минимально возможной дистанции от цены. Пока приказ достигнет сервера, цена может измениться, что приведет к нарушению минимальной дистанции. В итоге появляется ошибка. 
 
adept_:

Почему при повторе OrderSend (внутри этого же бара) с теми же параметрами цены, SL, TP ордер всё-таки устанавливается без ошибки 130 ?

всё-таки? то да, то нет

спасибо за ответы 

По результатам функции Print() можно узнать, а так гадание на кофейной гуще.
 
adept_:

Здравствуйте, спасибо за ответы!

Отслеживать-то да, я вижу что есть ошибка, вижу плавающие спреды, а как убрать-то ошибку?

Делать RefreshRates() перед каждым посылом?

и Sleep( 7000 ) между установками ордеров делал, то же самое 

При постановке отложенных ордеров по цене ближе стоп-левела выдаётся ошибка 130. Но, в данном случае, никакого отношения к стопу и тейку она не имеет. Такова реальность.
 
AlexeyVik:
При постановке отложенных ордеров по цене ближе стоп-левела выдаётся ошибка 130. Но, в данном случае, никакого отношения к стопу и тейку она не имеет. Такова реальность.
Бывает... 
 
tara:
Бывает... 

Да, разобрался, спасибо, мужики, дело в цене отл. ордера. Спасибо!

 SL = MarketInfo(sym., ST_LEVEL)* Point + 2 * Point;

вроде сделал, в понедельник на онлайне проверять  (price = Ask +- SL)

 

извините за оффтопие, но что это : " либо факт использования торговым сервером внешних механизмов динамического контроля уровней,

которые не могут быть транслированы в терминал. Во втором случае GetLastError() может возвращать ошибку 130, так как уровень MODE_STOPLEVEL фактически является "плавающим".

"

взято из документации, и как отследить-то? 

хотя бы раз хапануть стотридцаточку?