Скачать MetaTrader 5

Автоматическое создание признака принадлежности позиции к некоторой пачке позиций

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Начни зарабатывать с помощью Маркета. Опубликуй продукт!
Victor Demihov
618
Victor Demihov 2015.11.01 14:13 

 Нужно реализовать задачу, чтоб сова смогла сама задавать признак определённой пачке ордеров на канкретном графике о принаблежность данной позиции к некоторой пачке позиций. Объясню по подробнее.

Например, совок торгует по какому-то алгоритму. Открывает одну или несколько поз(возможен вариант дробления позы не N-частей) по каждом сигналу и, если поза не сразу вышла в профит, локируем суммарную позу одной или несколькими позами локирующими.

Так вот. Таким пачек может быть несколько. Т.е. поза_1 - локирующая поза_1, поза_2 - локирующая поза_2... поза_N- локирующая поза_N. Задача стоит в том, чтоб как-то задавать признак того, что эта поза относится к первой пачке ордеров или к N-ой пачке ордеров. Я знаю точно, что раньше в момент начисления свопа комментарии у позы затирались или совсем или частично. Получается комментарии вообще бесполезная сущность.

Судя по всему есть вариант только работать с мэджиком. Опять-таки, мэджик у позиции именно мкл-4 имеет тип int, что на самом деле маловато, чтоб максимально упростить задачу. Тогда как вообще поступить в этой ситуации?

Я думал переводить дату и время открытия позиции + название графика + ТФ и приставку названия совка в цифровой вид по своей задумке.

Выходило бы типа такого варианта:

Если сегодня Дата: 01.11.2015. Время: 16.58

Мэджик может быть таким: 011120151658

Сюда можно добавить ещё рабочий таймфрейм + торговый инструмент и некоторый идентификатор совка.

Но так не хватить цифр для реализации.

Какие ещё варианты есть? 

. ... Rick D. ... .
1176
. ... Rick D. ... . 2015.11.01 14:49  
Создать список, каждый элемент которого состоит из пары тикетов (дочерний, родительский). Хранить на чарте в виде графических объектов, в файле или в базе данных.
Boris
3901
Boris 2015.11.01 14:56  
Если у Вас выработаны критерии по разделению позиций на группы до открытия позиций, используйте самое надёжное, меджики, один общий на группу. Время открытия ордера в меджике можете Вы прочитать, эксперт нет. Комментарии не годятся! 
Victor Nikolaev
Модератор
14503
Victor Nikolaev 2015.11.01 15:18  
И у меджиков (в Вашем случае) один большой плюс - если по данному меджику все сделки закрыты, то его можно использовать повторно. Кодировать его не стоит. Просто использовать как счетчик позиций.
Victor Demihov
618
Victor Demihov 2015.11.01 16:25  
RickD:
Создать список, каждый элемент которого состоит из пары тикетов (дочерний, родительский). Хранить на чарте в виде графических объектов, в файле или в базе данных.

И причём тут дочерний и родительский тикеты? Базу данных так точно применять в мкл4 не буду. По крайне мере, если не использовать те же нейросети, то это излишнее. А оные я не использую, т.к. подходы к торговле совсем другие.

borilunad:
Если у Вас выработаны критерии по разделению позиций на группы до открытия позиций, используйте самое надёжное, меджики, один общий на группу. Время открытия ордера в меджике можете Вы прочитать, эксперт нет. Комментарии не годятся! 

Борис, Я выше написал как можно закинуть время открытия ордера в мэджик. Всё можно! Хотя это по-моему не самый лучший вариант реализации данной задачи. Как-раз поэтому я и решил поднять на форуме этот вопрос. Что-то то ли опыта не хватает, то ли я притормозил... 

Victor Demihov
618
Victor Demihov 2015.11.01 16:35  
Vinin:
И у меджиков (в Вашем случае) один большой плюс - если по данному меджику все сделки закрыты, то его можно использовать повторно. Кодировать его не стоит. Просто использовать как счетчик позиций.

А какой может быть минус у мейджиков?

Комменты я так понимаю вообще не актуальны и их  не резон использовать вообще?

Допустим я решил использовать мэджики как счётчик. Зададим цикл от 0 до 25, например. Больше пачек теоритически не бывает. Тогда как организовать подобную " раздачу " мэджиков?

В каком месте программы задаётся данный цикл перебора мэджиков? Я что-то мутно представляю это на практике..

 Например, вот есть метод, который доливает дроблёный лот:

//+---------------------------------------------------------------------------------------------------------------------------------------+
//|                                               Функция посылает ордер доливающий  позицию                                              |
//+---------------------------------------------------------------------------------------------------------------------------------------+
void SendRefillOrder (Symbol_Properties& Sym, ENUM_OCCURENCE_SIGNAL fi_Signal)
{
   double OOP = -1;
   int    ticket = -1,
          type = -1;
   
   if (fi_Signal == SIGNAL_REFILL_BUY)
   {
      Print (__FUNCTION__, ":: Решение долить SIGNAL_BUY");
      // Определяем наличие открытых позиций рядом с последний позицией, которую собираемся доливать
      if (g_iOTotal > 1) if (CPosInf.IsPosNearByThisOne (GSym, GPos, ANY_WARDS, g_ilastPosIndex, i_iStepAmongPositions, -1) == true) return;
      
      // Если убыток позиции превысил допустимое значение, ищем место, где будет доливать эту позицию...
      if ( (GPos[g_ilastPosIndex].dOpenPrice - Ask) < i_iStepAmongPositions * Sym.dPt )
      {
         type = OP_BUYLIMIT;
         OOP = GPos[g_ilastPosIndex].dOpenPrice - i_iStepAmongPositions * Sym.dPt - Sym.dSpread;
      }
      else
      {
         type = OP_BUY;
         OOP = Ask;
      }
      
      double lot = CMM.GetLotIncreasedByCoefficient (GSym, i_dLots, i_dLotCoefficient, GPos[g_ilastPosIndex].dLots);
      
      if (lot > 0)
        ticket = COrdMan.fOrderSend (Sym, type, lot, ND (OOP), i_iSlippage, 0, 0, i_iMagic);
      
      if (ticket != -1)
      {
         g_dtLastBarTime = Time[0];
      }
   }
//   if (fi_Signal == SIGNAL_REFILL_SELL)
   //   Print (__FUNCTION__, ":: Решение долить SIGNAL_SELL");
}

 Как мне сюда добавить мэджик, если он будет как Вы пишете через цикл по счётчику получаться?

Aleksey
248
Aleksey 2015.11.01 17:06  
На этапе проектирования нужно продумывать логику учёта, а не в готовый уже советник добавлять. PS: Не метод должен решать долить или не долить, метод должен только доливать раз уже вызван.
Victor Demihov
618
Victor Demihov 2015.11.01 17:19  

Это понятно, что не методу решать. Но суть в том, что я не представляю, что является отправным моментов для задания мэджика на пачку.

Например, имеем ситуацию:

В понедельник или другой день, не важно...

1-ая поза открылась в 13.00, 1-ая поза открылась в 13.30, 1-ая поза открылась в 14.25, 1-ая поза открылась в 15.500 ... N-ая поза открылась в N-часов N-минут.

Дальше появился, скажем так локирующая поза или несколько локирующих поз. Как вариант, это могут быть отложки.

На следующий день: 

происходить подобная картина, как в понедельник. 

Как мне в процессе сделать так, что бы у каждой пачки были свои магики? Мне ж нужно это как-то спроектировать. Я не совсем представляю, во-первых, откуда брать сами мэджики, чтоб они были универсальными, а во-вторых, как задавать условие, что уже приходит время для нового мэджика.

Aleksey
248
Aleksey 2015.11.01 17:28  

shanty:

а во-вторых, как задавать условие, что уже приходит время для нового мэджика.

Для магиков рандомно можно получать значения, с проверкой на повторение. И насчёт вопроса, как только вы ответите себе на вопрос что понимать под пачкой ордеров так и вопрос про новый меджик для неё отпадёт сам собой. Вы логику видимо до конца ещё не продумали.
Aleksey
248
Aleksey 2015.11.01 17:32  

Можно создать два массива, в одном будут ордера в другом Локирующие ордера, и индекс в массиве локирующих ордеров пусть совпадает с индексом того ордера который он локирует, или если локирует несколько ордеров то пусть пишется в несколько индексов, как вариант.

вот простой вариант.

пачка 1
arrOrders[0][0]=ticket 156  arrLock[0][0]=
arrOrders[0][1]=ticket 415  arrLock[0][1]=ticket 118   // локируем 1 ордер
arrOrders[0][2]=ticket 161  arrLock[0][2]=

пачка 2
arrOrders[1][0]=ticket 445  arrLock[1][0]=ticket 344    // локируем 2 ордера
arrOrders[1][1]=ticket 844  arrLock[1][1]=ticket 644
arrOrders[1][2]=ticket 344  arrLock[1][2]=

Но лучше использовать массив структур в таком случае.

Или уйти в ООП написать класс "Пачка ордеров ))" и каждый раз при создании новой пачки создаётся "новая пачка" со своим набором ордеров, в этом же классе можно много всяких проверок написать для учёта контроля и.т.д.

Vasyl Nosal
18546
Vasyl Nosal 2015.11.01 17:45  
PozitiF:

Можно создать два массива

А ещё лучше один двух мерный.
12345
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий