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

 

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

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

//+------------------------------------------------------------------+
int CountTrades(int type,int magic)
  {
   if(PositionSelect(pairWork))
     {
      int count=0;
      for(int i= PositionsTotal(); i>=0; i--)
        {
         if(PositionGetInteger(POSITION_TYPE)==type || type<0)
           {
            if(PositionGetInteger(POSITION_MAGIC)==magic || magic<0)
              {
               count++;
              }
           }
        }

      return(count);
     }
   return(0);
  }
//+------------------------------------------------------------------+

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

 
Evgeniy Zhdan:

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

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

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


Так определить, что нужно считать-то: отложенные ОРДЕРА или ПОЗИЦИИ?

 
Vladimir Karputov:

Так определить, что нужно считать-то: отложенные ОРДЕРА или ПОЗИЦИИ?

ORDER_TYPE_BUY

Рыночный ордер на покупку - вот такие 

ORDER_TYPE_SELL

Рыночный ордер на продажу - или такие

ORDER_TYPE_BUY_LIMIT

Отложенный ордер Buy Limit

ORDER_TYPE_SELL_LIMIT

Отложенный ордер Sell Limit


А какая собственно разница? Если я могу в CountTrades(int type,int magic)  написать то, что мне надо посчитать

 

Вам нужно считать ПОЗИЦИИ.

 

Пример подсчёта отдельно ПОЗИЦИЙ BUY и SELL:

//+------------------------------------------------------------------+
//| Calculate positions Buy and Sell                                 |
//+------------------------------------------------------------------+
void CalculatePositions(int &count_buys,int &count_sells)
  {
   count_buys=0.0;
   count_sells=0.0;

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
               count_buys++;

            if(m_position.PositionType()==POSITION_TYPE_SELL)
               count_sells++;
           }
//---
   return;
  }

В шапке подключить торговые классы CPositionInfo и  CSymbolInfo:

#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>  
CPositionInfo  m_position;                   // trade position object
CSymbolInfo    m_symbol;                     // symbol info object
 
Vladimir Karputov:

Вам нужно считать ПОЗИЦИИ.


Хорошо, позиции.

При вызове функции - CountTrades(POSITION_TYPE_BUY,Magic)  она и не работает

 
Vladimir Karputov:

Пример подсчёта отдельно ПОЗИЦИЙ BUY и SELL:

В шапке подключить торговые классы CPositionInfo и  CSymbolInfo:


Спасибо. Ощющение, что MQL5 сделан не для трейдинга. 

 
Evgeniy Zhdan:

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

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

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


О сколько нам открытий чудных готовит МТ5 ...

Раз уж взялись за работу - курите мануал, или забудьте про МТ5.

 
Sergey Chalyshev:

О сколько нам открытий чудных готовит МТ5 ...

Раз уж взялись за работу - курите мануал, или забудьте про МТ5.


Не зря уже лет 7 (или сколько там он существует)  MT5 не приживается у простолюдинов.

Почему нельзя сделать уже готовые классы к любой рыночной ситуации? Вот как в Java на 99% ТИПИЧНЫХ задач есть готовое решение. Я полагаю, что подсчет позиций, автолот, открытие позиций, закрытие это и есть ТИПИЧНЫЕ для трейдинга задачи и можно было их сделать одной строчкой.

 
Evgeniy Zhdan:

Не зря уже лет 7 (или сколько там он существует)  MT5 не приживается у простолюдинов.

Почему нельзя сделать уже готовые классы к любой рыночной ситуации? Вот как в Java на 99% ТИПИЧНЫХ задач есть готовое решение. Я полагаю, что подсчет позиций, автолот, открытие позиций, закрытие это и есть ТИПИЧНЫЕ для трейдинга задачи и можно было их сделать одной строчкой.


простолюдинам пофигу мт5 или мт4.

Для простого гуи трейдера обе платформы идентичны, особенно после введения хеджевых счетов. При неттинге только некоторые неудобства возникают у начинающих изза непривычного подсчёта позиций и всё. Но это проблема 1-2 дней.

 
Alexey Oreshkin:

простолюдинам пофигу мт5 или мт4.

Для простого гуи трейдера обе платформы идентичны, особенно после введения хеджевых счетов. При неттинге только некоторые неудобства возникают у начинающих изза непривычного подсчёта позиций и всё. Но это проблема 1-2 дней.


Это все в теории. Практика показывает, что пользователей MT4 > MT5*100.