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

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

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

Сообщение Haos » 19 апр 2021, 08:27

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

Напишем функцию, назвав её f_GetTypePosByMinLot(). Функция будет возвращать тип int, поскольку количество позиций целочисленно. У нашей функции будет два параметра:

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

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

В теле функции, как обычно в таких случаях, присутствует цикл перебора всех открытых позиций. Находится позиция, открытая с минимальным лотом и зарезервированной командой "OrderType()" присваивается возвращаемой функцией f_GetTypePosByMinLot() переменной, её значение, т.е. или "0" для операции покупка или "1" для операции "продажа". Если таковой позиции не найдено, то функция вернет значение "-1".

Сам код функции f_GetTypePosByMinLot() расположен ниже:
Код: выделить все
int f_GetTypePosByMinLot(string sy, int mn)
{
/*
   Описание : Возвращает тип операции (покупка или продажа)
              позиции открытой с минимальным размером лота
   Параметры:                                                             
   sy - наименование инструмента   (""   - любой символ,                 
                                   "0" - текущий символ)                 
   mn - MagicNumber                (-1   - любой магик)                   
*/
   double dbl_LotMin = 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_LotMin == 0 || dbl_LotMin > OrderLots())
                  {
                     dbl_LotMin = OrderLots();
                     int_op = OrderType();
                  }
               }
            }
         }
      }
   }
   
return(int_op);
}

Получив значение от функции в виде возвращаемого значения int (-1, 0 или 1), разаработчик использует далее его согласно алгоритму программы в требуемых целях.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 20147
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 1,026.80 Доллар
Группа: Главные модераторы
Благодарил (а): 2831 раз.
Поблагодарили: 7420 раз.

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

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

Процедура поиска типа позиции, открытой с максимальным лотом, описана в теме:
Тип позиции, открытой с максимальным лотом
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 20147
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 1,026.80 Доллар
Группа: Главные модераторы
Благодарил (а): 2831 раз.
Поблагодарили: 7420 раз.


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

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

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

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

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