Работа блока обработки ошибок для реального времени

 

Давайте представим себе робота, дающего 100% профитных сделок

из - за этого можно увеличить лот до 20% от депо.

И все бы хорошо, но к примеру повар не очень настроен крыть ордер в 00.00 или 12.00 или с 2 до 5 утра где ожидание закрытия может растягиваться секунд на 15, причем ордер не факт что закроется

 

Смотрим стандартный блок - там написано что - то вроде "выводит в журнал сообщение об ошибке"

Ну вывели мы сообщение и что? У компьютера никого не будет пару недель.

Ордер не закрылся, счет  из - за большого лота слит.

Так в чем его смысл?  Для журнала хватит и стандартного блока. 

 

Для отладки. Что бы знать причину проблемы. Что бы потом разобраться почему ордер на закрылся.

Остальное от эксперта зависит, будет ли он повторять закрытие или бросит ордер. 

 
Dmitry Fedoseev:

Для отладки. Что бы знать причину проблемы. Что бы потом разобраться почему ордер на закрылся.

Остальное от эксперта зависит, будет ли он повторять закрытие или бросит ордер. 

Да, делаем эксперт, работающий по таймеру, чтобы не зависеть от тиков и пусть он каждые N-ms проверят позиции на условие закрытия. 

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

 

Ок, тогда берем эксперт на таймере, для каждого из условий закрытия открытия модификации и прочей хрени ставим таймер на проверку.

что получится если

1) функция таймер работает каждые 5 сек а проверка 15 сек

2)  если робот на тиках и стят проверки по 15 сек

3) как будет работать бот на таймере если во время проверок оборвет связь.
 
trader781:

Ок, тогда берем эксперт на таймере, для каждого из условий закрытия открытия модификации и прочей хрени ставим таймер на проверку.

что получится если

1) функция таймер работает каждые 5 сек а проверка 15 сек

2)  если робот на тиках и стят проверки по 15 сек

3) как будет работать бот на таймере если во время проверок оборвет связь.

1) Так и получится. Что тут еще может получиться?

2) Все нормально будет. Если во время работы функции по таймеру придет тик, то по завершению работы оп таймеру произойдет работа по тику. Если при работе по тику придет время таймера, то по завершению работы по тику будет работа по таймеру.

3) Ошибки выполнения рыночных действия будут. Если таймер использовать, то надо бы проверять наличие связи. 

 
Dmitry Fedoseev:

1) Так и получится. Что тут еще может получиться?

2) Все нормально будет. Если во время работы функции по таймеру придет тик, то по завершению работы оп таймеру произойдет работа по тику. Если при работе по тику придет время таймера, то по завершению работы по тику будет работа по таймеру.

3) Ошибки выполнения рыночных действия будут. Если таймер использовать, то надо бы проверять наличие связи. 

вот мне пришлось покопаться в нескольких десятках кодов и вот что нашел

https://www.mql5.com/ru/code/14303

обычный стандартный вариант который спамит в журнал, и все. 

есть мысль как сделать его реально рабочим?

Close At Time
Close At Time
  • голосов: 13
  • 2015.12.23
  • Algofxsolution
  • www.mql5.com
Close At Time — советник, который закрывает открытые позиции, или удаляет отложенные ордера, или делает и то, и другое. Также вы можете уточнить, как они должны быть закрыты - по символу, по "магическому числу" или по номеру тикета.
 
trader781:

вот мне пришлось покопаться в нескольких десятках кодов и вот что нашел

https://www.mql5.com/ru/code/14303

обычный стандартный вариант который спамит в журнал, и все. 

есть мысль как сделать его реально рабочим?

Он нормальный. Когда время закрытия наступает, он будет на каждом тике попытки делать, пока все не закроет. Но и  когда закроет будет продолжать.

 
Dmitry Fedoseev:

Он нормальный. Когда время закрытия наступает, он будет на каждом тике попытки делать, пока все не закроет. Но и  когда закроет будет продолжать.

я так понял хватит этого блока и ResetLastError в начале каждого тика?

 

или как вариант сделать обработку критических а остальные просто забить через GetLastError

 
trader781:

Ок, тогда берем эксперт на таймере, для каждого из условий закрытия открытия модификации и прочей хрени ставим таймер на проверку.

что получится если

1) функция таймер работает каждые 5 сек а проверка 15 сек

2)  если робот на тиках и стят проверки по 15 сек

3) как будет работать бот на таймере если во время проверок оборвет связь.

1. Пока не закончится проверка, то есть не выйдем из OnTimer, советник не будет реагировать на новые тики и вызовы таймера

3. Работа таймера от наличия связи не зависит, просто надо ее проверять. Dmitry Fedoseev все подробно расписал.

 
trader781:

я так понял хватит этого блока и ResetLastError в начале каждого тика?

или как вариант сделать обработку критических а остальные просто забить через GetLastError

Можно и без него, это все равно только информационный блок, но не обработка ошибок. 

Обработка ошибок, это когда проверяешь результаты работы функций которые могут не успешно выполниться и принимаешь соответствующее решение: может быть прервать работу функции OnTick() до следующего тика, может быть продолжить. Допустим в процессе работы советника, в соответствии с его алгоритмом работы, появилась необходимость закрытия всех позиций и удаления всех ордеров. Значит советник должен делать попытки закрытия пока не закроет и не удалить все, только после этого продолжать с другими действиями.

Все функции, которые могут не выполниться и так возвращают true/false - вот на это надо реагировать. А номер ошибки, это последнее дело, только для информации. Кончено могут быть случаи когда и и с номером ошибки надо разбираться, но это редчайший случай. Один случай только был - копировщик работающий в цикле. Если в пятницу вечером случалась ошибка с определенным номером, то надо было делать перерыв до понедельника. Но все это только для того, что бы лог файл не раздувался.

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

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

 
Dmitry Fedoseev:

Можно и без него, это все равно только информационный блок, но не обработка ошибок. 


У меня будет стоять сеточник-полуавтомат. А в чем их сложность если отличие от других советников только в шаге следующего ордера?


и благодарю за исчерпывающий ответ по данному вопросу.

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