OrdersTotal

 

Как реализовать if(OrdersTotal()<1) идущий один за одним

int start() 

if(OrdersTotal()<1)

{

здесь определенный ордер

 ??????????? здесь что?

if(OrdersTotal()<1) 

{

здесь определенный ордер

} и т.д. 

 
А какова цель реализации?
 
djo:

Там где написано ??????????? здесь что? на самом деле нет ничего. Условие оператора закрыто.
 
Если нужен перебор всех ордеров:
//---
   ulong ticket=0;
//---
   for(int i=OrdersTotal()-1;i>=0;i--) if((ticket=OrderGetTicket(i))>0)
     {
      //здесь определенный ордер, и работа с ним
     }
//---
Ну а если задача иная, нужно больше информации.
 
svds75:
Если нужен перебор всех ордеров:Ну а если задач
svds75:
Если нужен перебор всех ордеров:Ну а если задача иная, нужно больше информации.
спасибо!
 

Подскажите, кто знает - где ошибка в коде?

  for(i=OrdersTotal()-1;i>=0;i--)

       {

      OrderSelect(i,SELECT_BY_POS);

      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue; 

   int total=OrdersTotal();

   if 

   (OrderMagicNumber()==MAGIC

   &&

   total>N)

   return(0);

       } 

Этот кусок кода у меня определяет сколько позиций открывает советник. НО: Когда в терминале запущен только этот советник, он работает как надо. Открывает сколько ему задано позиций по внешней переменней N. Но когда в терминале подключены одновременно еще несколько советников, и они открыли свои позиции,  тот, кто должен открыть например 3 или 4 позиций, открывает только одну. Больше не хочет. Что-то происходит не как надо.

 
awers:

Подскажите, кто знает - где ошибка в коде?

for(i=OrdersTotal()-1;i>=0;i--)

       {

      OrderSelect(i,SELECT_BY_POS);

      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MAGIC) continue; 

   int total=OrdersTotal();

   if 

   (OrderMagicNumber()==MAGIC

   &&
   total>N)

   return(0);

       } 

  

Этот кусок кода у меня определяет сколько позиций открывает советник. НО: Когда в терминале запущен только этот советник, он работает как надо. Открывает сколько ему задано позиций по внешней переменней N. Но когда в терминале подключены одновременно еще несколько советников, и они открыли свои позиции,  тот, кто должен открыть например 3 или 4 позиций, открывает только одну. Больше не хочет. Что-то происходит не как надо.

Попробуйте вот эту функцию. Функция возвращает количество открытых ордеров заданного типа (OrderCmd) , символа (Smb) и магика (MN)

int Trader::OrderOpenCount(int OrderCmd=-1, string Smb, int MN) 
{
//Order_Type = -1 ордера всех типов
//Order_Type = -2 только рыночные ордера OP_BUY и OP_SELL
//Order_Type = -3 только отложенные ордера OP_BUYSTOP и OP_SELLSTOP
//Order_Type = -4 только отложенные ордера OP_BUYLIMIT и OP_SELLLIMIT
   int i; int col;
   col=0;
   for(i=OrdersTotal()-1; i>=0; i--)         
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
       {                                   
           if(OrderSymbol()==Smb && OrderMagicNumber()==MN)
       {
          if (OrderCmd>=0)
          {
            if (OrderCmd == OrderType()) {col++; continue;}
          }           
          else
          {
             if (OrderCmd == -1) {col++; continue;}
             if (OrderCmd == -2)
             {
                if (OrderType() == OP_BUY || OrderType() == OP_SELL) col++;  
                continue;
             }  
             if (OrderCmd == -3)
             {
                if (OrderType() == OP_BUYSTOP || OrderType() == OP_SELLSTOP) col++;  
                continue;
             } 
             if (OrderCmd == -4)
             {
                if (OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT) col++;
                continue;
             }                                                       
          }
           }
       }
    }   
    return(col);
} 
 
awers:
 

...

vitales:
 

...

Исправьте, пожалуйста, свои сообщения: Правильно вставляем код на форуме
 
barabashkakvn:
Исправьте, пожалуйста, свои сообщения: Правильно вставляем код на форуме
Прошу прощения, исправил.
 
Разобрался, заработало как надо. Спасибо.
Причина обращения: