Я никогда не делаю зацикленных циклов - всегда есть вероятность напороться на вечный цикл: например оборвалась связь (ну здесь ладно - торговые приказы не идут на сервер), а вот если торговля остановлена (клиринг, вечер пятницы) - Вы будете продолжать бомбить торговый сервер и добром это не кончится.
Поэтому применяю такой алгоритм: в OnTick выдаётся задание на закрытие всех позиций и проверяется результат выполнения.
Примерно так:
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(m_close_all) { if(IsPositionExists()) CloseAllPositions(); else m_close_all=false; }
Плюс, по хорошему, при закрытии позиций нужно проверять: не сильно ли близко находятся Тейк профит и Стоп лосс к цене закрытия.
Самый простой пример - без проверки близости Тейк профита и Стоп лосс дан в Close all positions:

- www.mql5.com
а вот если торговля остановлена (клиринг, вечер пятницы) - Вы будете продолжать бомбить торговый сервер и добром это не кончится.
Плюс, по хорошему, при закрытии позиций нужно проверять: не сильно ли близко находятся Тейк профит и Стоп лосс к цене закрытия.
Спасибо, я так и знал, что что то не учёл. Учту.
У меня нет там ни тейка ни стопа, проверка не нужна. Нужно наверняка закрыть все позиции. В вашем примере, если остались не закрытые позиции, они так и не будут удалены в дальнейшем.
Поэтому надо сделать проверку на случай клиринга и вечер пятницы, по сути разрешённое время торговли.
Вечер пятницы я определить могу, а как определить клиринг, не подскажите?
Опа, а есть ещё праздничные дни. Есть повод задуматься.
*** В вашем примере, если остались не закрытые позиции, они так и не будут удалены в дальнейшем.
***
В моём примере если останутся незакрытые позиции, то на следующем тике снова будет предпринята попытка закрыть все.
В моём примере если останутся незакрытые позиции, то на следующем тике снова будет предпринята попытка закрыть все.
Понял, там где даём задание на удаление позиции , там присваиваем m_close_all = true.
Хороший вариант, просто и надёжно.
Получается советник будет продолжать долбиться на сервер, но не как у меня четыре раза в тик, а всего один раз каждый тик.
Кстати у меня не зацикленный цикл, он обрывается после четвёртого прохода.
Понял, там где даём задание на удаление позиции , там присваиваем m_close_all = true.
Хороший вариант, просто и надёжно.
Получается советник будет продолжать долбиться на сервер, но не как у меня четыре раза в тик, а всего один раз каждый тик.
Кстати у меня не зацикленный цикл, он обрывается после четвёртого прохода.
Про зацикленные циклы я образно говорил - чтобы было более понятно.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Сделок много на разных инструментах, советник не закрывал все сделки когда нужно.
Сделал закрытие с проверкой, но гложет смутное сомнение, что я, что то упустил.
Просьба, если кто видит, что в моём коде могут вылезти какие нибудь траблы или знает как записать, чтоб все сделки закрылись наверняка!!! Напишите.