Все о MQL5 Wizard: создавайте роботов без программирования. - страница 10

 

Техники мастера MQL5, которые вы должны знать (часть 71): Использование паттернов MACD и OBV

Осциллятор Moving Average Convergence Divergence, отслеживающий тренд (MACD), работает в паре с осциллятором On Balance Volume (OBV). Они дополняют друг друга, поскольку один отслеживает тренд, а другой измеряет объем. Мы проводим тесты на паре GBP JPY на 2023 год, а 2024 год выступает в качестве тестового окна для форвардного прохода. Наша "тренировка" или оптимизация для 2023 года, помимо поиска идеального веса сигнала паттерна, также направлена на поиск ценовых разрывов для входа и целей по тейк-профиту. Все это делается без использования стоп-лосса, то есть мы полагаемся исключительно на пороговый вес закрытия пользовательского класса сигналов для закрытия любых позиций, которые больше не соответствуют их открытым тезисам.
MQL5 Wizard Techniques you should know (Part 71): Using Patterns of MACD and the OBV
MQL5 Wizard Techniques you should know (Part 71): Using Patterns of MACD and the OBV
  • www.mql5.com
The Moving-Average-Convergence-Divergence (MACD) oscillator and the On-Balance-Volume (OBV) oscillator are another pair of indicators that could be used in conjunction within an MQL5 Expert Advisor. This pairing, as is practice in these article series, is complementary with the MACD affirming trends while OBV checks volume. As usual, we use the MQL5 wizard to build and test any potential these two may possess.
 

Техники мастера MQL5, которые вы должны знать (часть 72): Использование паттернов MACD и OBV с помощью супервизорного обучения

Техники мастера MQL5, которые вы должны знать (часть 72): Использование паттернов MACD и OBV с помощью контролируемого обучения

В нашей прошлой статье, где мы познакомились с индикаторной парой MACD и осциллятора On-Balance-Volume (OBV), мы рассмотрели 10 возможных сигналов, которые могут быть сгенерированы из комплиментарной пары этих индикаторов. Мы всегда проверяем 10 сигнальных паттернов, полученных от пары из двух индикаторов, выполняя тест на прохождение вперед в течение 1 года, предварительно проведя обучение или оптимизацию в течение предыдущего года. В прошлой статье только один сигнальный паттерн, паттерн-7, смог прибыльно пройти вперед. Мы рассмотрели некоторые причины, по которым эта пара индикаторов показала неудовлетворительные результаты по сравнению с другими индикаторами, о которых мы рассказывали, однако это также дало нам "возможность" изучить возможности машинного обучения для улучшения некоторых из этих сигнальных паттернов.
MQL5 Wizard Techniques you should know (Part 72): Using Patterns of MACD and the OBV with Supervised Learning
MQL5 Wizard Techniques you should know (Part 72): Using Patterns of MACD and the OBV with Supervised Learning
  • www.mql5.com
We follow up on our last article, where we introduced the indicator pair of the MACD and the OBV, by looking at how this pairing could be enhanced with Machine Learning. MACD and OBV are a trend and volume complimentary pairing. Our machine learning approach uses a convolution neural network that engages the Exponential kernel in sizing its kernels and channels, when fine-tuning the forecasts of this indicator pairing. As always, this is done in a custom signal class file that works with the MQL5 wizard to assemble an Expert Advisor.
 

Техники мастера MQL5, которые вы должны знать (часть 73): Использование паттернов Ичимоку и ADX-Wilder

Техники мастера MQL5, которые вы должны знать (часть 73): Использование паттернов Ichimoku и ADX-Wilder

Индикатор Ichimoku Kinko Hyo (Ichimoku) и осциллятор ADX-Wilder (ADX) используются в данной статье в паре поддержка/сопротивление и идентификация тренда. Индикатор Ichimoku, безусловно, многогранен и весьма универсален. Он может предоставлять не только уровни поддержки/сопротивления. Однако пока мы придерживаемся только S/R. Пары индикаторов, особенно когда они дополняют друг друга, обладают потенциалом для создания более четких и точных сигналов входа для советников. Как обычно, мы рассматриваем 10 сигнальных паттернов этой пары индикаторов. Мы тестируем эти 10 сигнальных паттернов, каждому из которых присвоен индекс, по одному за раз, руководствуясь при этом следующими правилами;

Индексация от 0 до 9 позволяет нам легко рассчитать значение карты для их эксклюзивного использования советником. Например, если паттерн имеет индекс 1, то мы должны установить параметр "PatternsUsed" равным 2 в степени 1, что дает 2. Если индекс равен 4, то это 2 в степени 4, что дает 16, и так далее. Максимальное значение, которое можно присвоить этому параметру, равно 1023, поскольку у нас всего 10 параметров. Любое число от 0 до 1023, не являющееся чистой экспонентой 2, будет представлять собой комбинацию более чем одного из этих 10 параметров.

MQL5 Wizard Techniques you should know (Part 73): Using Patterns of Ichimoku and the ADX-Wilder
MQL5 Wizard Techniques you should know (Part 73): Using Patterns of Ichimoku and the ADX-Wilder
  • 2025.07.04
  • www.mql5.com
The Ichimoku-Kinko-Hyo Indicator and the ADX-Wilder oscillator are a pairing that could be used in complimentarily within an MQL5 Expert Advisor. The Ichimoku is multi-faceted, however for this article, we are relying on it primarily for its ability to define support and resistance levels. Meanwhile, we also use the ADX to define our trend. As usual, we use the MQL5 wizard to build and test any potential these two may possess.
 

Техники мастера MQL5, которые вы должны знать (часть 74): Использование паттернов Ichimoku и ADX-Wilder с помощью контролируемого обучения

Техники мастера MQL5, которые вы должны знать (часть 74): Использование паттернов Ichimoku и ADX-Wilder с помощью контролируемого обучения

В прошлой статье мы рассмотрели пару индикаторов Ichimoku и ADX-Wilder в качестве дополняющих друг друга S/R и трендовых инструментов. Как обычно, мы протестировали их в собранном мастером советнике и рассмотрели 10 различных сигнальных паттернов. Для этой пары индикаторов большинство из них смогли прибыльно отработать в течение 1 года, проведя тестирование/оптимизацию в предыдущем году. Однако 3 паттерна, которые не справились с этой задачей, оказались неудовлетворительными: паттерн-0, паттерн-1 и паттерн-5. В продолжение этой статьи мы изучаем, может ли контролируемое обучение изменить их производительность. Наш подход заключается в том, чтобы реконструировать сигналы каждого из этих паттернов как простой входной вектор для нейронной сети, по сути, превращая нейронную сеть в дополнительный фильтр для сигнала.
MQL5 Wizard Techniques you should know (Part 74): Using Patterns of Ichimoku and the ADX-Wilder with Supervised Learning
MQL5 Wizard Techniques you should know (Part 74): Using Patterns of Ichimoku and the ADX-Wilder with Supervised Learning
  • 2025.07.10
  • www.mql5.com
We follow up on our last article, where we introduced the indicator pair of the Ichimoku and the ADX, by looking at how this duo could be improved with Supervised Learning. Ichimoku and ADX are a support/resistance plus trend complimentary pairing. Our supervised learning approach uses a neural network that engages the Deep Spectral Mixture Kernel to fine tune the forecasts of this indicator pairing. As per usual, this is done in a custom signal class file that works with the MQL5 wizard to assemble an Expert Advisor.
 

Техники мастера MQL5, которые вы должны знать (часть 75): Использование Awesome Oscillator и Envelopes

Техники мастера MQL5, которые вы должны знать (часть 75): Использование Awesome Oscillator и Envelopes

Сочетание осциллятора Awesome Oscillator с каналом Envelopes - еще одна рассматриваемая нами пара индикаторов, в которой мы объединяем синергию следования за трендом с идентификацией поддержки/сопротивления. Мы снова рассмотрим 10 возможных сигнальных паттернов, которые можно получить из этой пары, и проведем оценочные тесты на паре USD JPY на 30-минутном таймфрейме для 2023 года с перспективными тестами на 2024 год. Прежде чем перейти к сигнальным паттернам, давайте рассмотрим основные определения каждого из этих индикаторов, начиная с потрясающего осциллятора. Он был разработан покойным Биллом Уильямсом как индикатор тренда, который сравнивает краткосрочные и долгосрочные средние значения средней точки цены актива.
MQL5 Wizard Techniques you should know (Part 75): Using Awesome Oscillator and the Envelopes
MQL5 Wizard Techniques you should know (Part 75): Using Awesome Oscillator and the Envelopes
  • 2025.07.17
  • www.mql5.com
The Awesome Oscillator by Bill Williams and the Envelopes Channel are a pairing that could be used complimentarily within an MQL5 Expert Advisor. We use the Awesome Oscillator for its ability to spot trends, while the envelopes channel is incorporated to define our support/resistance levels. In exploring this indicator pairing, we use the MQL5 wizard to build and test any potential these two may possess.
 

Я создал Сигнальный свечной паттерн. Скопировал и вставил и протестировал. Работает довольно хорошо на старших таймфреймах.

//+------------------------------------------------------------------+
//|SignalCandlePatterns.mqh |
//|Copyright 2000-2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\ExpertSignal.mqh>
// начало описания мастера
//+------------------------------------------------------------------+
//| Описание класса|
//| Название=Сигналы свечных паттернов|
//| Type=SignalAdvanced|
//| Имя=Узоры свечей|
//| ShortName=CandlePatterns|
//| Class=CSignalCandlePatterns|
//| Page=signal_candle_patterns|
//| Параметр=EngulfingWeight, int, 100, Вес для паттерна Engulfing |
//| Параметр=HammerWeight, int, 80, Вес молотка |
//| Параметр=DojiWeight,int,60,Вес Доджи |
//| Параметр=StarWeight,int,90,Вес утренней/вечерней звезды |
//| Параметр=CloudPiercingWeight,int,70,Вес пирсинга/темного CC |
//| Параметр=TweezerWeight,int,50,Вес верхних/нижних частей пинцета |
//| Параметр=HaramiWeight, int, 40, Вес харами |
//| Параметр=HammerMinBodyRatio, double, 0.10, Минимальное тело/диапазон для молота|
//| Параметр=HammerLongShadowRatio,double,2.0, Минимальная нижняя тень/тело для Hammer|
//| Параметр=HammerShortShadowMaxRatio,double,0.5, Максимальная верхняя тень/тело для Hammer|.
//| Параметр=StarMinBodyRatio,double,0.10, Минимальное тело/дальность для ShootingStar|
//| Параметр=StarLongShadowRatio,double,2.0,Минимальная верхняя тень/тело для ShootingStar|
//| Параметр=StarShortShadowMaxRatio,double,0.5,Максимальная нижняя тень/тело для ShootingStar|
//+------------------------------------------------------------------+
// описание мастера end
//+------------------------------------------------------------------+
class CSignalCandlePatterns : public CExpertSignal
  {
protected:
   //--- веса
   int    m_engulfing_weight;
   int    m_hammer_weight;
   int    m_doji_weight;
   int    m_star_weight;
   int    m_cloud_piercing_weight;
   int    m_tweezer_weight;
   int    m_harami_weight;
   //--- новые параметры фильтра
   double m_hammer_min_body_ratio;
   double m_hammer_long_shadow_ratio;
   double m_hammer_short_shadow_max_ratio;
   double m_star_min_body_ratio;
   double m_star_long_shadow_ratio;
   double m_star_short_shadow_max_ratio;

public:
                     CSignalCandlePatterns(void);
                    ~CSignalCandlePatterns(void);

   //--- задатчики для весов
   void              EngulfingWeight(int v)         { m_engulfing_weight=v; }
   void              HammerWeight(int v)            { m_hammer_weight=v;    }
   void              DojiWeight(int v)              { m_doji_weight=v;      }
   void              StarWeight(int v)              { m_star_weight=v;      }
   void              CloudPiercingWeight(int v)     { m_cloud_piercing_weight=v; }
   void              TweezerWeight(int v)           { m_tweezer_weight=v;   }
   void              HaramiWeight(int v)            { m_harami_weight=v;    }

   //--- Установки для новых фильтров
   void              HammerMinBodyRatio(double v)        { m_hammer_min_body_ratio=v; }
   void              HammerLongShadowRatio(double v)     { m_hammer_long_shadow_ratio=v; }
   void              HammerShortShadowMaxRatio(double v) { m_hammer_short_shadow_max_ratio=v; }
   void              StarMinBodyRatio(double v)          { m_star_min_body_ratio=v; }
   void              StarLongShadowRatio(double v)       { m_star_long_shadow_ratio=v; }
   void              StarShortShadowMaxRatio(double v)   { m_star_short_shadow_max_ratio=v; }

   //--- ядро
   virtual bool      ValidationSettings(void);
   virtual bool      InitIndicators(CIndicators *indicators);
   virtual int       LongCondition(void);
   virtual int       ShortCondition(void);

protected:
   //--- Детекторы паттернов
   bool              IsBullishEngulfing(int idx);
   bool              IsBearishEngulfing(int idx);
   bool              IsHammer(int idx);
   bool              IsShootingStar(int idx);
   bool              IsDoji(int idx);
   bool              IsMorningStar(int idx);
   bool              IsEveningStar(int idx);
   bool              IsPiercingLine(int idx);
   bool              IsDarkCloudCover(int idx);
   bool              IsTweezerBottom(int idx);
   bool              IsTweezerTop(int idx);
   bool              IsBullishHarami(int idx);
   bool              IsBearishHarami(int idx);
  };

//+------------------------------------------------------------------+
//| Конструктор|
//+------------------------------------------------------------------+
CSignalCandlePatterns::CSignalCandlePatterns(void)
 : m_engulfing_weight(100),
   m_hammer_weight(80),
   m_doji_weight(60),
   m_star_weight(90),
   m_cloud_piercing_weight(70),
   m_tweezer_weight(50),
   m_harami_weight(40),
   m_hammer_min_body_ratio(0.10),
   m_hammer_long_shadow_ratio(2.0),
   m_hammer_short_shadow_max_ratio(0.5),
   m_star_min_body_ratio(0.10),
   m_star_long_shadow_ratio(2.0),
   m_star_short_shadow_max_ratio(0.5)
  {
   m_used_series = USE_SERIES_OPEN|USE_SERIES_HIGH|USE_SERIES_LOW|USE_SERIES_CLOSE;
  }

//+------------------------------------------------------------------+
//| Деструктор|
//+------------------------------------------------------------------+
CSignalCandlePatterns::~CSignalCandlePatterns(void) {}

//+------------------------------------------------------------------+
//| Проверьте настройки|
//+------------------------------------------------------------------+
bool CSignalCandlePatterns::ValidationSettings(void)
  {
   if(!CExpertSignal::ValidationSettings())
      return(false);
   // веса ≥ 0
   int weights[] = {
      m_engulfing_weight,
      m_hammer_weight,
      m_doji_weight,
      m_star_weight,
      m_cloud_piercing_weight,
      m_tweezer_weight,
      m_harami_weight
   };
   for(int i=0; i<ArraySize(weights); i++)
      if(weights[i] < 0)
        {
         printf(__FUNCTION__+": tutti i pesi devono essere >= 0");
         return(false);
        }
   // коэффициенты > 0
   if(m_hammer_min_body_ratio       <= 0 ||
      m_hammer_long_shadow_ratio    <= 0 ||
      m_hammer_short_shadow_max_ratio<= 0 ||
      m_star_min_body_ratio         <= 0 ||
      m_star_long_shadow_ratio      <= 0 ||
      m_star_short_shadow_max_ratio <= 0)
     {
      printf(__FUNCTION__+": tutti i ratio devono essere > 0");
      return(false);
     }
   return(true);
  }

//+------------------------------------------------------------------+
//| InitIndicators (нет внешних)|
//+------------------------------------------------------------------+
bool CSignalCandlePatterns::InitIndicators(CIndicators *indicators)
  {
   return(CExpertSignal::InitIndicators(indicators));
  }

//+------------------------------------------------------------------+
//| Длинная на предыдущей свече|
//+------------------------------------------------------------------+
int CSignalCandlePatterns::LongCondition(void)
  {
   int weight = 0;
   int idx    = StartIndex() + 1; // последний закрытый бар

   weight = MathMax(weight, IsBullishEngulfing(idx)    ? m_engulfing_weight       : 0);
   weight = MathMax(weight, IsHammer(idx)              ? m_hammer_weight          : 0);
   weight = MathMax(weight, IsDoji(idx)                ? m_doji_weight            : 0);
   weight = MathMax(weight, IsMorningStar(idx)         ? m_star_weight            : 0);
   weight = MathMax(weight, IsPiercingLine(idx)        ? m_cloud_piercing_weight  : 0);
   weight = MathMax(weight, IsTweezerBottom(idx)       ? m_tweezer_weight         : 0);
   weight = MathMax(weight, IsBullishHarami(idx)       ? m_harami_weight          : 0);

   if(weight > 0) m_base_price = 0.0;
   return(weight);
  }

//+------------------------------------------------------------------+
//| Шорт на предыдущей свече|
//+------------------------------------------------------------------+
int CSignalCandlePatterns::ShortCondition(void)
  {
   int weight = 0;
   int idx    = StartIndex() + 1;

   weight = MathMax(weight, IsBearishEngulfing(idx)    ? m_engulfing_weight       : 0);
   weight = MathMax(weight, IsShootingStar(idx)        ? m_hammer_weight          : 0);
   weight = MathMax(weight, IsDoji(idx)                ? m_doji_weight            : 0);
   weight = MathMax(weight, IsEveningStar(idx)         ? m_star_weight            : 0);
   weight = MathMax(weight, IsDarkCloudCover(idx)      ? m_cloud_piercing_weight  : 0);
   weight = MathMax(weight, IsTweezerTop(idx)          ? m_tweezer_weight         : 0);
   weight = MathMax(weight, IsBearishHarami(idx)       ? m_harami_weight          : 0);

   if(weight > 0) m_base_price = 0.0;
   return(weight);
  }

//+------------------------------------------------------------------+
//| Макросы цены через iOpen/iClose/iHigh/iLow |
//+------------------------------------------------------------------+
#define  O(i)  iOpen(m_symbol.Name(), m_period, i)
#define  C(i)  iClose(m_symbol.Name(), m_period, i)
#define  H(i)  iHigh(m_symbol.Name(), m_period, i)
#define  L(i)  iLow(m_symbol.Name(), m_period, i)

//+------------------------------------------------------------------+
//| Реализации шаблонов|
//+------------------------------------------------------------------+
bool CSignalCandlePatterns::IsBullishEngulfing(int idx)
  {
   return(
      C(idx+1) < O(idx+1) &&
      C(idx)   > O(idx)   &&
      O(idx)   < C(idx+1) &&
      C(idx)   > O(idx+1)
   );
  }

bool CSignalCandlePatterns::IsBearishEngulfing(int idx)
  {
   return(
      C(idx+1) > O(idx+1) &&
      C(idx)   < O(idx)   &&
      O(idx)   > C(idx+1) &&
      C(idx)   < O(idx+1)
   );
  }

bool CSignalCandlePatterns::IsHammer(int idx)
  {
   double o      = O(idx);
   double c      = C(idx);
   double h      = H(idx);
   double l      = L(idx);
   double range  = h - l;
   if(range <= 0) return(false);

   double body      = MathAbs(c - o);
   double minOC     = (o < c ? o : c);
   double maxOC     = (o > c ? o : c);
   double lowerWick = minOC - l;
   double upperWick = h - maxOC;

   if(body < m_hammer_min_body_ratio * range)        return(false);
   if(lowerWick < m_hammer_long_shadow_ratio * body) return(false);
   if(upperWick > m_hammer_short_shadow_max_ratio * body) return(false);

   return(true);
  }

bool CSignalCandlePatterns::IsShootingStar(int idx)
  {
   double o      = O(idx);
   double c      = C(idx);
   double h      = H(idx);
   double l      = L(idx);
   double range  = h - l;
   if(range <= 0) return(false);

   double body      = MathAbs(c - o);
   double minOC     = (o < c ? o : c);
   double maxOC     = (o > c ? o : c);
   double upperWick = h - maxOC;
   double lowerWick = minOC - l;

   if(body < m_star_min_body_ratio * range)          return(false);
   if(upperWick < m_star_long_shadow_ratio * body)   return(false);
   if(lowerWick > m_star_short_shadow_max_ratio * body) return(false);

   return(true);
  }

bool CSignalCandlePatterns::IsDoji(int idx)
  {
   double o = O(idx);
   double c = C(idx);
   double h = H(idx);
   double l = L(idx);
   return(MathAbs(c - o) <= (h - l) * 0.1);
  }

bool CSignalCandlePatterns::IsMorningStar(int idx)
  {
   if(C(idx+2) >= O(idx+2))                                    return(false);
   if(MathAbs(C(idx+1) - O(idx+1)) > (H(idx+1) - L(idx+1)))   return(false);
   if(C(idx) <= O(idx))                                       return(false);
   return(
     C(idx) > O(idx+2) - (O(idx+2) - C(idx+2)) / 2
   );
  }

bool CSignalCandlePatterns::IsEveningStar(int idx)
  {
   if(C(idx+2) <= O(idx+2))                                    return(false);
   if(MathAbs(C(idx+1) - O(idx+1)) > (H(idx+1) - L(idx+1)))   return(false);
   if(C(idx) >= O(idx))                                       return(false);
   return(
     C(idx) < O(idx+2) + (C(idx+2) - O(idx+2)) / 2
   );
  }

bool CSignalCandlePatterns::IsPiercingLine(int idx)
  {
   return(
      C(idx+1) < O(idx+1) &&
      C(idx)   > O(idx)   &&
      O(idx)   < L(idx+1) &&
      C(idx)   > O(idx+1) - (O(idx+1) - C(idx+1)) / 2
   );
  }

bool CSignalCandlePatterns::IsDarkCloudCover(int idx)
  {
   return(
      C(idx+1) > O(idx+1) &&
      C(idx)   < O(idx)   &&
      O(idx)   > H(idx+1) &&
      C(idx)   < O(idx+1) + (C(idx+1) - O(idx+1)) / 2
   );
  }

bool CSignalCandlePatterns::IsTweezerBottom(int idx)
  {
   return(
      C(idx+1) < O(idx+1) &&
      C(idx)   > O(idx)   &&
      MathAbs(L(idx+1) - L(idx)) < _Point * 10
   );
  }

bool CSignalCandlePatterns::IsTweezerTop(int idx)
  {
   return(
      C(idx+1) > O(idx+1) &&
      C(idx)   < O(idx)   &&
      MathAbs(H(idx+1) - H(idx)) < _Point * 10
   );
  }

bool CSignalCandlePatterns::IsBullishHarami(int idx)
  {
   return(
      C(idx+1) < O(idx+1) &&
      C(idx)   > O(idx)   &&
      O(idx)   > C(idx+1) &&
      C(idx)   < O(idx+1)
   );
  }

bool CSignalCandlePatterns::IsBearishHarami(int idx)
  {
   return(
      C(idx+1) > O(idx+1) &&
      C(idx)   < O(idx)   &&
      O(idx)   < C(idx+1) &&
      C(idx)   > O(idx+1)
   );
  }
//+------------------------------------------------------------------+
 

Это фильтр по дням недели с простыми bools для включения/выключения каждого дня недели. Гораздо проще в настройке.


//+------------------------------------------------------------------+
//|SignalDayFilter.mqh |
//+------------------------------------------------------------------+
#include <Expert\ExpertSignal.mqh>

// начало описания мастера
//+------------------------------------------------------------------+
//| Описание класса|
//| Название=Фильтр дня сигнала по дням недели|
//| Type=SignalAdvanced|
//| Name=DayOfWeekFilter|
//| ShortName=DF|
//| Class=CSignalDayFilter|
//| Page=signal_day_filter|
//| Параметр=EnableSunday,bool,true,Enable domenica |
//| Параметр=EnableMonday, bool, true, Включить lunedì |
//| Параметр=EnableTuesday, bool, true, Включить мартенди |
//| Параметр=EnableWednesday,bool,true,Enable mercoledì |
//| Параметр=EnableThursday,bool,true,Enable giovedì |
//| Параметр=EnableFriday,bool,true,Enable venerdì |
//| Параметр=EnableSaturday,bool,true,Enable sabato |
//+------------------------------------------------------------------+
// описание мастера end

class CSignalDayFilter : public CExpertSignal
  {
protected:
   long m_bad_days_of_week;

public:
                     CSignalDayFilter(void) : m_bad_days_of_week(0) {}
                    ~CSignalDayFilter(void) {}

   // setter invocati dal Wizard:
   void EnableSunday   (bool enable) { if(!enable) m_bad_days_of_week |= (1<<0); else m_bad_days_of_week &= ~(1<<0); }
   void EnableMonday   (bool enable) { if(!enable) m_bad_days_of_week |= (1<<1); else m_bad_days_of_week &= ~(1<<1); }
   void EnableTuesday  (bool enable) { if(!enable) m_bad_days_of_week |= (1<<2); else m_bad_days_of_week &= ~(1<<2); }
   void EnableWednesday(bool enable) { if(!enable) m_bad_days_of_week |= (1<<3); else m_bad_days_of_week &= ~(1<<3); }
   void EnableThursday (bool enable) { if(!enable) m_bad_days_of_week |= (1<<4); else m_bad_days_of_week &= ~(1<<4); }
   void EnableFriday   (bool enable) { if(!enable) m_bad_days_of_week |= (1<<5); else m_bad_days_of_week &= ~(1<<5); }
   void EnableSaturday (bool enable) { if(!enable) m_bad_days_of_week |= (1<<6); else m_bad_days_of_week &= ~(1<<6); }

   virtual double Direction(void)
     {
      MqlDateTime now;
      TimeCurrent(now);
      // se il bit è 1 => giorno disabilitato
      if((m_bad_days_of_week & (1<<now.day_of_week)) != 0)
         return(EMPTY_VALUE);
      return(0.0);
     }
  };
//+------------------------------------------------------------------+


 

Техники мастера MQL5, которые вы должны знать (часть 76): Использование паттернов Awesome Oscillator и Envelope Channels с помощью контролируемого обучения

Техники мастера MQL5, которые вы должны знать (часть 76): Использование паттернов осциллятора Awesome Oscillator и каналов Envelope с помощью контролируемого обучения

В прошлой статье мы представили индикаторную пару Awesome-Oscillator и Envelope-Channels, и в результате тестирования этой пары 7-8 из 10 паттернов показали себя на 2-летнем тестовом окне. Обычно мы сопровождаем представление пары индикаторов исследованием того, какое влияние, если таковое имеется, может оказать машинное обучение на работу этих индикаторных сигналов. Эта статья не является исключением, и поэтому мы рассмотрим, как могут повлиять паттерны 4, 8 и 9, если дополнить их сигналы сетью машинного обучения в качестве фильтра. Для нашей сети мы используем CNN, ядра/каналы которой определяются ядром точечного произведения с учетом кросс-времени.
MQL5 Wizard Techniques you should know (Part 76): Using Patterns of Awesome Oscillator and the Envelope Channels with Supervised Learning
MQL5 Wizard Techniques you should know (Part 76): Using Patterns of Awesome Oscillator and the Envelope Channels with Supervised Learning
  • 2025.07.23
  • www.mql5.com
We follow up on our last article, where we introduced the indicator couple of the Awesome-Oscillator and the Envelope Channel, by looking at how this pairing could be enhanced with Supervised Learning. The Awesome-Oscillator and Envelope-Channel are a trend-spotting and support/resistance complimentary mix. Our supervised learning approach is a CNN that engages the Dot Product Kernel with Cross-Time-Attention to size its kernels and channels. As per usual, this is done in a custom signal class file that works with the MQL5 wizard to assemble an Expert Advisor.
 

Техники мастера MQL5, которые вы должны знать (часть 77): Использование осциллятора Gator и осциллятора накопления/распределения

Техники мастера MQL5, которые вы должны знать (часть 77): Использование осциллятора Гатора и осциллятора накопления/распределения

Продолжая изучать пары индикаторов для генерации ключевых торговых сигналов, мы рассмотрим осциллятор Gator и осциллятор накопления/распределения (AD). В отличие от AD, осциллятор Gator нейтрален к направлению движения, однако мы используем оба индикатора, поскольку они дополняют друг друга, отслеживая импульс и объем в качестве подтверждения сигнала. Нейтральность к направлению для gator означает, что для определения тренда мы будем полагаться на другой индикатор или ценовое действие. В данной статье мы используем последнее.
MQL5 Wizard Techniques you should know (Part 77): Using Gator Oscillator and the Accumulation/Distribution Oscillator
MQL5 Wizard Techniques you should know (Part 77): Using Gator Oscillator and the Accumulation/Distribution Oscillator
  • 2025.07.28
  • www.mql5.com
The Gator Oscillator by Bill Williams and the Accumulation/Distribution Oscillator are another indicator pairing that could be used harmoniously within an MQL5 Expert Advisor. We use the Gator Oscillator for its ability to affirm trends, while the A/D is used to provide confirmation of the trends via checks on volume. In exploring this indicator pairing, as always, we use the MQL5 wizard to build and test out their potential.
 

Техники мастера MQL5, которые вы должны знать (часть 78): Использование осциллятора Gator и осциллятора накопления/распределения

Техники мастера MQL5, которые вы должны знать (часть 78): Использование осциллятора Гатора и осциллятора накопления/распределения

В прошлой статье мы представили 5 сигнальных паттернов из пары осцилляторов Gator и Accumulation/Distribution, в этой статье мы рассмотрим последние 5 из этого набора из 10. Мы рассматривали по 10 сигнальных паттернов для каждой пары индикаторов и будем придерживаться этого формата. Из тестирования в прошлой статье, которое проводилось на паре GBP JPY на 30-минутном таймфрейме, следует, что паттерны 0, 3 и 4 с трудом справлялись с прохождением вперед, однако прежде чем мы сможем выбрать, что улучшить с помощью контролируемого обучения, давайте завершим изучение и тестирование паттернов с 5 по 9.
MQL5 Wizard Techniques you should know (Part 78): Using Gator Oscillator and the Accumulation/Distribution Oscillator
MQL5 Wizard Techniques you should know (Part 78): Using Gator Oscillator and the Accumulation/Distribution Oscillator
  • 2025.08.04
  • www.mql5.com
The Gator Oscillator by Bill Williams and the Accumulation/Distribution Oscillator are another indicator pairing that could be used harmoniously within an MQL5 Expert Advisor. We use the Gator Oscillator for its ability to affirm trends, while the A/D is used to provide confirmation of the trends via checks on volume. We are following up our last article where we introduced 5 signal patterns by introducing another 5 to complete our typical set of 10. As always, we use the MQL5 wizard to build and test out their potential.