Magic открытых позиций.

 

Как правильно получить Magic открытых позиций? Ниже код, но там мне показывается и уже закрытые Magic.
П.С. Для каждой новой позиций я делаю новый Magic (Magic++).

void GetMagicFromOpenPos(string sy="",int op=-1)
  {
   double l=0;
   int    i,k=OrdersTotal();

   if(sy==NULL) sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sy || sy=="")
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(OrderCloseTime()==0) // ???
                     Print("===================OrderOpenPrice(): ",OrderOpenPrice()," OrderMagicNumber(): ",OrderMagicNumber());
                 }
              }
           }
        }
     }
  }
 
OrderSelect

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

Так что ваш код выбирает среди открытых позиций/ордеров.
 
Konstantin Nikitin:
OrderSelectТак что ваш код выбирает среди открытых позиций/ордеров.

Ну да, и какое решение, как получить Magic только открытых позиций?

 
Nauris Zukas:

Ну да, и какое решение, как получить Magic только открытых позиций?

void GetMagicFromOpenPos(string symbol=NULL,int type=-1)
  {
   if( type != OP_BUY && type != OP_SELL ) return;
   if( symbol == NULL ) symbol = _Symbol;;
   
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=symbol)                     continue;
      if(OrderType()!=type)                         continue;
      Print("=================== OrderOpenPrice(): ",OrderOpenPrice()," OrderMagicNumber(): ",OrderMagicNumber());
     }
  }
Как-то так...
 
Konstantin Nikitin:
Как-то так...

То же самое что и мой вариант показывает - месте с закрытыми.

 
Nauris Zukas:

То же самое что и мой вариант показывает - открытые месте с закрытыми.

нет, закрытых не будет

а ордера перебирать лучше наоборот

      int i;
      //---
      for (i=OrdersTotal()-1; i>=0; i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {
            Print("===================OrderOpenPrice(): ",OrderOpenPrice()," OrderMagicNumber(): ",OrderMagicNumber());
         }
      }
      
 
Nauris Zukas:

То же самое что и мой вариант показывает - открытые месте с закрытыми.

Вы закрытые даже не выбираете. Каким образом они у вас показываются? Рискну предположить что у вас  сеточник в котором закрытие происходит часто и не кажется что показывает закрытые.

 
Konstantin Nikitin:

Вы закрытые даже не выбираете. Каким образом они у вас показываются? Рискну предположить что у вас  сеточник в котором закрытие происходит часто и не кажется что показывает закрытые.

Извиняюсь ошибся , не тот Print() смотрел. Идея понятна, только буду смотреть где надо код поправлять, так как работать он начинает только после закрытие первой позиций.

 
Renat Akhtyamov:

нет, закрытых не будет

а ордера перебирать лучше наоборот

Чем это связано, почему лучше?

 
Nauris Zukas:

Чем это связано, почему лучше?

Все понял все работает! ;)

 
Konstantin Nikitin:

Вы закрытые даже не выбираете. Каким образом они у вас показываются? Рискну предположить что у вас  сеточник в котором закрытие происходит часто и не кажется что показывает закрытые.

Да, над сеточником начал работать. Так как не где не нашел динамичный массив магиков думаю сделать. Может где-то уже есть есть такой код  и не надо велосипед за нового изобретать?