Не снимаются лимитные ордера на событие OnDeinit ни при снятии советника, ни как. - страница 2 12 Новый комментарий Aleksandr Dziuba 2023.11.28 09:03 #11 Aleksandr Dziuba #: 2023.11.28 10:21:44.645 BAS_v.1.16 (SVZ3,M1) CTrade::OrderDelete: MQL5 program is stopped. Trading is disabledТак! Значит нужно вынести за класс и в deinit просто отправлять запросы без класса. Вот так сделал. снимает ордер за 7мс. Успеваю. void delete_orders_exit() { MqlTradeRequest m_request; MqlTradeResult m_result; ZeroMemory(m_request); ZeroMemory(m_result); m_request.action =TRADE_ACTION_REMOVE; m_request.magic =Expert_MagicNumber; m_request.order =PrevLimOrderTicket; if(PrevLimOrderTicket != 0 && !OrderSendAsync(m_request,m_result)) { uint _result=m_result.retcode; Print(__FUNCTION__+"не удален лимитный ордер Result=",_result); } m_request.order =PrevLimBuyOrderTicket; if(PrevLimBuyOrderTicket != 0 && !OrderSendAsync(m_request,m_result)) { uint _result=m_result.retcode; Print(__FUNCTION__+"не удален лимитный ордер Result=",_result); } } fxsaber 2023.11.28 09:23 #12 JRandomTrader #: Так вот же! Не подумал бы, что торговая библиотека сама определяет, когда посчитает нужным торговать. JRandomTrader 2023.11.28 10:20 #13 fxsaber #: Не подумал бы, что торговая библиотека сама определяет, когда посчитает нужным торговать. Очень давно, нарвавшись на несколько граблей, отказался от CTrade. Aleksandr Dziuba 2023.11.28 10:23 #14 JRandomTrader #: Очень давно, нарвавшись на несколько граблей, отказался от CTrade. Я сам люблю модульное программирование. Но тут из лени пользуюсь. Aleksandr Dziuba 2023.11.29 06:42 #15 Aleksandr Dziuba #: Вот так сделал. снимает ордер за 7мс. Успеваю. Не правильное условие. Я всегда путаюсь с && и || по исполнению. Если && проверяются оба условия. Поэтому новый код void delete_orders_exit() { MqlTradeRequest m_request; MqlTradeResult m_result; ZeroMemory(m_request); ZeroMemory(m_result); m_request.action =TRADE_ACTION_REMOVE; m_request.magic =Expert_MagicNumber; m_request.order =PrevLimOrderTicket; if(PrevLimOrderTicket != 0) if(!OrderSendAsync(m_request,m_result)) { uint _result=m_result.retcode; Print(__FUNCTION__+"не удален лимитный ордер Result=",_result); } m_request.order =PrevLimBuyOrderTicket; if(PrevLimBuyOrderTicket != 0) if(!OrderSendAsync(m_request,m_result)) { uint _result=m_result.retcode; Print(__FUNCTION__+"не удален лимитный ордер Result=",_result); } } trampampam 2023.11.29 11:59 #16 Aleksandr Dziuba:снять лимитные ордера если закрывается терминал МТ5 или снимается советник. Сделал бы не так: вначале запретил работу эксперта/всех экспертов в терминале (с удалением всех ордеров), а только потом закрыл терминал. 12 Новый комментарий
2023.11.28 10:21:44.645 BAS_v.1.16 (SVZ3,M1) CTrade::OrderDelete: MQL5 program is stopped. Trading is disabled
Так! Значит нужно вынести за класс и в deinit просто отправлять запросы без класса.
Вот так сделал. снимает ордер за 7мс. Успеваю.
Так вот же!
Не подумал бы, что торговая библиотека сама определяет, когда посчитает нужным торговать.
Очень давно, нарвавшись на несколько граблей, отказался от CTrade.
Очень давно, нарвавшись на несколько граблей, отказался от CTrade.
Я сам люблю модульное программирование. Но тут из лени пользуюсь.
Вот так сделал. снимает ордер за 7мс. Успеваю.
Не правильное условие. Я всегда путаюсь с && и || по исполнению. Если && проверяются оба условия. Поэтому новый код
снять лимитные ордера если закрывается терминал МТ5 или снимается советник.
Сделал бы не так: вначале запретил работу эксперта/всех экспертов в терминале (с удалением всех ордеров), а только потом закрыл терминал.