Помогите новичку с OrdersTotal()

 

Приветствую всех!

Ребята, помогите пожалуйста разобраться с параметрами OrdersTotal()....

как мне среди всех открытых ордеров, определить, что у меня не открыты ордера например по EURUSD?

пробовал

---- if (OrdersTotal(Symbol("EURUSD"))==0) - не работает

---- if (OrdersTotal(OrderSymbol("EURUSD"))==0) - не работает


как тогда?


И, может кто подскажет, где почитать допустимые параметры предопределенных функций... буду признателен.

 
rescuer-net:

Приветствую всех!

Ребята, помогите пожалуйста разобраться с параметрами OrdersTotal()....

как мне среди всех открытых ордеров, определить, что у меня не открыты ордера например по EURUSD?

пробовал

---- if (OrdersTotal(Symbol("EURUSD"))==0) - не работает

---- if (OrdersTotal(OrderSymbol("EURUSD"))==0) - не работает


как тогда?


И, может кто подскажет, где почитать допустимые параметры предопределенных функций... буду признателен.


OrdersTotal() не имеет параметров, если надо подсчитать по типам ордеров, значит понадобится цикл в котором будут перебраны все открытые и отложенные ордера, разделены по типам и по символам, и подсчитаны сколько их по каждой категории. Всё есть в справке метаедитора (Справочник MQL4 - Торговые функции - OrdersTotal):


  int total=OrdersTotal(); //
  
  for(int pos=0;pos<total;pos++)
    {
     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
     FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots());
    }


 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 06.03.2008                                                     |
//|  Описание : Возвращает флаг существования позиций                          |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) {
  int i, k=OrdersTotal();

  if (sy=="0") 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 (mn<0 || OrderMagicNumber()==mn) {
              if (ot<=OrderOpenTime()) return(True);
            }
          }
        }
      }
    }
  }
... no comments ...
 
evillive:

OrdersTotal() не имеет параметров, если надо подсчитать по типам ордеров, значит понадобится цикл в котором будут перебраны все открытые и отложенные ордера, разделены по типам и по символам, и подсчитаны сколько их по каждой категории. Всё есть в справке метаедитора (Справочник MQL4 - Торговые функции - OrdersTotal):



хм.....

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

 
int eurusd_b;
int eurusd_s;
int gbpusd_b;
int gbpusd_s;

int start()
   {
   if (OrdersTotal()>0)
      {
      eurusd_b=0;
      eurusd_s=0;
      gbpusd_b=0;
      gbpusd_s=0;
      int total=OrdersTotal();
      for (int pos=0;pos<total;pos++)
          {
          if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
             {
             if (OrderSymbol()=="EURUSD")
                {
                if (OrderType()==OP_BUY)
                   {
                   eurusd_b=1;
                   }
                if (OrderType()==OP_SELL)
                   {
                   eurusd_s=1;
                   }
                }
             if (OrderSymbol()=="GBPUSD")
                {
                if (OrderType()==OP_BUY)
                   {
                   gbpusd_b=1;
                   }
                if (OrderType()==OP_SELL)
                   {
                   gbpusd_s=1;
                   }
                }
             }
          }
       }
     }


а вот так будет работать? )))

учитывая то, что у меня не может по одному символу одновременно быть открыты ордера на BUY и SELL - думаю должно сработать )))

 
int eurusd_b;
int eurusd_s;
int gbpusd_b;
int gbpusd_s;

int start()
   {
   if (OrdersTotal()>0)
      {
      eurusd_b=0;
      eurusd_s=0;
      gbpusd_b=0;
      gbpusd_s=0;
      int total=OrdersTotal();
      for (int pos=0;pos<total;pos++)
          {
          if (OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
             {
             if (OrderSymbol()=="EURUSD")
                {
                if (OrderType()==OP_BUY)
                   {
                   eurusd_b++;
                   }
                if (OrderType()==OP_SELL)
                   {
                   eurusd_s++;
                   }
                }
             if (OrderSymbol()=="GBPUSD")
                {
                if (OrderType()==OP_BUY)
                   {
                   gbpusd_b++;
                   }
                if (OrderType()==OP_SELL)
                   {
                   gbpusd_s++;
                   }
                }
             }
          }
       }
     }
так будет показывать количество ордеров(суммировать)
 

ну почему суммировать? перед началом цикла, он обнуляет переменные и по окончании цикла, я (советник) увижу, есть ли у меня открытые ордера той или иной монеты, если читать мой код, без "++"

разве нет?

 
а если ордеров несколько ? с моими исправлениями он будет показывать сколько ордеров каждого типа
Причина обращения: