//--------------------------------------------------------------- 6 --// Закрытие ордеров while(true) // Цикл закрытия орд.
{
if (OrderSymbol()!=Symb || Magic!=OrderMagicNumber())continue; // Не наш фин. инструм , не наш ордер
{if (Tip==0 && Cls_B==true) // Открыт ордер Buy..
{ //и есть критерий закр Alert("Попытка закрыть Buy ",Symb," ",Ticket,". Ожидание ответа..");
RefreshRates(); // Обновление данных
Ans=OrderClose(Ticket,Lot,Bid,2); // Закрытие Buy if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер Buy ",Symb," ",Ticket);
break; // Выход из цикла закр
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок continue; // Повторная попытка return; // Выход из start()
}
if (Tip==1 && Cls_S==true) // Открыт ордер Sell..
{ // и есть критерий закр Alert("Попытка закрыть Sell ",Symb," ",Ticket,". Ожидание ответа..");
RefreshRates(); // Обновление данных
Ans=OrderClose(Ticket,Lot,Ask,2); // Закрытие Sell if (Ans==true) // Получилось :)
{
Alert ("Закрыт ордер Sell ",Symb," ", Ticket);
break; // Выход из цикла закр
}
if (Fun_Error(GetLastError())==1) // Обработка ошибок continue; // Повторная попытка return; // Выход из start()
}
break; // Выход из while
}
}
//--------------------------------------------------------------- 7 --
for(int cnt=0; cnt<OrdersTotal(); cnt++) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symb && OrderMagicNumber()==Magic)
{
// здесь Ваш код
}
}
}
OrderClose напишите так:
Ans=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid, Digits),slippage,White); // для BuyAns=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask, Digits),slippage,White); // для Sell
И ещё. Прежде чем запускать цикл, определитесь, надо ли Вам это.
Для этого ещё перед циклом for() поставьте условие входа в цикл, т.е Ваши Cls_B==true и Cls_S==true.
if(Cls_B || Cls_S)
{
// входите в цикл и выполняете свой код
}
for(int cnt=0; cnt<OrdersTotal(); cnt++) {
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)){
if(OrderSymbol()==Symb && OrderMagicNumber()==Magic)
{
// здесь Ваш код
}
}
}
Для закрытия ордеров цикл неверный .... и еще: вызов функции при проверке условия - подчеркнуто - не самое удачное решение: это условие проверяется на каждой итерации цикла - дастаточно же вызвать один раз... Думаю, Вам полезнее разобраться самостоятельно - вопрос не единожды обсуждался на форуме....
Для закрытия ордеров цикл неверный .... и еще: вызов функции при проверке условия - подчеркнуто - не самое удачное решение: это условие проверяется на каждой итерации цикла - дастаточно же вызвать один раз... Думаю, Вам полезнее разобраться самостоятельно - вопрос не единожды обсуждался на форуме....
Удачи.
Владислав, Вы меня поставили в тупик.
Мне многократно приходилось видеть в готовых кодах именно этот цикл для выбора ордера, подлежащего закрытию.
Такой же код использую. Работает.
Мне будет весьма полезно узнать от Вас, в чем его неверность.
Относительно подчеркнутого, полностью согласен. Правильнее было бы так:
int total=OrdersTotal();
for(int cnt=0; cnt<total; cnt++){
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Ваш цикл меня смущает.
Попробуйте сделать перебор ордеров так:
OrderClose напишите так:
И ещё. Прежде чем запускать цикл, определитесь, надо ли Вам это.
Для этого ещё перед циклом for() поставьте условие входа в цикл, т.е Ваши Cls_B==true и Cls_S==true.
Ваш цикл меня смущает.
Попробуйте сделать перебор ордеров так:
Для закрытия ордеров цикл неверный .... и еще: вызов функции при проверке условия - подчеркнуто - не самое удачное решение: это условие проверяется на каждой итерации цикла - дастаточно же вызвать один раз... Думаю, Вам полезнее разобраться самостоятельно - вопрос не единожды обсуждался на форуме....
Удачи.
Для закрытия ордеров цикл неверный .... и еще: вызов функции при проверке условия - подчеркнуто - не самое удачное решение: это условие проверяется на каждой итерации цикла - дастаточно же вызвать один раз... Думаю, Вам полезнее разобраться самостоятельно - вопрос не единожды обсуждался на форуме....
Удачи.
Владислав, Вы меня поставили в тупик.
Мне многократно приходилось видеть в готовых кодах именно этот цикл для выбора ордера, подлежащего закрытию.
Такой же код использую. Работает.
Мне будет весьма полезно узнать от Вас, в чем его неверность.
Относительно подчеркнутого, полностью согласен. Правильнее было бы так:
Владислав, Вы меня поставили в тупик.
Мне многократно приходилось видеть в готовых кодах именно этот цикл для выбора ордера, подлежащего закрытию.
Такой же код использую. Работает.
Мне будет весьма полезно узнать от Вас, в чем его неверность.
При удалении ордеров некоторые будут пропущены - меняется нумерация ордеров. Правильный цикл в обратную сторону.
Посмотрите по форуму .....
Удачи
При удалении ордеров некоторые будут пропущены - меняется нумерация ордеров. Правильный цикл в обратную сторону. Посмотрите по форуму .....
Удачи
То есть cnt-- ?
Да, такое видел очень часто, но не придавал этому значение. Спасибо.