Почему мог не выставиться отложенный ордер?

 

Все работало как часы и вдруг вчера не выставился отложенный ордер OrderSend. Вернулся код -1. Удаление цен от рынка было более чем достаточным. Могло ли это произойти из-за следующего...

Выполнялись два одинаковых советника на разных графиках, которые запускались в одно и тоже время и в одно и тоже время посылали несколько OrderSend, а точнее каждый выставлял по 4 отложенных ордера. Один советник выставил без проблем, а второй из четырех выставил три. Может они как-то помешали друг другу?.. хотя здравый смысл говорит, что не могли никак помешать. Да и несколько дней до этого они открывались оба без проблем.

Пришлось дописывать отслеживание -1-го кода, что не самая большая проблема. Но почему такое могло произойти, хотелось бы разобраться.

 

Какой номер ошибки вернул торговый сервер?

Если Вам не известно, добавьте обработчик ошибок в код.

Всё будет работать как часы.
GetLastError - Проверка состояния - Справочник MQL4
GetLastError - Проверка состояния - Справочник MQL4
  • docs.mql4.com
GetLastError - Проверка состояния - Справочник MQL4
 

К сожалению не предусмотрел. И по журналу не догадался посмотреть. Добавил while чтобы пытался выставить ордер до тех пор, пока тот не выставиться. Будем смотреть что будет дальше.

 
Reactor555:

К сожалению не предусмотрел. И по журналу не догадался посмотреть. Добавил while чтобы пытался выставить ордер до тех пор, пока тот не выставиться. Будем смотреть что будет дальше.


Сам по себе цикл не решит проблему. Необходимо анализировать код ошибки. Вдруг там рынок закрыт или еще что-то подобного рода. В итоге советник будет стучаться в дверь, на которой написано "Закрыто". Так и до бана счета недалеко.

 
Ihor Herasko:

Сам по себе цикл не решит проблему. Необходимо анализировать код ошибки. Вдруг там рынок закрыт или еще что-то подобного рода. В итоге советник будет стучаться в дверь, на которой написано "Закрыто". Так и до бана счета недалеко.


Поставил ограничение на "постучаться" 30 раз, если не открылся, то ExpertRemove(). 

Я вот думаю.... ну получил я код ошибки и что дальше? На форексе рынок не может быть закрыт. Значит что-то с сервером. В любом случае надо попробовать выставиться еще раз и если ордер не выставляется, то прекращать работу. 

Правда это хорошо, когда выставляешься в начале. А если сова на середине пути и что-то уже происходит и надо ордер выставить, а он не выставляется... вот что тогда делать, я пока придумать не могу.

 
Reactor555:

Поставил ограничение на "постучаться" 30 раз, если не открылся, то ExpertRemove(). 

Я вот думаю.... ну получил я код ошибки и что дальше? На форексе рынок не может быть закрыт. Значит что-то с сервером. В любом случае надо попробовать выставиться еще раз и если ордер не выставляется, то прекращать работу. 

Правда это хорошо, когда выставляешься в начале. А если сова на середине пути и что-то уже происходит и надо ордер выставить, а он не выставляется... вот что тогда делать, я пока придумать не могу.

Чтобы сделать как у всех, читаем этот

https://www.mql5.com/ru/forum/145455/page1146#comment_4965706

и следующий пост

 
Reactor555:

Поставил ограничение на "постучаться" 30 раз, если не открылся, то ExpertRemove(). 

Я вот думаю.... ну получил я код ошибки и что дальше?

Обработать ее, т. е. на каждый код ошибки продумать дальнейшие действия советника. Например, если получили реквот, то лучше выйти из обработки текущего тика и дождаться следующего тика, на котором заново проверить необходимость открытия/установки ордера и послать новый приказ. 

На форексе рынок не может быть закрыт.

Может. Суббота и воскресенье.

Значит что-то с сервером. В любом случае надо попробовать выставиться еще раз и если ордер не выставляется, то прекращать работу. 

Нет. Все зависит от того, почему не получилось установить ордер.

Правда это хорошо, когда выставляешься в начале. А если сова на середине пути и что-то уже происходит и надо ордер выставить, а он не выставляется... вот что тогда делать, я пока придумать не могу.

Не существует универсальных решений. Для каждого случая нужно продумывать свой вариант выхода из ситуации. Таким образом, снова возвращаемся к обработке кода возврата сервера.
 
Reactor555:
....

Правда это хорошо, когда выставляешься в начале. А если сова на середине пути и что-то уже происходит и надо ордер выставить, а он не выставляется... вот что тогда делать, я пока придумать не могу.


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

 
Reactor555:  Поставил ограничение на "постучаться" 30 раз, если не открылся, то ExpertRemove()

Если ошибка, например, в параметрах - повтор бесполезен. Например здесь Посмотрите, как делают

 

Нет. Ошибок в параметрах нет. И цены более чем корректные.... Но вот пример :

Имеем  ордер, требующий корректировки. Рыночная ситуация требует корректировки тейка, а в это время рынок колеблется где-то около стопа. Сервак присылает отказ... типа слишком близко к стопу, хотя стоп я даже не пытаюсь менять. Поэтому приходится по несколько раз просить поменять тейк (в данном случае я делаю одну попытку в тик), до тех пор пока или рынок не отойдет от стопа и тейк поменяется, либо этот стоп не сработает и тогда уже и менять ничего не надо.

Вообщем само тело совы я написал уже давно. А обработки непредвиденных отказов дописываю до сих пор. Даже фантазирую на тему, что еще может произойти... например OnTick засимафорил, на случай если следующий тик слишком быстро прилетит... Вспоминаю все, чему в интституте учили.  Короче развлекаюсь. Хочу пам счет открыть, но очень боюсь слить деньги инвесторов из-за какой-нибудь непредвиденности.

 
Reactor555: Нет. Ошибок в параметрах нет. И цены более чем корректные.... Но вот пример :

Имеем  ордер, требующий корректировки. Рыночная ситуация требует корректировки тейка, а в это время рынок колеблется где-то около стопа. Сервак присылает отказ... типа слишком близко к стопу, хотя стоп я даже не пытаюсь менять. Поэтому приходится по несколько раз просить поменять тейк

Получается так: наступила суббота, брокер выключил сервер и уехал на рыбалку - а Вы шлете просьбы поменять тейк! Выше дал ссылку на советник с обработкой ошибок - посмотрите. Там у него функция int Fun_Error(int Error)   У меня скачаны сотни советников. Когда возникает вопрос - делаю поиск. В данном случае искал GetLastError(

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