Тип позиции, открытой с максимальным лотом

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Тип позиции, открытой с максимальным лотом

Сообщение Haos » 29 апр 2021, 09:48

Рассмотрим ситуацию, когда трейдер имеет несколько открытых позиций по одному торговому инструменту и ему нужно найти тип позиции (покупка или продажа), открытой с максимальным лотом. Подобная ситуация может возникнуть при торговле сетью или с усреднениями или при использовании мартингейла. В данном случае, трейдеру может оказаться необходимым осуществить контроль за направлением позиции, открытой с максимальным лотом.

Для реализации данного алгоритма напишем отдельную функцию и назовем её f_GetTypePosByMaxLot(). Фукнция будет иметь тип int, поскольку тип позиции определяется или "0" для операции покупки или "1" для операции продажи.

Параметров у нашей функции будет два:

sy - наименование инструмента ("" - любой символ, "0" - текущий символ);
mn - MagicNumber (-1 - любой магик).

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

Код функции представлен ниже:
Код: выделить все
int f_GetTypePosByMaxLot(string sy, int mn)
{
/*
   Описание : Возвращает тип операции (покупка или продажа)
              позиции открытой с максимальным размером лота
   Параметры:                                                             
   sy - наименование инструмента   (""   - любой символ,                 
                                   "0" - текущий символ)                 
   mn - MagicNumber                (-1   - любой магик)                   
*/
   double dbl_LotMax = 0;
   int int_op = -1; // 0 - покупка, 1 - продажа
   if(sy == "0") sy = Symbol();
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == sy || sy == "")
         {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
               if(mn < 0 || OrderMagicNumber() == mn)
               {
                  if(dbl_LotMax == 0 || OrderLots() > dbl_LotMax)
                  {
                     dbl_LotMax = OrderLots();
                     int_op = OrderType();
                  }
               }
            }
         }
      }
   }
   
return(int_op);
}


В цикле просмотра имеющихся ордеров функция для каждой найденной позиции с заданными условиями поиска производит сравнение величины лота данной позиции с уже запомненным значением ранее. Если новое значение величины лота позиции оказывается больше уже имеющегося (переменная dbl_LotMax), то в эту переменную записывается новое большее значение лота и определяется тип данной позиции, который присваивается переменной int_op. В результате просмотра всех открытых позиций функция вернет через эту переменную (int_op) искомый тип позиции, открытой с максимальным лотом.
Если таковой позиции не найдено, то функция вернет значение "-1".

Далее, разработчик может использовать в своем коде, найденное значение, полученное при помощи данной функции f_GetTypePosByMaxLot() для дальнейших алгоритмических действий.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Тип позиции, открытой с максимальным лотом

Сообщение Haos » 29 апр 2021, 09:53

Данная алгоритмическая процедура имеет смежную ей в качестве поиска типа позиции, открытой с минимальным лотом, что отражено в теме:
Тип позиции, открытой с минимальным лотом
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 72

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения