Модернизация класса CExpert (Expert.mqh)

 

На данный момент советник на базе класса CExpert позволяет держать ОДНУ позицию. То есть, если открыта позиция и поступает сигнал в том-же направлении, что и позиция, то такой сигнал игнорируется. Напомню (Мастер MQL5: Новая версия), что советник работает с такими модулями как


 Так и просится ещё один модуль - модуль открытия позиция. Такой модуль должен управлять возможностями открывать дополнительные позиции в туже сторону, что и первая/последующая позиция. А вот здесь возникает масса нюансов - становится очень много вариантов поведения: 

ХеджНовый сигнал вЧто делать
Открыта позиция BuyBuyОткрыть Buy
Открыто две позиции BuySell
  • закрыть ВСЕ позиции Buy и открыть позицию Sell
  • оставить ВСЕ позиции Buy и открыть позицию Sell


А вот тут начинаются вопросы и не выяснив, для начала что делать: ЗАКРЫВАТЬ ВСЁ или оставлять всё - дальше двигаться не выйдет.

 

Я как раз сейчас проектирую свой шаблон советника.

Написал переносимый класс позиции, я вижу позицию, как набор компонент. Каждая компонента - имеет свой объем, свое направление, свой символ, свой магик, свои ТП_СЛ. Фактически, это ордер в МТ4, и позиция в МТ5.

И вот теперь - я остановился на основном цикле (аналог - CExpert::Processing()).

Если у нас позиция из разнонаправленных компонент - какой здесь должен быть генератор входов (модуль торговых сигналов) ? А изменение объема позиции ? Доливки новых компонент, или частичные закрытия старых ?  Да и с трейлингом все непросто - позиция, состоящая из компонент, по идее, должна позволять трейлингу менять ТП-СЛ компонент по отдельности.

Как я чувствую, создание шаблона эксперта для МТ5-Хеджа - весьма нетривиальная задача. Хотелось бы послушать народ, что кто думает по этому поводу ?

 
Пожалуйста все рассуждения - только на базе класса CExpert - ибо каким мы его представим, такой он и впоследствии будет в стандартной библиотеке.
 

Если возражений нет, значит будет так:

ХеджНовый сигнал вЧто делать
Открыта позиция BuyBuyОткрыть Buy
Открыто две позиции BuySell
  • закрыть ВСЕ позиции Buy и открыть позицию Sell
  • оставить ВСЕ позиции Buy и открыть позицию Sell


Думаю это логично, если получен противоположный сигнал, значит нужно удалить противоположные позиции.

 
Vladimir Karputov:

Если возражений нет, значит будет так:

ХеджНовый сигнал вЧто делать
Открыта позиция BuyBuyОткрыть Buy
Открыто две позиции BuySell
  • закрыть ВСЕ позиции Buy и открыть позицию Sell
  • оставить ВСЕ позиции Buy и открыть позицию Sell


Думаю это логично, если получен противоположный сигнал, значит нужно удалить противоположные позиции.

Нет, не логично.

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

Т.е., действие должно быть на выбор пользователя.

А если открыто 3 позиции Buy?

 
Vladimir Karputov:

Если возражений нет, значит будет так:

ХеджНовый сигнал вЧто делать
Открыта позиция BuyBuyОткрыть Buy
Открыто две позиции BuySell
  • закрыть ВСЕ позиции Buy и открыть позицию Sell
  • оставить ВСЕ позиции Buy и открыть позицию Sell


Думаю это логично, если получен противоположный сигнал, значит нужно удалить противоположные позиции. -- нет, не логично

Вы так публично нарочито-принципиально "закрыли свои глаза на МТ4" и "открыли их на МТ5", что не обратили внимание на простой и очевидный вопрос: "а почему, собственно, так долго цепляются за этот МТ4".

Даже МК "сдались" и ввели хеджинг, чем практически окончательно отправили в историю МТ4. 

Так что ответ на ваш вывод такой: "не логично". 

 
Vladimir Karputov:
Пожалуйста все рассуждения - только на базе класса CExpert - ибо каким мы его представим, такой он и впоследствии будет в стандартной библиотеке.

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

По сути, класс позиции в хеджевом варианте - это аналог класса ордера в МТ4. Соответственно, получается, что класс CExpert в Стандартной Библиотеке - предназначен для работы с "одним ордером".

 
Artyom Trishkin:

Нет, не логично.

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

Т.е., действие должно быть на выбор пользователя.

А если открыто 3 позиции Buy?

То есть нужен метод, который должен переводить CExpert или в режим "закрыть ВСЕ противоположные позиции" или в режим "Не закрыть противоположные позиции"?
 
Vladimir Karputov:
То есть нужен метод, который должен переводить CExpert или в режим "закрыть ВСЕ противоположные позиции" или в режим "Не закрыть противоположные позиции"?
Боюсь, без пересмотра класса CPosition - договориться не получится.
 
Artyom Trishkin:

Нет, не логично.

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

Т.е., действие должно быть на выбор пользователя.

А если открыто 3 позиции Buy?

Нет, Артём -- почитал ещё раз пост Карпутова:

Vladimir Karputov:

На данный момент советник на базе класса CExpert позволяет держать ОДНУ позицию. То есть, если открыта позиция и поступает сигнал в том-же направлении, что и позиция, то такой сигнал игнорируется. 

...

А вот тут начинаются вопросы и не выяснив, для начала что делать: ЗАКРЫВАТЬ ВСЁ или оставлять всё - дальше двигаться не выйдет.

Он вообще не рассматривает в своей логике хеджинг -- поэтому он и вычеркнул вариант "оставить ВСЕ позиции Buy и открыть позицию Sell"

Он просто решает вопрос с доливкой: "по сигналу в ту же сторону -- доливать или нет" 

 
Andrey F. Zelinsky:

Нет, Артём -- почитал ещё раз пост Карпутова:

Он вообще не рассматривает в своей логике хеджинг -- поэтому он и вычеркнул вариант "оставить ВСЕ позиции Buy и открыть позицию Sell"

Он просто решает вопрос с доливкой: "по сигналу в ту же сторону -- доливать или нет" 

Нет. Неправильно поняли. В первом посте ещё раз внимательно посмотрите таблицу. Там два варианта развития событий при получении сигнала противоположного существующей позиции: что делать - закрывать ВСЕ ПРОТИВОПОЛОЖНЫЕ позиции или ОСТАВЛЯТЬ ИХ. То есть если сигнал совпадает с направлением существующей/существующих позиций - то доливка точно будет (при выставлении перед началом работы соответствующей настройки торгового класса).