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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Reactor555
437
Reactor555  

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

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

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

Renat Akhtyamov
16178
Renat Akhtyamov  

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

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

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

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

Ihor Herasko
21808
Ihor Herasko  
Reactor555:

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


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

Reactor555
437
Reactor555  
Ihor Herasko:

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


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

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

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

Renat Akhtyamov
16178
Renat Akhtyamov  
Reactor555:

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

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

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

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

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

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

Ihor Herasko
21808
Ihor Herasko  
Reactor555:

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

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

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

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

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

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

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

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

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

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


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

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

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

Reactor555
437
Reactor555  

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

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

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

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

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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий