открытие позиции без привязки к направлению сигнала.

 

Здравия всем!

Создаю класс для мастера стратегий MQL5. Сигналы формируются на показаниях волатильности, если волатильность больше какого то значения, то советник должен купить или продать  в зависимости от показаний другого модуля сигналов. Сама по себе волатильность направления не имеет, а значит virtual int  LongCondition() и virtual int  ShortCondition() не могут быть использованы для этой задачи, т.к. при добавлении сразу двух этих классов будет генерироваться сигнал только на покупку или на продажу, в зависимости от последовательности их расположения. Класс Direction() ожидаемого результата не дал.

  Подскажите, как сделать, чтобы при открытии позиции учитывалось направление сигнала со смежного модуля сигналов(например пересечение машек) используемого в сове, а сигнал с проектируемого мной модуля(волатильность выше значения) был лишь акцептом для модуля машек.

 
Sergey Mihalev:

Здравия всем!

Создаю класс для мастера стратегий MQL5. Сигналы формируются на показаниях волатильности, если волатильность больше какого то значения, то советник должен купить или продать  в зависимости от показаний другого модуля сигналов. Сама по себе волатильность направления не имеет, а значит virtual int  LongCondition() и virtual int  ShortCondition() не могут быть использованы для этой задачи, т.к. при добавлении сразу двух этих классов будет генерироваться сигнал только на покупку или на продажу, в зависимости от последовательности их расположения. Класс Direction() ожидаемого результата не дал.

  Подскажите, как сделать, чтобы при открытии позиции учитывалось направление сигнала со смежного модуля сигналов(например пересечение машек) используемого в сове, а сигнал с проектируемого мной модуля(волатильность выше значения) был лишь акцептом для модуля машек.

Судя по картинки (статья Мастер MQL5: новая версия)

 


 для первого и второго модуля сигналов ставьте вес "1" и силу сигнала "100". В таком случае, когда оба модуля подадут сигналы и они совпадут по направлению, Вы получите в итоге (1.0 х 100 +1.0 х 100) / 2 = 100. Останется в настройках советника параметры минимального порога открытия позиции (Signal_ThresholdOpen) выставить на 100. 

 
Karputov Vladimir:

Судя по картинки (статья Мастер MQL5: новая версия)

 


 для первого и второго модуля сигналов ставьте вес "1" и силу сигнала "100". В таком случае, когда оба модуля подадут сигналы и они совпадут по направлению, Вы получите в итоге (1.0 х 100 +1.0 х 100) / 2 = 100. Останется в настройках советника параметры минимального порога открытия позиции (Signal_ThresholdOpen) выставить на 100. 

Статья интересная. Спасибо. Лежит кстати у меня в закладках. Под утро уже видимо на свой мозг надежду потерял и начал по форумам трубить. Я ее посмотрю и  у меня даже уже идеи появились как инфу можно реализовать. Получиться ли найти решение, сказать не могу. 

По описанному Вами методу. Есть одно "НО" индикатор волатильности не прогнозирует направления и возвращает величину по модулю, т.е. величина волатильности в пунктах более 100 может дать как сигнал на покупку, так и на продажу.

Сигналы формируются в виртуальных функциях virtual int  LongCondition() и virtual int  ShortCondition(). Что в теории может быть для нас полезно, но пять же, как я писал выше, если мы будем получать сигналы через эти функции, всегда будет возращатся только один сигнал на покупку/продажу. Зависит это только от порядка расположения функций. 

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

 
Sergey Mihalev:

...

По описанному Вами методу. Есть одно "НО" индикатор волатильности не прогнозирует направления и возвращает величину по модулю, т.е. величина волатильности в пунктах более 100 может дать как сигнал на покупку, так и на продажу.

...

Рекомендую проверить на любом стандартном модуле сигналов функции ::ShortCondition() и ::LongCondition() - если увидите там ОТРИЦАТЕЛЬНО число - свистните. А насчёт силы Вашего сигнала более 100 - делайте нормализацию значений и не выходите за значение 100.
 
Karputov Vladimir:
Рекомендую проверить на любом стандартном модуле сигналов функции ::ShortCondition() и ::LongCondition() - если увидите там ОТРИЦАТЕЛЬНО число - свистните. А насчёт силы Вашего сигнала более 100 - делайте нормализацию значений и не выходите за значение 100.

Я и не говорил, что сила сигнала более 100. Показатель волатильности более 100 пунктов.

Если вы имеете ввиду проверить в купе с другими сигналами, то уже проходил. Волатильность+ Envelope. Все как я описывал 

про отрицательное число. Его может и не быть. Но как в таком случае вы предлагаете формировать сигнал на покупку/продажу при достижении волатильности установленного в сигнале значения.

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

 
Sergey Mihalev:

Я и не говорил, что сила сигнала более 100. Показатель волатильности более 100 пунктов.

Если вы имеете ввиду проверить в купе с другими сигналами, то уже проходил. Волатильность+ Envelope. Все как я описывал 

про отрицательное число. Его может и не быть. Но как в таком случае вы предлагаете формировать сигнал на покупку/продажу при достижении волатильности установленного в сигнале значения.

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

Пройдите в отладке по модулю сигналов и по его функциям ::ShortCondition() и ::LongCondition() - эти функции выдают положительные числа. 

 

Добавлено.

Можно даже лучше сделать: просто в этих функциях сделайте принты - только не нужно советник запускать на каждом тике, а то памяти не хватит :) 

 
Karputov Vladimir:

Пройдите в отладке по модулю сигналов и по его функциям ::ShortCondition() и ::LongCondition() - эти функции выдают положительные числа. 

 

Добавлено.

Можно даже лучше сделать: просто в этих функциях сделайте принты - только не нужно советник запускать на каждом тике, а то памяти не хватит :) 

Я согласен с тем, что эти функции возвращают положительные значения. Проблема в том, что на входе я могу им дать только одно значение (волатильность по модулю), без возможности варьировать сигналы. Исходя из наших данных мы можем только дать один сигнал, превышение какого то заданного значения волатильности. У нас не будет сигнала пересечения кривых двух полученных волатильностей, у нас не будет сигнала если волатильность выше или ниже нуля. Это выбивается из возможностей нашего индикатора. Вспомните тот же ATR он же не дает сигналов покупать или продавать. 
 
Sergey Mihalev:
Я согласен с тем, что эти функции возвращают положительные значения. Проблема в том, что на входе я могу им дать только одно значение (волатильность по модулю), без возможности варьировать сигналы. Исходя из наших данных мы можем только дать один сигнал, превышение какого то заданного значения волатильности. У нас не будет сигнала пересечения кривых двух полученных волатильностей, у нас не будет сигнала если волатильность выше или ниже нуля. Это выбивается из возможностей нашего индикатора. Вспомните тот же ATR он же не дает сигналов покупать или продавать. 
Значит нужно принять порог отсечения: входящее значение (волатильность) больше nnn - значит модуль сигналов генерирует сигнал. В общем нормализовать нужно входящие параметры к единице (или к 100).
 
Karputov Vladimir:
Значит нужно принять порог отсечения: входящее значение (волатильность) больше nnn - значит модуль сигналов генерирует сигнал. В общем нормализовать нужно входящие параметры к единице (или к 100).
Но какая функция для этого походит из стандартного набора, ибо как я ранее говорил лонг и шорт кондишн блокируют одна другую и всегда реализуется один сигнал.
 
Sergey Mihalev:
Но какая функция для этого походит из стандартного набора, ибо как я ранее говорил лонг и шорт кондишн блокируют одна другую и всегда реализуется один сигнал.
Как это они могут друг друга блокировать-то? В каждый момент времени может быть только один сигнал выдаваться (если Вы правильно спроектировали модуль сигналов).
 
Karputov Vladimir:
Как это они могут друг друга блокировать-то? В каждый момент времени может быть только один сигнал выдаваться (если Вы правильно спроектировали модуль сигналов).

Разобрался. В модуле сигнала нужно было описать функцию 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); 
  
  }

 Благодарю за содействие. 

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