Это совсем просто
void CloseAllOrders() { Print("Total orders:", OrdersTotal()); for(int cnt=OrdersTotal()-1;cnt>=0;cnt--) { if( !OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) ) continue; Print("[",cnt,"] type: ", OrderType()); if( OrderSymbol()==Symbol() ) { if(OrderType()==OP_SELL ) { Print("CLosing sell order, Ask = ", Ask); if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White)) Print("CLosing order FAILED, Error = ", ErrorDescription(GetLastError())); }else if(OrderType()==OP_BUY ) { Print("CLosing buy order, Bid = ", Bid); if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White)) Print("CLosing order FAILED, Error = ", ErrorDescription(GetLastError())); } } }
а.. черт, кажется я понял где ошибка...
for(int cnt=0;cnt<OrdersTotal();cnt++)
Если закрывать ордера в цикле, ордерс тотал каждый рас будет возвращять меньше на единицу....
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Совсем запарился...
Вот функция, очень простая, итерирует в истории ордеров, и закрывает все найденные, при этом выводит некоторую информацию в отпут...
В логе видим:
2008.08.18 17:45 EURGBP,M15: Total orders:2
2008.08.18 17:45 EURGBP,M15: [0] type: 0
2008.08.18 17:45 EURGBP,M15: CLosing buy order, Bid = 0.7887
2008.08.18 17:45 EURGBP,M15: close #4 buy 0.10 EURGBP at 0.7980 at price 0.7887
2008.08.18 17:45 EURGBP,M15: CloseAllOrders(): exit
и все, только один ордер закрывает.. и никаких ошибок, и работает советник дальше, и ордер висит... че за...???
Обратите внимание что Total orders:2 а эта линия
Принтанула только нулевой елемент:EURGBP,M15: [0] type: 0
Как такое можно обьяснить?