Есть советник, обрабатывающий одновременно два открытых ордера BUY и SELL. Необходимо отслеживать в OnTick() факт закрытия одного или обоих ордеров по лимитам. В целом все работает, но время от времени проявляется баг - если один ордер закрылся, а другой еще открыт, закрывшийся ордер возвращается функцией OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) как будто он открыт, причем до тех пор, пока не закроется второй ордер. После этого нормальная работа восстанавливается до следующего сбоя. Как мне гарантировано отследить, что ордер все-таки закрыт? Все функции (OrderType, OrderCloseTime) возвращают значения, характерные для открытого ордера!
MT4 build 950.
Код отслеживания стандартный:
А что стандартного в Вашем коде?
Перебор открытых ордеров и выборка тех, что принадлежат советнику. Что странно, и вот такой "костыль" не помогает:
if( OrderStopLoss()>OrderTakeProfit() )if(OrderStopLoss()>Bid && OrderTakeProfit()<Bid){active_orders_state_SELL=true;} if( OrderStopLoss()<OrderTakeProfit() )if(OrderStopLoss()<Bid && OrderTakeProfit()>Bid){active_orders_state_BUY=true;}
Единственное, что пока придумал, проверять, попадает ли текущая цена в диапазон SL и TP проверяемого ордера. (Ордер не может быть открытым, если текущая цена уже вне лимитов. )
Возможно, еще какая-то проблема с событием OnTick.
Стандартного пока ничего не увидел.
Хотелось бы еще увидеть еще код открытия новых позиций

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть советник, обрабатывающий одновременно два открытых ордера BUY и SELL. Необходимо отслеживать в OnTick() факт закрытия одного или обоих ордеров по лимитам. В целом все работает, но время от времени проявляется баг - если один ордер закрылся, а другой еще открыт, закрывшийся ордер возвращается функцией OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) как будто он открыт, причем до тех пор, пока не закроется второй ордер. После этого нормальная работа восстанавливается до следующего сбоя. Как мне гарантировано отследить, что ордер все-таки закрыт? Все функции (OrderType, OrderCloseTime) возвращают значения, характерные для открытого ордера!
MT4 build 950.
Код отслеживания стандартный: