Ошибка Invalid ticket for OrderClose function - страница 3

 
Ого сколько букв и как всё закручено, наверняка без ошибок будет))))), пойду вживлять в сову, пробовать, СПАСИБО! Но в причинах ошибки конечно тож хотелось бы разобраться.
 

проверяйте ордер на закрытость измеряя его время закрытия, если оно не равно нулю - то ордер уже закрыт .

if(OrderCloseTime()!=0){continue;}

 
Понял, спасибо за помощь, то же добавлю.
 

Что здесь не так?

/////////////////////////////////////////////////

// Close the order but only if it is in profit //
/////////////////////////////////////////////////

void CloseIfInProfit(string symb , int index)
{
   for (int i = 0;i <= OrdersTotal();i++)
   {
       if( OrderSelect(i,SELECT_BY_POS,MODE_TRADES) )
       {
          if( OrderSymbol() == symb ) 
          {
            double profit = ( OrderProfit() - OrderCommission () - OrderSwap() );
            if( ( OrderType() == OP_BUY || OrderType() == OP_SELL) && ( profit >= 0 ) && (OrderMagicNumber() == MAGIC) )
            {
               OrderClose(OrderTicket(),OrderLots(),MarketInfo(symb,MODE_BID),100,Red);   // Close any open orders
               ObjectSetText("Txt2"+symb,"",TextSize,"Arial");                            // Gets rid of entry criteria message.    
            }
            if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP)
            {
               OrderDelete(OrderTicket());                                                // Delete any pending orders
               ObjectSetText("Txt2"+symb,"",TextSize,"Arial");                            // Gets rid of entry criteria message. 
            }
          }
       }
   }
   partial[index] = false;
}

 
1_lexa:

Что здесь не так?

  1. Развернуть цикл. Есть три ордера. Удаляем/закрываем ордер с индексом 0. Теперь индекс 0 у ордера, имевшего индекс 1 на предыдущей итерации. Но цикл переходит к индексу 1, пропуская таким образом ордер с индексом 0.
  2. Убрать равенство с OrdersTotal(). Если всего ордеров 3, то у них индексы 0, 1, 2. Ордера с индексом 3 нет.
Причина обращения: