Открытие, закрытие в советнике сгенерированном Мастером MQL5 - страница 2

 
PeretsCHILI:

С формулировкой задачи я определился:

открытие лонг: быстрая МА пересекает медленную МА снизу вверх, плюс фильтр времени

закрытие лонг: быстрая МА пересекает медленную МА сверху вниз

открытие шорт: быстрая МА пересекает медленную МА сверху вниз, плюс фильтр времени

закрытие шорт: быстрая МА пересекает медленную МА снизу вверх.

В упомянутом ранее примере для этого использовались CheckOpenLong, CheckCloseLong, CheckOpenShort, CheckCloseShort соответственно.

Если сделать два модуля, один с сигналами на открытие, а другой на закрытие, то, как я понимаю, в первом будут использоваться LongCondition и ShortCondition, как и в стандартной библиотеке модулей. Что использовать во втором модуле для закрытия?


А самое главное где? Что значит "... пересекает ..."? В этом и есть вся прелесть :)

 

Блин, я только еще больше запутался)) В статье "Создай торгового робота за 6 шагов!" как раз представлен первый модуль с сигналами на открытие по пересечению двух МА.

https://www.mql5.com/ru/articles/367

Что значит "пересекает"? Быстрая МА пересекает медленную МА снизу вверх - это когда разность значений FastMA-SlowMA на первом баре больше нуля, а на втором - меньше нуля. Сверху вниз - на первом баре меньше нуля, на втором больше нуля. 

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

Создай торгового робота за 6 шагов!
Создай торгового робота за 6 шагов!
  • 2012.06.01
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы не знаете, как устроены торговые классы, и пугаетесь слов "Объектно-ориентированное программирование"? На самом деле вовсе не обязательно всё это знать, чтобы написать свой собственный модуль торговых сигналов - достаточно следовать простым правилам. Всё остальное сделает Мастер MQL5, и вы получите готовый торговый робот!
 
PeretsCHILI:

...

Что значит "пересекает"? Быстрая МА пересекает медленную МА снизу вверх - это когда разность значений FastMA-SlowMA на первом баре больше нуля, а на втором - меньше нуля. Сверху вниз - на первом баре меньше нуля, на втором больше нуля. 

...


Уже хорошо. Когда задачу конкретизируют - это очень правильно.


PeretsCHILI:

...

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

Я неправильно выразился. Модуль торговых сигналов выдаёт сигналы "Пора уже ОТКРЫТЬ BUY" и "Пора уже ОТКРЫТЬ SELL". То есть выдают сигнал на ОТКРЫТИЕ. А вот дальше уже решает CExpert: закрыть и перевернуть существующую позицию или открыть позицию.



Возьмём модуль из статьи Создай торгового робота за 6 шагов! - что Вас в нём не устраивает?

 

Так, я хочу написать модуль с сигналами открытия по пересечению двух МА с фильтром времени, а закрытие происходило в следующих случах: поступление противоположного сигнала; наступление SL; наступление TP. Можно написать модуль (назовем его Сross2MA) по статье, и сгенерировать советник с модулями Cross2MA и SignalITF, но такой вариант не подходит, так как при закрытии будет проверяться и фильтр SignalITF.

Например: Есть 2МА, в SignalITF выставлена торговля только по понедельникам. Итак, в понедельник поступает сигнал на покупку, открывается позиция buy,  по истечении времени, во вторник, когда еще не достигнут ни Sl ни TP, происходит обратное пересечение 2МА, и позиция Buy должна закрыться, но этого не происходит, потому что уже другой день недели.

Как должно быть: условия те же, 2МА, торговля по понедельникам: понедельник, поступает сигнал на покупку, открывается Buy, во вторник поступает сигнал по продажу, но так как уже вторник, открытие позиции Sell не происходит, только закрывается позиция Buy.

В LongCondition получается заключено две команды: открытие Buy и закрытие Sell. Нужно как то их разделить)

 

"Мухи отдельно, котлеты отдельно".


PeretsCHILI:

Так, я хочу написать модуль с сигналами открытия по пересечению двух МА с фильтром времени, а закрытие происходило в следующих случаях: поступление противоположного сигнала; наступление SL; наступление TP. ...

