Помогите написать скрипт для закрытия ордеров только по одному инструменту. Написал вот такой код и не работает, что тут не правильно?
В кривые скобки надо завернуть весь цикл. А там где они сейчас есть не особо нужны.
Помогите написать скрипт для закрытия ордеров только по одному инструменту. Написал вот такой код и не работает, что тут не правильно?
По-моему так (индексация ордеров начинается с нуля по-моему):
for (int i=OrdersTotal()-1; i>-1; i--){ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ if(OrderSymbol()==Symbol()){ bool orderClose=false; while(!orderClose){ ResetLastError(); orderClose=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage); if(!orderClose){ Print("Error orderClose(): ", GetLastError()); } } } } }
По-моему так (индексация ордеров начинается с нуля по-моему):
for (int i=OrdersTotal()-1; i>-1; i--){ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){ if(OrderSymbol()==Symbol()){ bool orderClose=false; while(!orderClose){ orderClose=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage); } } } }
Евгений, так делать нельзя. Если вдруг будет реквота, то цикл уйдёт в бесконечность и подвесит терминал.
Выделенное красным никчёмное излишество. А вот направление перебора ордеров да, я просмотрел. Не обратил внимание.
Евгений, так делать нельзя. Если вдруг будет реквота, то цикл уйдёт в бесконечность и подвесит терминал.
Выделенное красным никчёмное излишество. А вот направление перебора ордеров да, я просмотрел. Не обратил внимание.
Ааа, ну да... можно и без "труе"...
По поводу бесконечности... не знал... вроде работало, когда тестил своих роботов... Вот так норм?
for (int i=OrdersTotal()-1; i>-1; i--){ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){ if(OrderSymbol()==Symbol()){ bool orderClose=false; ResetLastError(); orderClose=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage); if(!orderClose) Print("Error orderClose(): ", GetLastError()); } } }
В кривые скобки надо завернуть весь цикл. А там где они сейчас есть не особо нужны.
Спасибо, все заработало!)
Ааа, ну да... можно и без "труе"...
По поводу бесконечности... не знал... вроде работало, когда тестил своих роботов... Вот так норм?
MODE_TRADES тоже не играет роли в данном случае. Это значение поставлено по умолчанию.
А зачем так написали? i>-1 разве не проще и понятней написать i==0
И ещё есть такой вариант цикла
for(int i = OrdersTotal(); i-- > 0;)
Сначала выполняется i-- потом тело цикла и только потом проверка >0
Как ни странно, но это работает.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите написать скрипт для закрытия ордеров только по одному инструменту. Написал вот такой код и не работает, что тут не правильно?