Invalid price

 

Я думал такой ошибку у меня не будет никогда. Но, как оказалось, это произошло. На нескольких ДЦ, в том числе, на Альпари у меня всё чёто отрабатывается на протяжении нескольких лет. Сегодня, решил закинуть сову на Робофорекс по некоторым причинам. Оказалось, что там сова отказывается торговать с первого сигнала. Причина, довольно-таки странная и, на данный момент, для меня остаётся загадкой.

Вот что вижу в терминале:

2018.08.15 14:20:39.810 2016.01.06 19:25:03   __LastError = 4756
2018.08.15 14:20:39.810 2016.01.06 19:25:03   m_request.price = 173.398
2018.08.15 14:20:39.810 2016.01.06 19:25:03   failed buy stop 0.10 GBPJPY.m at 173.398 tp: 173.528 [Invalid price]
2018.08.15 14:20:39.810 2016.01.06 19:25:03   _LastError = 4756
2018.08.15 14:20:39.810 2016.01.06 19:25:03   OrdersHandling::put { order wasn't sent! m_result.retcode = '10015' | orderType = 'ORDER_TYPE_BUY_STOP' | price = '173.398' | SL = '0.000' | TP = '173.528' | ask = '173.364' | bid = '173.344' | spread = '0.020' }
2018.08.15 14:20:39.810 2016.01.06 19:25:03   OrdersHandling::put { _LastError = '4756' }

Т.е. сервер сообщает нам, что причина якобы в некорректной цене, но цена корректная. Объясняю. Вот участок кода, где устанавливается торговый ордер:

    if (!sent) {
    Print("__LastError = ", _LastError);
    Print("m_request.price = ", dToS(m_request.price));
      sent = OrderSend(m_request, m_result);
    Print("_LastError = ", _LastError);
      Sleep(250); cnt++; continue;
    }

В момент установки имеем такие вот данные:

Цена открытия отложенного ордера типа BUY_STOP = 173,398

Ask = 173,364

spread = 0,020

Получается от цены установки стопового лонгового ордера до Ask есть запас = 173,398 - 173,364 = 0,034

Проверки на стоплевел и на фризлевел пройдены до этого места. Что ему тогда мешает вообще?

Кстати, все цены у меня нормализованы как по тику, так и по количеству знаков после запятой цены символа. Т.е. цены правильные. Соответственно, я показал из журпнала приходящую цену.

 
Viktar Dzemikhau:

Я думал такой ошибку у меня не будет никогда. Но, как оказалось, это произошло. На нескольких ДЦ, в том числе, на Альпари у меня всё чёто отрабатывается на протяжении нескольких лет. Сегодня, решил закинуть сову на Робофорекс по некоторым причинам. Оказалось, что там сова отказывается торговать с первого сигнала. Причина, довольно-таки странная и, на данный момент, для меня остаётся загадкой.

Вот что вижу в терминале:

Т.е. сервер сообщает нам, что причина якобы в некорректной цене, но цена корректная. Объясняю. Вот участок кода, где устанавливается торговый ордер:

В момент установки имеем такие вот данные:

Цена открытия отложенного ордера типа BUY_STOP = 173,398

Ask = 173,364

spread = 0,020

Получается от цены установки стопового лонгового ордера до Ask есть запас = 173,398 - 173,364 = 0,034

Проверки на стоплевел и на фризлевел пройдены до этого места. Что ему тогда мешает вообще?

Кстати, все цены у меня нормализованы как по тику, так и по количеству знаков после запятой цены символа. Т.е. цены правильные. Соответственно, я показал из журпнала приходящую цену.

Возможно в момент обработки сервером приказа цена уже изменилась и нарушился стоплевел или фризлевел. Попробуйте увеличить дистанцию и потом переместить ордер куда надо. И в Print выведеите не только номер ошибки но и текущую цену + Стоплевел *_Point.

 
Возможно, нарвались на [No prices]

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: MT4Orders

fxsaber, 2018.07.24 09:46

2018.07.24 10:24:19.177 Trades  '35247942': market buy 0.01 USDHKD
2018.07.24 10:24:19.246 Trades  '35247942': failed market buy 0.01 USDHKD [No prices]
2018.07.24 10:24:19.246 Trades  '35247942': buy limit 0.01 USDHKD at 7.83618
2018.07.24 10:24:19.315 Trades  '35247942': failed buy limit 0.01 USDHKD at 7.83618 [No prices]
2018.07.24 10:24:19.316 Trades  '35247942': buy stop 0.01 USDHKD at 7.85618
2018.07.24 10:24:19.384 Trades  '35247942': failed buy stop 0.01 USDHKD at 7.85618 [No prices]

Какие записи в логе самого Терминала?

И надо понять, это сервер сообщает или Терминал (OrderCheck). Это можно сделать, если сравнить время отправки ордера и ответа. Если совпадает с точностью до мс - OrderCheck. Ну а если OrderCheck, то проблема становится локальной и разобраться будет проще.

 
Viktar Dzemikhau:

Я думал такой ошибку у меня не будет никогда. Но, как оказалось, это произошло. На нескольких ДЦ, в том числе, на Альпари у меня всё чёто отрабатывается на протяжении нескольких лет. Сегодня, решил закинуть сову на Робофорекс по некоторым причинам. Оказалось, что там сова отказывается торговать с первого сигнала. Причина, довольно-таки странная и, на данный момент, для меня остаётся загадкой.

Вот что вижу в терминале:

Т.е. сервер сообщает нам, что причина якобы в некорректной цене, но цена корректная. Объясняю. Вот участок кода, где устанавливается торговый ордер:

В момент установки имеем такие вот данные:

Цена открытия отложенного ордера типа BUY_STOP = 173,398

Ask = 173,364

spread = 0,020

Получается от цены установки стопового лонгового ордера до Ask есть запас = 173,398 - 173,364 = 0,034

Проверки на стоплевел и на фризлевел пройдены до этого места. Что ему тогда мешает вообще?

Кстати, все цены у меня нормализованы как по тику, так и по количеству знаков после запятой цены символа. Т.е. цены правильные. Соответственно, я показал из журпнала приходящую цену.

А тип исполнения у Робофорекса какой? Вроде, как вспоминаю, на заре общения с МТ5, тоже нарывался на это, хотя уже не помню.

В общем, попробуйте вообще не указывать price в MqlTradeRequest, пусть 0 будет. И, на будущее, делайте проверку типа исполнения и, только если она по потоковым ценам или по запросу, указывайте price.

 
Vladimir Simakov:

делайте проверку типа исполнения и, только если она по потоковым ценам или по запросу, указывайте price.

Это лишнее.

 

В общем-то, я этот вопорс решил в тот же день, когда напоролся на него. Был касяк в классе, который отвечает за реализацию торговых приказов, проверок и тд связанных с этим. Не корректно был ренализован блок проверки на стоплевел. На Альпари stopLevel= 0, поэтому я и не натыкался на него. А на Робе по GBPJPY, вроде бы 8. В итоге поправил этот блок и всё чётко теперь. Была идея проверить одну вещь на безсвоповом счёте. Но с таким стоплевелом это не вариант. Я забил. Переключился на другие мысли.

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