Выбор ордеров (к разработчикам)

 

Уважаемые разработчики, функция

OrderSelect(_i, SELECT_BY_POS, MODE_TRADES);

MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров
однако функция корректно работает на реале, а на демо нет, то-есть учитываются и закрытые отложки.

После того как явно прописываешь

if(OrderSymbol() == Symbol() && OrderCloseTime() <= 0 && OrderMagicNumber() == Magic)

всё начинает работать исправно.

Это я чего-то не понимаю или глюк терминала?

 
valenok2003:

Уважаемые разработчики, функция

OrderSelect(_i, SELECT_BY_POS, MODE_TRADES);

MODE_TRADES (по умолчанию) - ордер выбирается среди открытых и отложенных ордеров
однако функция корректно работает на реале, а на демо нет, то-есть учитываются и закрытые отложки.

После того как явно прописываешь

if(OrderSymbol() == Symbol() && OrderCloseTime() <= 0 && OrderMagicNumber() == Magic)

всё начинает работать исправно.

Это я чего-то не понимаю или глюк терминала?

Закрытых отложек не бывает. Что такое "закрытые отложки"? Каким образом их можно "закрыть"
 
paukas:
Закрытых отложек не бывает. Что такое "закрытые отложки"? Каким образом их можно "закрыть"
К словам не цепляйтесь, конечно, удалённые.
 
valenok2003:
К словам не цепляйтесь, конечно, удалённые.

Это другое дело. Никогда не наблюдал такого эффекта. Можно кусочек кода который выбирает?

Ошибка скорее всего именно в нём.

 

пожалуйста, правда определение времени закрытия (удаления) я уже добавил. Эта функция не единственная, которая не правильно работает, а просто элементарный пример.

//+-------
//+------------------------------------------------------------------+
//|   valenok2003@mail.ru                                08.12.2010
//+------------------------------------------------------------------+
//| comment_num_orders() выдаёт в комментарии общее количество ордеров
//| требует:        
//| - магик
//+------------------------------------------------------------------+
void comment_num_orders(int _Magic)
{  if(!Comment_ON) return;
   string _Function = "comment_num_orders():";
   int _Cnt_BUY = 0;
   int _Cnt_SELL = 0;
   int _Cnt_BUYSTOP = 0;
   int _Cnt_SELLSTOP = 0;
   for(int _i=OrdersTotal()-1; _i>=0; _i--) 
   {  OrderSelect(_i, SELECT_BY_POS, MODE_TRADES);
      if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderCloseTime() <= 0 && OrderMagicNumber()==_Magic)
         _Cnt_BUY++; 
      if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderCloseTime() <= 0 && OrderMagicNumber()==_Magic)
         _Cnt_SELL++; 
      if(OrderSymbol()==Symbol() && OrderType()==OP_BUYSTOP && OrderCloseTime() <= 0 && OrderMagicNumber()==_Magic)
         _Cnt_BUYSTOP++; 
      if(OrderSymbol()==Symbol() && OrderType()==OP_SELLSTOP && OrderCloseTime() <= 0 && OrderMagicNumber()==_Magic)
         _Cnt_SELLSTOP++; 
   }
   Txt_Comment = Txt_Comment + "\n"+"== всего ордеров ==";
   if(_Cnt_BUY != 0)     Txt_Comment = Txt_Comment + "\n"+"OP_BUY: "     +_Cnt_BUY;
   if(_Cnt_SELL != 0)    Txt_Comment = Txt_Comment + "\n"+"OP_SELL: "    +_Cnt_SELL;
   if(_Cnt_BUYSTOP != 0) Txt_Comment = Txt_Comment + "\n"+"OP_BUYSTOP: " +_Cnt_BUYSTOP;
   if(_Cnt_SELLSTOP != 0)Txt_Comment = Txt_Comment + "\n"+"OP_SELLSTOP: "+_Cnt_SELLSTOP;
   return;
}
//+------------------------------------------------------------------+
//+-------
 
valenok2003:

пожалуйста, правда определение времени закрытия (удаления) я уже добавил. Эта функция не единственная, которая не правильно работает, а просто элементарный пример.

Проверьте OrdersTotal() правильную цифру даёт?
 

Прошу прощения, - моя невнимательность. У меня на 10 ордеров 0.01 был открыт один лок на 0.1.

Ещё раз извините.