Наличие позиции по комментарию

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

Наличие позиции по комментарию

Сообщение Haos » 12 июн 2021, 05:31

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

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

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

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

return(false);
}


Данная функция будет иметь логический тип, т.е. bool. Т.е. функция вернет истина, если искомая позиция будет найдена и false если искомая позиция не будет найдена.
В функцию передаются следующие параметры:
- sy - наименование инструмента;
- op - тип торговой операции (покупка, продажа или, если "-1", то или покупка, или продажа);
- mn - MagicNumber - мэджик эксперта;
- co - комментарий.

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

В теле функции f_ExistPosByComment осуществляется цикл перебора всех ордеров, в котором по заданным условиям поиска происходит отбор необходимой позиции, т.е. по заданному комментарию. Это и определяют заданные входные параметры функции.

При совпадении комментари для выбранного ордера с заданным, что осуществляется в строке:
Код: выделить все
 if(OrderComment() == co) return(true);

функция возвращает значение "истина" - true.
Если же поиск позиции с заданным комментарием ничего не дал, то строка
Код: выделить все
return(false);

вернет значение "ложь" - false.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 21041
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 1,201.60 Доллар
Группа: Главные модераторы
Благодарил (а): 2952 раз.
Поблагодарили: 7591 раз.

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

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

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

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

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

cron