Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нужно пополнить счет? Пополняй удобным тебе способом!
Dennie
38
Dennie 2016.03.13 10:54 

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

MT4 build 950.

Код отслеживания стандартный:


active_orders_state_SELL=false;active_orders_state_BUY=false;
for (cnt = OrdersTotal() - 1; cnt >= 0; cnt--) {
         if( !OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) )return ;
         if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {         
         
         if( OrderStopLoss() > OrderTakeProfit() ){active_orders_state_SELL = true;}// Попытка заменить функцию OrderType(), результат также отрицательный
         if( OrderStopLoss() < OrderTakeProfit() ){active_orders_state_BUY = true;}
     }
    }
Victor Nikolaev
Модератор
14033
Victor Nikolaev 2016.03.13 13:13  
ouch:

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

MT4 build 950.

Код отслеживания стандартный:


А что стандартного в Вашем коде?
Dennie
38
Dennie 2016.03.13 14:05  
Vinin:
А что стандартного в Вашем коде?

Перебор открытых ордеров и выборка тех, что принадлежат советнику. Что странно, и вот такой "костыль" не помогает:

 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.

Victor Nikolaev
Модератор
14033
Victor Nikolaev 2016.03.13 15:21  

Стандартного пока ничего не увидел.

Хотелось бы еще увидеть еще код открытия новых позиций

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий