Ошибки, баги, вопросы - страница 2106

 
Andrey Khatimlianskii:

Тайм-аут говорит о том, что ответ от сервера не был получен в разумные сроки. Но не о результате выполнения приказа.


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

Спасибо.

Чисто технически я понял особенность. в данном случае: при таймауте - нужно ждать появления нового тикета в истории сделок, если появился новый тикет - тогда сделка или ордер открыта. 

кстати, такое происходит только на MQL5 VPS 

на домашнем сервере все ок. 

буду думать...


Спасибо. 

Пользовательский интерфейс - Начало работы - MetaTrader 5
Пользовательский интерфейс - Начало работы - MetaTrader 5
  • www.metatrader5.com
Интерфейс платформы предоставляет доступ ко всем инструментам, необходимым для торговли на финансовых рынках. Он включает в себя различные меню, панели инструментов и служебные окна. Главное меню В главном меню собраны практически все команды и функции, которые можно выполнять в торговой платформе. Оно позволяет работать с графиками...
 
Vladislav Andruschenko:

Чисто технически я понял особенность. в данном случае: при таймауте - нужно ждать появления нового тикета в истории сделок, если появился новый тикет - тогда сделка или ордер открыта. 

Если торговый приказ был отправлен через синхронный OrderSend, то выйти из выполнения OrderSend не получится. Все выглядит, как баг VPS-Терминала.
 
fxsaber:
Если торговый приказ был отправлен через синхронный OrderSend, то выйти из выполнения OrderSend не получится. Все выглядит, как баг VPS-Терминала.


через него. 

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

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

Спасибо. 

 
Vladislav Andruschenko:

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

В СД нужно писать. Иначе так и будете после каждого OrderSend по три минуты ожидать таймаута, получая соответствующие торговые риски.

 
fxsaber:

В СД нужно писать. Иначе так и будете после каждого OrderSend по три минуты ожидать таймаута, получая соответствующие торговые риски.


так и сделал. 

эта ошибка случается 1 из 1000, и пока только на VPS от MQL такое было... 
 
Vladislav Andruschenko:

соответственно советник получает ошибку 10012 и пытается еще раз выставить ордер.

Я бы за такой код в Маркете лишал бы статуса Продавца на год
 
A100:
Я бы за такой код в Маркете лишал бы статуса Продавца на год

я первый раз столкнулся с такой ошибкой. 

у меня нет в коде обработки такой ошибки. нет тикета - значит сделка не открылась. значит советник снова пытается открыть сделку. 
 
Vladislav Andruschenko:

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

История не при чем. OrderSend отправляет приказ, и он СРАЗУ повляется в Терминале с состоянием ORDER_STATE_STARTED.

Но это не обозначает, что OrderSend завершил выполнение. OrderSend будет выполняться до тех пор, пока статус ордера не изменится.

Поэтому если Вы видите таймаут, это на 99% обозначает, что статус ордера ORDER_STATE_STARTED (вижу placed, но не ясно, когда скрин сделал.).

Более того, такой же таймаут может случиться без Вашего OrderSend - когда MT5-сервер делает сам OrderSend (TP/SL/MC/Expiration). Но Вы его не увидите в Терминале.

 
Vladislav Andruschenko:
у меня нет в коде обработки такой ошибки. нет тикета - значит сделка не открылась. значит советник снова пытается открыть сделку. 

Это неправильная логика. После неудачного и удачного OrderSend должно быть заново полностью считано текущее торговое окружение. Это правило должно действовать всегда.

Насчет кодов возврата. В своих советниках никак не анализирую их. По-моему, торговая логика не должна от них зависеть.

 
fxsaber:

Это неправильная логика. После неудачного и удачного OrderSend должно быть заново полностью считано текущее торговое окружение. Это правило должно действовать всегда.


согласен. надо менять. 

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