Модуль торговых сигналов МОЖЕТ только ВЫДАВАТЬ ДВА вида СИГНАЛА "ПОРА открывать BUY" и "ПОРА открывать SELL".

Stop loss и take profit мы контролировать не будем - так как если произошло закрытие по stop loss или по take profit это означает только одно: позиция закрыта и пора смотреть, что там выдаёт модуль торговых сигналов (другими словами, когда количество позиций равно нулю, мы начинаем всё по кругу: ждём сигнал).

Далее: неверное толкование работы модулей, так как никакого "противоположного сигнала" не существует - может быть так:

  1. имеем открытую позицию BUY и поступает сигнал "ПОРА открывать SELL" 
  2. или имеем открытую позицию SELL и поступает сигнал "ПОРА открывать BUY
В обоих случаях и так произойдёт закрытие текущей позиции и открытие новой.


 
Andy:
LongCondition может просто открыть покупку и держать ее независимо от любых условий, а закрытие чтобы было по стопу-профиту или вручную?

LongCondition класса CExpertSignal в принципе не может ничего "держать". CExpertSignal только ВЫДАЁТ ДВА СИГНАЛА: "Пора уже ОТКРЫТЬ BUY" и "Пора уже ОТКРЫТЬ SELL".


Хотите, чтобы советник собранный мастером никогда не закрывал? Тогда измените входной параметр советника "// Signal threshold value to close [0...100]" - банально установите планку весов для закрытия на значение "100".

 
Andy:
А что тогда их закрывает?

Объект класса CExpert - он опрашивает все модули сигналов, оценивает их веса и суммирует результирующую оценку: вес сигнала




 

Про толкование модулей я понял. Все эти танцы с бубном происходят по тому, что оптимизировать советник буду следующим образом: 1.характеристики двух МА (период, сдвиг,сглаживание), стопы и тэйки по нулям; 2. оптимизация по стопов и тейков. 3. оптимизация трейлинга.

Загвоздка в следующем: если сгенерировать советник с Cross2MA и c фильтром SignalITF, то он будет работать следующим образом (условия те же, стоп и тэйки по нулям):

Понедельник, FastMA пересекает SlowMA снизу вверх, открывается позиция Buy, позиция держится до следующего понедельника, в следующий понедельник может быть 3 варианта:

1. FastMA пересекает SlowMA сверху вниз - закрывается текущая позиция, открывается позиция Sell.

2. Пересечений не наблюдается - позиция сохраняется.

3. FastMA пересекает SlowMA снизу вверх - позиция сохраняется.

И так до следующего понедельника. А между понедельниками много чего может случиться, 2 MA могут несколько раз пересечься, цена уйдет вниз. 

Можно ли реализовать, к примеру, следующее (условия те же): во вторник FastMA пересекает SlowMA сверху вниз, открытие позиции Sell не происходит, потому что вторник, а не понедельник, но закрывается текущая позиция?

 

Кажется я понял как можно сделать это с применением threshold.

Пусть Cross2MA возвращает 80, а SignalITF возвращает 40.

threshold to open ставим 50, threshold to close ставим 30.

Если оба модуля дают сигнал, среднеарифметический выходит 60, больше порога в 50, открывается позиция.

Если срабатывает только Cross2MA, среднеарифметический 40, больше 30, текущая позиция закрывается, меньше 50, новая позиция не открывается. 

Верно?

Вот только SignalITF возвращает empty_value. 

 
PeretsCHILI:

Кажется я понял как можно сделать это с применением threshold.

Пусть Cross2MA возвращает 80, а SignalITF возвращает 40.

threshold to open ставим 50, threshold to close ставим 30.

Если оба модуля дают сигнал, среднеарифметический выходит 60, больше порога в 50, открывается позиция.

Если срабатывает только Cross2MA, среднеарифметический 40, больше 30, текущая позиция закрывается, меньше 50, новая позиция не открывается. 

Верно?

Вот только SignalITF возвращает empty_value. 


Правильной дорогой идёте :) Всё управление порогами открытия и закрытия - через входные параметеры эксперта сгенерированного Мастером MQL5.

Причина обращения: