Ошибки, баги, вопросы - страница 2106
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Тайм-аут говорит о том, что ответ от сервера не был получен в разумные сроки. Но не о результате выполнения приказа.
Здравствуйте.
Спасибо.
Чисто технически я понял особенность. в данном случае: при таймауте - нужно ждать появления нового тикета в истории сделок, если появился новый тикет - тогда сделка или ордер открыта.
кстати, такое происходит только на MQL5 VPS
на домашнем сервере все ок.
буду думать...
Спасибо.
Чисто технически я понял особенность. в данном случае: при таймауте - нужно ждать появления нового тикета в истории сделок, если появился новый тикет - тогда сделка или ордер открыта.
Если торговый приказ был отправлен через синхронный OrderSend, то выйти из выполнения OrderSend не получится. Все выглядит, как баг VPS-Терминала.
через него.
проблема в принципе решаема, после получения ошибки таймаута запускать функцию перебора новых тикетов в истории.
Иначе советник просто шлет новый запрос и опять получает ошибку таймаута, без получения тикета.
Спасибо.
проблема в принципе решаема, после получения ошибки таймаута запускать функцию перебора новых тикетов в истории.
В СД нужно писать. Иначе так и будете после каждого OrderSend по три минуты ожидать таймаута, получая соответствующие торговые риски.
В СД нужно писать. Иначе так и будете после каждого OrderSend по три минуты ожидать таймаута, получая соответствующие торговые риски.
так и сделал.
эта ошибка случается 1 из 1000, и пока только на VPS от MQL такое было...соответственно советник получает ошибку 10012 и пытается еще раз выставить ордер.
Я бы за такой код в Маркете лишал бы статуса Продавца на год
я первый раз столкнулся с такой ошибкой.
у меня нет в коде обработки такой ошибки. нет тикета - значит сделка не открылась. значит советник снова пытается открыть сделку.проблема в принципе решаема, после получения ошибки таймаута запускать функцию перебора новых тикетов в истории.
История не при чем. OrderSend отправляет приказ, и он СРАЗУ повляется в Терминале с состоянием ORDER_STATE_STARTED.
Но это не обозначает, что OrderSend завершил выполнение. OrderSend будет выполняться до тех пор, пока статус ордера не изменится.
Поэтому если Вы видите таймаут, это на 99% обозначает, что статус ордера ORDER_STATE_STARTED (вижу placed, но не ясно, когда скрин сделал.).
Более того, такой же таймаут может случиться без Вашего OrderSend - когда MT5-сервер делает сам OrderSend (TP/SL/MC/Expiration). Но Вы его не увидите в Терминале.
у меня нет в коде обработки такой ошибки. нет тикета - значит сделка не открылась. значит советник снова пытается открыть сделку.
Это неправильная логика. После неудачного и удачного OrderSend должно быть заново полностью считано текущее торговое окружение. Это правило должно действовать всегда.
Насчет кодов возврата. В своих советниках никак не анализирую их. По-моему, торговая логика не должна от них зависеть.
Это неправильная логика. После неудачного и удачного OrderSend должно быть заново полностью считано текущее торговое окружение. Это правило должно действовать всегда.
согласен. надо менять.