Переход позиций через 0:00 при работе банком. Как идентифицировать? Нужна помощь зала. - страница 7

 
Oldman_Evgeny:

Ну, вощем, ни кто, ни куда не тыкнул.

Пришлось изобретать самому.

Итак.

В 23:50, если эксперт работает по open или close, перехожу на обработку каждого тика.

Если эксперт работает по тикам, то никуда переходить не нужно.))))

При первом проходящем тике после 23:50 принудительно закрываю позицию.

(Пытался сделать закрытие не в 23:50, а по позже, но нарвался на случай, когда поставил закрытие на 23:56, а от 23:56 до 00:00 не пришло ни одного тика.

Включился rollover и дальше всё пошло прахом!... На всякий раз взял с запасом 23:50 - уж за 10 минут хоть один тик, да и придет!)

При этом запоминаю все параметры позиции - была позиция buy или sell, стоплосс, тейкпрофит и проч....

До 00:00 делаю запрет на открытие позиций.

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

Таким образом обхожу rollover. 

Как правило теряю поболе чем на rollover, но зато имею нормальное продолжение позиции.

Другого придумать не смог....

Единственная заморочка в пятницу, поскольку в понедельник рынок открывается в 01:00.

Но решил не открывать позицию ночью в понедельник, т.к. часто происходят разные "катаклизмы" - гепы, развороты и прочая хрень.

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


PS. Считаю отсутствие передачи данных позиции при rollover жульничеством. Буду разбираться через АФД. Еслив чё, можно и Центробанк жалобу накатать.

     А они там форексников не сильно жалуют.

А что, при ролловерах идентификатор (не тиккет) позиции не сохраняется?
 
Сохраняется только направление и размер лота. Больше  ничего.
 
Oldman_Evgeny:
Сохраняется только направление и размер лота. Больше  ничего.
PositionGetInteger(POSITION_IDENTIFIER)

что возвращает?

 

PositionGetInteger(POSITION_IDENTIFIER), как и положено, возвращает номер тикета.

Новый номер тикета, который возник в результате rollover, а не той позиции, которая была до rollover....

А вот после rollover, в новой позиции, оказывается m_position.Magic()=0. Соответственно в эксперте ничего не работает....

Наверное, как-то можно запихнуть Magic через модификацию в новую позицию и туда же запихнуть всё остальное от старой позиции.

Но я сделал, как написал выше. Но еще подумаю на эту тему.

Бесит, что ПСБ со своей платформой так жульничает.

И, насколько я понял, не они одни...

Удивляет молчание трейдеров! Все, что ли, торгуют только интрадей или пипсуют? 

Ну, не идти же торговать в какую-нибудь кухню, типа "альпарей", когда есть лицензированные российские брокеры....
 

Попробовал вставить в OnTick конструкцию

 if(m_position.Magic() == 0)    m_trade.SetExpertMagicNumber( EA_Magic   );

Конструкция не работает.

Похоже на открытой позиции Magic не изменить никак....

Так что, то что я сделал и описал выше, похоже единственный вариант.

 
Oldman_Evgeny:

Попробовал вставить в OnTick конструкцию

 if(m_position.Magic() == 0)    m_trade.SetExpertMagicNumber( EA_Magic   );

Конструкция не работает.

Похоже на открытой позиции Magic не изменить никак....

Так что, то что я сделал и описал выше, похоже единственный вариант.

Что вы все с магиком носитесь? Оберните каждую позицию в класс и на тике не ищите ее, а просто отслеживайте. Если она вдруг закрылась, то анализируем причину закрытия. Если причина ролловер, то ищем новую и меняем поля класса на актуалные. Для организации повторного старта после сбоев пишем всю необходимую информацию в отдельный файл (ну не люблю я глобальные переменные терминала).
 
Vladimir Simakov:
Для организации повторного старта после сбоев пишем всю необходимую информацию в отдельный файл (ну не люблю я глобальные переменные терминала).

А если эксперт работает на разных машинах, то файл с собой таскать? 

 
Ihor Herasko:

А если эксперт работает на разных машинах, то файл с собой таскать? 

Ftp, cloud - как вариант.
Если просто данными должны роботы обмениваться, то pipe и ws.
 
Vladimir Simakov:
Ftp, cloud - как вариант.
Если просто данными должны роботы обмениваться, то pipe и ws.

Зачем все эти заморочки, если есть Magic? В большинстве случаев его хватает за глаза. По крайней мере, мне удавалось упаковывать в него:

  1. Время возникновения сигнала, по которому открыт ордер/позиция
  2. Индекс сетки (если стратегия - сетка), которой принадлежит ордер
  3. Индекс ордера в сетке
  4. Непосредственно идентификатор эксперта
Все это, конечно, с некоторыми ограничениями. Но ограничения вполне разумные. Выход за их рамки - редкое явление.

 
Ihor Herasko:

Зачем все эти заморочки, если есть Magic? В большинстве случаев его хватает за глаза. По крайней мере, мне удавалось упаковывать в него:

  1. Время возникновения сигнала, по которому открыт ордер/позиция
  2. Индекс сетки (если стратегия - сетка), которой принадлежит ордер
  3. Индекс ордера в сетке
  4. Непосредственно идентификатор эксперта
Все это, конечно, с некоторыми ограничениями. Но ограничения вполне разумные. Выход за их рамки - редкое явление.

Вот Вы сами и ответили - с ограничениями, которые как раз в этой ветке и обсуждаются. Плюсы обертки:

  1. Время возникновения сигнала - так член класса есть.
  2. Индекс сетки - то же самое.
  3. Индекс ордера в сетке - и опять в явном виде.
  4. Идентификатор эксперта- ну Вы поняли..

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

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