vladradon
Программист
Самый простой вариант: в одном цикле начинаешь отсчет с 0 для закрытия первого ордера и при выборе первого ордера, который прошел проверки и закрылся командой OrderClose, вставляешь команду break; чтобы закрыть цикл или сразу return; чтобы выйти из функции. Для последнего ордера запускаем цикл с OrdersTotal()-1 и при первом закрывшемся ордере вставляем такую же команду прерывания цикла или выхода. Можно сделать 2 одинаковые функции (чтобы попроще) - одна закрывает только 1-й, вторая только последний ордера.как я только не насиловал эту строку for(int i = total-1; i >= 0; i--), больше меньше +- и т.д. хз, так и не понял.
Можно перед циклом (начинаем с 0) задать 2 переменные тикет
int ticket1=-1, ticket2=-1;
В цикле вместо команды OrderClose (ее выносим и вставляем после цикла) вставляем строки:
if(ticket1<0) ticket1=OrderTicket();
if(ticket1>0) ticket2=OrderTicket();
В результате после цикла получаем в ticket1 тикет первого ордера, в ticket2 - тикет последнего, которые после цикла используем в 2-х командах OrderClose для закрытия этих ордеров по их тикетам:
if(ticket1>0)
{
OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES);
OrderClose (ticket1...
}
if(ticket2>0)
{
OrderSelect(ticket2,SELECT_BY_TICKET,MODE_TRADES);
OrderClose (ticket2...
}
Примерно так.
Последнее редактирование: