Отложенный ордер можно УДАЛИТЬ, а закрыть его НЕЛЬЗЯ, в принципе. Отложенный ордер можно ВЫСТАВИТЬ, а открыть его нельзя.
Ваш текст исправил.
***
Столкнулся с такой ошибкой при удалении отложенных ордеров непосредственно из OnDeinit() - "MQL5 program is stopped. Trading is disabled"
***
В советнике, если уж он решил удалиться, сначала удалить все отложенные ордера, а потом выдавать команду на удаление советника.
Если же советник удаляется из-за того, что Вы закрыли график на котором находится советник - то здесь 50/50 - может успеете всё удалить, а может и не успеете. Почему так? Потому что убивание графика на котором находиться живой советник - это нештатная ситуация.
В советнике, если уж он решил удалиться, сначала удалить все отложенные ордера, а потом выдавать команду на удаление советника.
Если же советник удаляется из-за того, что Вы закрыли график на котором находится советник - то здесь 50/50 - может успеете всё удалить, а может и не успеете. Почему так? Потому что убивание графика на котором находиться живой советник - это нештатная ситуация.
Спасибо.
Я имел ввиду не удаление графика с советником, а выключение советника руками. Не когда советник сам себя выключает, а когда я мышкой решил его выключить.
Должен же быть способ, чтобы советник удалил все свои ордера, когда пользователь решил его выключить?
Спасибо.
Я имел ввиду не удаление графика с советником, а выключение советника руками. Не когда советник сам себя выключает, а когда я мышкой решил его выключить.
Должен же быть способ, чтобы советник удалил все свои ордера, когда пользователь решил его выключить?
Тогда только в OnDeinit и тут как повезёт ...
Я думал, что будет работать вот так:
void OnDeinit(const int reason) { // Хочу, чтобы подобная конструкция вызывалась, когда я удаляю советник с графика for (int i = OrdersTotal(); i >= 0; i--) // Перебираем все открытые ордера if( OrderSelect(OrderGetTicket(i)) == 1) // Выбираем ордер if( OrderGetInteger(ORDER_MAGIC) == magic) // Проверяем magic trade.OrderDelete(OrderGetInteger(ORDER_TICKET)); // Удаляем ордер }
Сейчас выдает ошибку: "MQL5 program is stopped. Trading is disabled".
Т.е. как я понял из OnDeinit() вообще нельзя открывать или закрывать ордера.
Но как тогда закрыть ордера советника, если я удаляю советник с графика своими руками?
можно попробовать в конце OnTick() проверить IsStopped()
может быть и получится
хотя логичнее такую задачу решать путем создания кнопки на чарте, при нажатии закроете все ордера и выполните ExpertRemove()
можно попробовать в конце OnTick() проверить IsStopped()
может быть и получится
хотя логичнее такую задачу решать путем создания кнопки на чарте, при нажатии закроете все ордера и выполните ExpertRemove()
Спасибо, да. Наверно, стоит пойти подобным путем.
Спасибо, да. Наверно, стоит пойти подобным путем.
Вместо спец.кнопки, легче использовать скрипт IamGoingToBed ;-)
В котором можно и вырубить эксперта
Вместо спец.кнопки, легче использовать скрипт IamGoingToBed ;-)
В котором можно и вырубить эксперта
Прикольная идея. Проще в реализации )))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, подскажите пожалуйста.
Хочу, чтобы если я удаляю советник с графика, автоматически удалялись бы все отложенные ордера, которые этот советник успел открыть.
Столкнулся с такой ошибкой при удалении отложенных ордеров непосредственно из OnDeinit() - "MQL5 program is stopped. Trading is disabled"
Есть ли какие-то способы обхода? Можно ли как-то удалять отложенные ордера из OnDeinit()? Если нельзя, то как решить поставленную задачу, чтобы при удалении советника с графика, удалялись бы все отложенные ордера, которые он выставил?
Спасибо за ответы.