Подскажите есть ли функция //на данной валютной паре открыто n-ордеров//

 

Здравствуйте!

Хочу чтобы советник открывал один ордер на каждой валюте куда он помещён.

Весь мозг сломал , уже недели 2 наверное((.

Сейчас прописано вот это:

total=OrdersTotal();

  if(total<1)

// разрешает открытие  одного ордера , другой конечно же не откроет пока не произойдёт закрытие //

Может есть функция типа //на данной валютной паре открыто n-ордеров//
 
qwestxs1:

Здравствуйте!

Хочу чтобы советник открывал один ордер на каждой валюте куда он помещён.

Весь мозг сломал , уже недели 2 наверное((.

Сейчас прописано вот это:

total=OrdersTotal();

  if(total<1)

// разрешает открытие  одного ордера , другой конечно же не откроет пока не произойдёт закрытие //

Может есть функция типа //на данной валютной паре открыто n-ордеров//

Вот держите

int Total_orders(string symbol,int type)
  {
   int n=0;
   int total=OrdersTotal();

   for(int i=0; i<total; i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS))continue;
      if(OrderSymbol()!=symbol)continue;
      if(OrderMagicNumber()!=Magic)continue;
      if(OrderType()!=type)continue;
      n++;
     }
   return(n);
  }
 
qwestxs1:

Здравствуйте!

Хочу чтобы советник открывал один ордер на каждой валюте куда он помещён.

Весь мозг сломал , уже недели 2 наверное((.

Сейчас прописано вот это:

total=OrdersTotal();

  if(total<1)

// разрешает открытие  одного ордера , другой конечно же не откроет пока не произойдёт закрытие //

Может есть функция типа //на данной валютной паре открыто n-ордеров//

Так понимаю вопрос по четвёрке? если да тогда вот:

 

int SymbolTotalOrders(int &tickets[],string symbol)
  {
   int res=0;
   int total=OrdersTotal();
   ArrayResize(tickets,0,total);
   for(int index=0;index<total;index++)
     {
      if(OrderSelect(index,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==symbol)
           {
            res=ArrayResize(tickets,res+1);
            tickets[res-1]=OrderTicket();
           }
        }
     }
    return(res); 
  };

 вызывается для текущего символа вот так:

int ticket[];
int count_orders_symbol = SymbolTotalOrders(ticket,Symbol());

За одно и все тикеты переписаны для дальнейшей работы с ними.

 
Nikolay Demko:

Так понимаю вопрос по четвёрке? если да тогда вот:

 

 вызывается для текущего символа вот так:

За одно и все тикеты переписаны для дальнейшей работы с ними.

Как-то всё сложно ) , да и Magic не учитывает, и позиции будет считать.

Вот более правильная: 

//===============================================================================================
//------------------------------- Возвращает количество ордеров --------------------------------+
//===============================================================================================
int NumOfOrd(string symb="0", int type=-1, int mg=-1) {
 int c=0;
  if(symb=="0") { symb=Symbol();}
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
     if(OrderType()>1 && OrderType()<6) {
      c++;
 }}}}
  return(c);
 }

 Вызывать так:

if(NumOfOrd(_Symbol,OP_BUYSTOP,Magic) == 0) { // если нет байстоп ордеров
 // что-то делаем
}

if(NumOfOrd(_Symbol,OP_SELLSTOP,Magic) == 0) { // если нет селлстоп ордеров
 // что-то делаем
}
Причина обращения: