Подсчет позиций в MT5-Hedge - страница 5

 
Vladimir Karputov:

Пример кода CCI_Reversy.

Функция CalculateAllVolumes подсчитываем ОБЪЁМЫ позиций (volumne_buys, volumne_sells) и отложенных ордеров (volumne_buy_limits, volumne_sell_limits, volumne_buy_stops, volumne_sell_stops)


А вот отдельные функции для подсчёта ПОЗИЦИЙ и ОТЛОЖЕННЫХ ордеров (уже не помню из какого кода взято)

считает ТОЛЬКО Buy stop и Sell stop


считает ПОЗИЦИИ

Верна ли будет фукнция, если я хочу посчитать отложки по типу и магику без учета символа?


int TotalByMagic(ENUM_ORDER_TYPE type,long const magic_number) 
  { 
   ulong order_ticket; 
   int total=0; 

   for(int i=0;i<OrdersTotal();i++) 
      if((order_ticket=OrderGetTicket(i))>0) 
         if(magic_number==OrderGetInteger(ORDER_MAGIC) && type == OrderGetInteger(ORDER_TYPE)) 
         total++; 
//--- 
   return(total); 
  }
 
Evgeniy Zhdan:

Здравствуйте! 99% роботов делаю на заказ под MT4, MT5 только пару раз просили. Поэтому, МТ5 не заморачивался. Возникла необходимость написать мультивалютного EA под МТ5. Столкнулся с банальной проблемой - как посчитать количество уже открытых ордеров. Казалось бы, уже должна быть какая-то готовая  функция....  Но нет. Поиск и чтение доков показывает, что для написания чего-то простейщего на МТ5 надо написать портянку кода на 2 экрана. Чтобы сделать автолот, надо подключить 10 библиотек,  чтоб открыть ордер, надо написать около 20 строк. Чтоб вытащить данные из индикатора это вообще песня с танцем на углях....

По сути вопроса. Вот такую, теоретически правильную функцию подсчета ордеров написал:

Однако, считает она  непонятно что. При наличии БАЙ-ордера, показывает 0. При 15 селл ордерах, показывает что их 5. Может кто направит на путь? Прошу не писать "читай справку". Читаем

Evgeniy Zhdan:

Здравствуйте! 99% роботов делаю на заказ под MT4, MT5 только пару раз просили. Поэтому, МТ5 не заморачивался. Возникла необходимость написать мультивалютного EA под МТ5. Столкнулся с банальной проблемой - как посчитать количество уже открытых ордеров. Казалось бы, уже должна быть какая-то готовая  функция....  Но нет. Поиск и чтение доков показывает, что для написания чего-то простейщего на МТ5 надо написать портянку кода на 2 экрана. Чтобы сделать автолот, надо подключить 10 библиотек,  чтоб открыть ордер, надо написать около 20 строк. Чтоб вытащить данные из индикатора это вообще песня с танцем на углях....

По сути вопроса. Вот такую, теоретически правильную функцию подсчета ордеров написал:

Однако, считает она  непонятно что. При наличии БАЙ-ордера, показывает 0. При 15 селл ордерах, показывает что их 5. Может кто направит на путь? Прошу не писать "читай справку". Читаем и так.



Спасибо! Может пригодиться! 

 
Yuriy Vins:

Спасибо! Может пригодиться! 

Ток нифига не работает )

 
Ладно. Сам напишу )
 
Yuriy Vins:
Ладно. Сам напишу )
Пишите для мт4, а для мт5 подключите библу MT4 Orders.mqh от fxsaber к исходники для мт4
 

Добрый день!

В моем советнике в MT5 нужно было подсчитать число ордеров. Счет с хеджированием.

И я пользуюсь вот такой процедурой:

int GetOrdersByType(ENUM_ORDER_TYPE OrderType)

  {

   ulong order_ticket;

   int total=0;

   for(int i=0;i<OrdersTotal();i++)

      if((order_ticket=OrderGetTicket(i))>0)

         if(OrderType==OrderGetInteger(ORDER_TYPE))

            total++;

   return(total);

  }


Однако оказалось, что часто неверно определяется это количество.

Не могли бы вы подсказать, какие дополнительные проверки следует добавить?

С уважением, Александр

 
klycko #:

Добрый день!

В моем советнике в MT5 нужно было подсчитать число ордеров. Счет с хеджированием.

И я пользуюсь вот такой процедурой:

int GetOrdersByType(ENUM_ORDER_TYPE OrderType)

  {

   ulong order_ticket;

   int total=0;

   for(int i=0;i<OrdersTotal();i++)

      if((order_ticket=OrderGetTicket(i))>0)

         if(OrderType==OrderGetInteger(ORDER_TYPE))

            total++;

   return(total);

  }


Однако оказалось, что часто неверно определяется это количество.

Не могли бы вы подсказать, какие дополнительные проверки следует добавить?

С уважением, Александр

вот пример делайте обратный цикл от большего к меньшему и позицию замените на ордер: 

//+------------------------------------------------------------------+
//|     CountTrades                                                  |
//+------------------------------------------------------------------+
int CountTrades(string symb)
  {
   int count=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==symb)
           {
            count++;
           }
        }
     }
   return(count);
  }
 
klycko #:

Добрый день!

В моем советнике в MT5 нужно было подсчитать число ордеров. Счет с хеджированием.

И я пользуюсь вот такой процедурой:

Проблема здесь:

int GetOrdersByType(ENUM_ORDER_TYPE OrderType)

  {

   ulong order_ticket;

   int total=0;

   for(int i=0;i<OrdersTotal();i++)

      if((order_ticket=OrderGetTicket(i))>0)

         if(OrderType==OrderGetInteger(ORDER_TYPE))

            total++;

   return(total);

  }

То есть ORDER_TYPE нужно заменить на OrderType. Ведь первое - это константа, а второе - аргумент функции.

 
Ihor Herasko #:

Проблема здесь:

То есть ORDER_TYPE нужно заменить на OrderType. Ведь первое - это константа, а второе - аргумент функции.

Функция 

OrderGetInteger

 очень удивляется на такую замену

 
klycko #:

Функция 

 очень удивляется на такую замену

Прошу прощения. Что-то я протупил, не о том подумал.