Подскажите что не правильно в коде закрытия ордера?

 
Подскажите пожалуйста, на что ругается метатрейдер.
Вот код:
/////////////////////////////////////////////  Функция Закрытия SELL ордеров в рынке //////////////////////
void Sell_Orders_Close()
{
//if(MA_crossDwn == true)
for (int msl = OrdersTotal() - 1; msl >= 0; msl--) 
   {
      if(!OrderSelect(msl, SELECT_BY_POS, MODE_TRADES)) break;
      if (OrderSymbol() == Symbol()) 
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic_Sell_Limit) 
         {
         while (!IsTradeAllowed()) Sleep(1000);
            RefreshRates();
            if (OrderType() == OP_SELL) !OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red);
            Print("Ошибка закрытия ордера Magic_Sell_Limit" );           
         }
      }
   }
)
 
 if (OrderType() == OP_SELL) !OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red);
 

Мне кажется подразумевался такой вариант

if(OrderType() == OP_SELL && !OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red))
правда для себя я никогда так не написал-бы.
 
Alexey Viktorov:

Мне кажется подразумевался такой вариант

правда для себя я никогда так не написал-бы.

Спасибо, но это я тоже пробовал....
Вот какой результат:

 
fxsaber:

Нет, без этого пишет что надо проверить.

 
Hugeen20015:

Спасибо, но это я тоже пробовал....
Вот какой результат:


Так скобку ведь не переставили. Если уж добавлено логическое И, то скобка должна стоять за OrderClose:

 if (OrderType() == OP_SELL && !OrderClose(OrderTicket(), OrderLots(), NormalizeDouble(Ask,Digits), Slippage, Red))
            Print("Ошибка закрытия ордера Magic_Sell_Limit" );           
 
Ihor Herasko:

Так скобку ведь не переставили. Если уж добавлено логическое И, то скобка должна стоять за OrderClose:


Спасибо.
Вот как решил проблему... Поменял местами... и Аллилуя...

 
Hugeen20015:

Спасибо.
Вот как решил проблему... Поменял местами... и Аллилуя...

Почитайте об очерёдности проверки if, думаю пригодится в будущем

 
Hugeen20015:
if(!OrderSelect(msl, SELECT_BY_POS, MODE_TRADES)) break;
break - прекращает выполнение цикла, наверно нужно continue
 
Hugeen20015:

Спасибо.
Вот как решил проблему... Поменял местами... и Аллилуя...

Потрясающе!!! Главное чтобы компилятор не выражался матом, а как будет выполнен код, это не важно.

Молодец! Так держать!

 
Alexey Viktorov:

Потрясающе!!! Главное чтобы компилятор не выражался матом, а как будет выполнен код, это не важно.

Молодец! Так держать!


Спасибо за эмоциональный ответ, ну а что по существу можете сказать? Предложенное вами ранее решение не привело к результату, я нашел другой вариант. В чем ошибка? Я открыт к диалогу.