Здравия всем!
Создаю класс для мастера стратегий MQL5. Сигналы формируются на показаниях волатильности, если волатильность больше какого то значения, то советник должен купить или продать в зависимости от показаний другого модуля сигналов. Сама по себе волатильность направления не имеет, а значит virtual int LongCondition() и virtual int ShortCondition() не могут быть использованы для этой задачи, т.к. при добавлении сразу двух этих классов будет генерироваться сигнал только на покупку или на продажу, в зависимости от последовательности их расположения. Класс Direction() ожидаемого результата не дал.
Подскажите, как сделать, чтобы при открытии позиции учитывалось направление сигнала со смежного модуля сигналов(например пересечение машек) используемого в сове, а сигнал с проектируемого мной модуля(волатильность выше значения) был лишь акцептом для модуля машек.
Судя по картинки (статья Мастер MQL5: новая версия)
для первого и второго модуля сигналов ставьте вес "1" и силу сигнала "100". В таком случае, когда оба модуля подадут сигналы и они совпадут по направлению, Вы получите в итоге (1.0 х 100 +1.0 х 100) / 2 = 100. Останется в настройках советника параметры минимального порога открытия позиции (Signal_ThresholdOpen) выставить на 100.
Судя по картинки (статья Мастер MQL5: новая версия)
для первого и второго модуля сигналов ставьте вес "1" и силу сигнала "100". В таком случае, когда оба модуля подадут сигналы и они совпадут по направлению, Вы получите в итоге (1.0 х 100 +1.0 х 100) / 2 = 100. Останется в настройках советника параметры минимального порога открытия позиции (Signal_ThresholdOpen) выставить на 100.
Статья интересная. Спасибо. Лежит кстати у меня в закладках. Под утро уже видимо на свой мозг надежду потерял и начал по форумам трубить. Я ее посмотрю и у меня даже уже идеи появились как инфу можно реализовать. Получиться ли найти решение, сказать не могу.
По описанному Вами методу. Есть одно "НО" индикатор волатильности не прогнозирует направления и возвращает величину по модулю, т.е. величина волатильности в пунктах более 100 может дать как сигнал на покупку, так и на продажу.
Сигналы формируются в виртуальных функциях virtual int LongCondition() и virtual int ShortCondition(). Что в теории может быть для нас полезно, но пять же, как я писал выше, если мы будем получать сигналы через эти функции, всегда будет возращатся только один сигнал на покупку/продажу. Зависит это только от порядка расположения функций.
Посетила идея, что схожими методами пользуется сигнал, который запрещает торговлю по времени. Почитаю код отпишусь удалось не удалось.
...
По описанному Вами методу. Есть одно "НО" индикатор волатильности не прогнозирует направления и возвращает величину по модулю, т.е. величина волатильности в пунктах более 100 может дать как сигнал на покупку, так и на продажу.
...
Рекомендую проверить на любом стандартном модуле сигналов функции ::ShortCondition() и ::LongCondition() - если увидите там ОТРИЦАТЕЛЬНО число - свистните. А насчёт силы Вашего сигнала более 100 - делайте нормализацию значений и не выходите за значение 100.
Я и не говорил, что сила сигнала более 100. Показатель волатильности более 100 пунктов.
Если вы имеете ввиду проверить в купе с другими сигналами, то уже проходил. Волатильность+ Envelope. Все как я описывал
про отрицательное число. Его может и не быть. Но как в таком случае вы предлагаете формировать сигнал на покупку/продажу при достижении волатильности установленного в сигнале значения.
Посетила идея, что схожими методами пользуется сигнал, который запрещает торговлю по времени. Почитаю код отпишусь удалось /не удалось.
Я и не говорил, что сила сигнала более 100. Показатель волатильности более 100 пунктов.
Если вы имеете ввиду проверить в купе с другими сигналами, то уже проходил. Волатильность+ Envelope. Все как я описывал
про отрицательное число. Его может и не быть. Но как в таком случае вы предлагаете формировать сигнал на покупку/продажу при достижении волатильности установленного в сигнале значения.
Посетила идея, что схожими методами пользуется сигнал, который запрещает торговлю по времени. Почитаю код отпишусь удалось /не удалось.
Пройдите в отладке по модулю сигналов и по его функциям ::ShortCondition() и ::LongCondition() - эти функции выдают положительные числа.
Добавлено.
Можно даже лучше сделать: просто в этих функциях сделайте принты - только не нужно советник запускать на каждом тике, а то памяти не хватит :)
Пройдите в отладке по модулю сигналов и по его функциям ::ShortCondition() и ::LongCondition() - эти функции выдают положительные числа.
Добавлено.
Можно даже лучше сделать: просто в этих функциях сделайте принты - только не нужно советник запускать на каждом тике, а то памяти не хватит :)
Я согласен с тем, что эти функции возвращают положительные значения. Проблема в том, что на входе я могу им дать только одно значение (волатильность по модулю), без возможности варьировать сигналы. Исходя из наших данных мы можем только дать один сигнал, превышение какого то заданного значения волатильности. У нас не будет сигнала пересечения кривых двух полученных волатильностей, у нас не будет сигнала если волатильность выше или ниже нуля. Это выбивается из возможностей нашего индикатора. Вспомните тот же ATR он же не дает сигналов покупать или продавать.
Значит нужно принять порог отсечения: входящее значение (волатильность) больше nnn - значит модуль сигналов генерирует сигнал. В общем нормализовать нужно входящие параметры к единице (или к 100).
Но какая функция для этого походит из стандартного набора, ибо как я ранее говорил лонг и шорт кондишн блокируют одна другую и всегда реализуется один сигнал.
Как это они могут друг друга блокировать-то? В каждый момент времени может быть только один сигнал выдаваться (если Вы правильно спроектировали модуль сигналов).
Разобрался. В модуле сигнала нужно было описать функцию Direction(), с условием не против покупки/продажи, т.е. если нашим пожеланием было бы, чтобы эксперт покупал/продавал при волатильности более чем "x" проверка условия выглядела бы вот так
(схожее условие прописано в сигнале с ограничением дней/часов/минут торговли "SignallTF.mqh")
double Volatility::Direction(void) { int idx=StartIndex(); double vol_ind=IndexVolatility(idx); if(!(vol_ind>x)) return(EMPTY_VALUE); return (100.0); }
Благодарю за содействие.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравия всем!
Создаю класс для мастера стратегий MQL5. Сигналы формируются на показаниях волатильности, если волатильность больше какого то значения, то советник должен купить или продать в зависимости от показаний другого модуля сигналов. Сама по себе волатильность направления не имеет, а значит virtual int LongCondition() и virtual int ShortCondition() не могут быть использованы для этой задачи, т.к. при добавлении сразу двух этих классов будет генерироваться сигнал только на покупку или на продажу, в зависимости от последовательности их расположения. Класс Direction() ожидаемого результата не дал.
Подскажите, как сделать, чтобы при открытии позиции учитывалось направление сигнала со смежного модуля сигналов(например пересечение машек) используемого в сове, а сигнал с проектируемого мной модуля(волатильность выше значения) был лишь акцептом для модуля машек.