English
preview
Возможности Мастера MQL5, которые вам нужно знать (Часть 95): Использование DSU и DBN в пользовательском классе сигнала

Возможности Мастера MQL5, которые вам нужно знать (Часть 95): Использование DSU и DBN в пользовательском классе сигнала

MetaTrader 5Торговые системы |
217 0
Stephen Njuki
Stephen Njuki

Введение

В предыдущей статье о Мастере MQL5, посвященной пользовательским сигналам, мы использовали сочетание алгоритма B-Tree Index и байесовской сети. Система, которая у нас была тогда, предназначалась для арбитража за счет использования неэффективностей между взаимозависимыми активами. Она показала определенный потенциал в классификации мультисимвольных рыночных состояний. Однако эта модель может оказаться непригодной для трейдеров, работающих с одним активом и отслеживающих импульс в условиях высокой волатильности. В частности, для тех, кто торгует на новостях. Индекс, агрегирующий несколько активов, мало полезен при торговле пробоями. Для этого можно использовать фильтр шума, основанный на времени. 

Исходя из этого, в статье мы переходим к алгоритму системы непересекающихся множеств (Disjoint Set Union, DSU), который мы используем в сочетании с глубокой сетью доверия (Deep Belief Network, DBN). В то время как в предыдущей статье о пользовательских сигналах использовалась байесовская модель для отображения статических взаимосвязей, этот подход использует генеративные фильтры DBN для подавления шума. Мы никоим образом не рекламируем универсальное решение; мы предлагаем альтернативный подход к конкретной проблеме, с которой сталкиваются некоторые трейдеры, торгующие на пробоях. Как сгруппировать бары с высокой волатильностью в кластер с помощью DSU, а затем определить, означает ли этот кластер смену режима или лишь кратковременную ловушку.

Сравнение с индексом B-Tree и байесовской сетью

Индекс на основе B-дерева и Байесовская нейронная сеть, которые мы использовали при создании последнего пользовательского сигнала, оказались полезными для триангуляции нескольких сигналов. Индекс на основе B-дерева обладает сильными сторонами в хранении многомерных данных, а также в поиске данных в нескольких сигналах; с другой стороны, Байесовская сеть работала с вероятностной классификацией и использовалась для количественной оценки степени неопределенности сигналов, полученных с помощью алгоритма В-дерева. Это было структурное решение для моделирования статических кросс-секционных неэффективностей. 

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

Таким образом, необходимость классификации временных рядов по волатильности означает переход от реляционных индексов к разбиению на основе теории графов. Алгоритм системы непересекающихся множеств (DSU) предоставляет нам простой способ поиска связанных компонентов в непрерывном потоке данных. Вместо поиска по индексу DSU динамически группирует ценовые бары с высокой волатильностью в единую структуру без ресурсоемких матричных вычислений на графике в реальном времени. Это легкий, основанный на времени инструмент для группировки, который может помочь выделить внезапные всплески импульса.

Профиль трейдера, распределение активов и рыночная среда

В предыдущей статье о пользовательских сигналах было показано, что индекс на основе B-дерева и байесовская нейронная сеть подходят для трейдеров, стремящихся к арбитражу на взаимозависимых рынках. В этой статье классификатор DSU-DBN предназначен для трейдеров, торгующих на пробоях. Он, вероятно, будет испытывать трудности в условиях рваного бокового рынка. Вместо этого он нацелен на всплески в условиях высокой ликвидности, например, в новостных релизах по занятости в несельскохозяйственном секторе (NFP). Учитывая волатильность, некоторые трейдеры готовы мириться с более низким винрейтом как с платой за способность отличать реальные смены режима от кратковременного шума.

Основная проблема: навигация в хаотических кластерах волатильности

Центральная проблема в торговле на пробоях заключается в отделении подлинных сдвигов режима от шума или охоты за стоп-лоссами. Индикаторы часто дают сбой из-за 'размытия признаков' — усреднения локализованного ценового шока по заранее установленному временному периоду. Это приводит к запаздывающим 'статистическим призракам'. Обходным путем для этого было бы прекратить сглаживание данных и рассматривать взрывные скачки цен как дискретные события, зависящие от времени. Геометрически сгруппировав ценовые бары с высокой дисперсией, мы сможем лучше определить границы рыночного шока.

Парадигма двух движков: алгоритмическое объединение множеств + генеративная глубокая фильтрация

Мы сохраняем комбинацию алгоритма и сети, поскольку сеть выступает в качестве опционального фильтра, когда алгоритм слишком пассивен или чрезмерно детерминирован. В этой статье DSU — это наш алгоритмический разделитель, который динамически группирует смежные бары с высокой волатильностью в дискретные множества и точно очерчивает временные границы импульсного шока. Наша сеть, глубокая сеть доверия (DBN), служит генеративным модулем контроля, оценивающим внутреннюю дисперсию кластера DSU. Это позволяет проверить, является ли импульс истинным трендом или хаотической ловушкой. 

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

Математические формулировки и статистические границы

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

Разбиение на основе теории графов

Движок системы непересекающихся множеств (DSU) строит наши временные графы, обрабатывая входящие ценовые бары во временном ряду как совокупность дискретных элементов. Затем они организуются в трех основных операциях. Первая — MakeSet(x), которая инициализирует ценовой бар x как отдельный кластер; Find(x), которая находит 'корневой' представитель множества, содержащего x; и Union(x,y), которая объединяет непересекающиеся множества с соседними ценовыми барами x и y в единую кластерную структуру. Геометрическое объединение считается таковым, если лента котировок показывает статистически правдоподобный шок. Наши граничные условия определены в двух основных областях индикаторов:


  • Во-первых, расширение абсолютной волатильности (ATR): Здесь мы отслеживаем текущую дисперсию V относительно исторического базового уровня, который все еще хранится в памяти. Мы получаем это следующим образом:

f11

 

  • Во-вторых, относительное структурное сжатие (режим полос Боллинджера): Для регистрации пробоев волатильности, особенно в условиях жесткой консолидации ликвидности, мы отслеживаем фактическое увеличение дисперсии относительно средней исторической ширины полос. Это получается следующим образом:

f2

Нейронная валидация на основе энергии

После того, как DSU построит граф и определит границы кластера, глубокая сеть доверия (DBN) оценит достоверность этого кластера. Используемая нами DBN построена на основе многослойной архитектуры ограниченной машины Больцмана (RBM). Эти RBM оценивают "достоверность" пробоя с помощью функции энергии. Коллективная энергия совместной конфигурации определяется формулой:

f3

Где:

где bi и bj — смещения соответствующих слоев

w и ij обозначают структурный синаптический вес, соединяющий соответствующие узлы. Если общая энергия ниже, это часто означает, что режим  импульса может быть устойчивым, в отличие от искусственной среды, где доминирует высокочастотная охота за стопами. Вероятность генерации изолированного кластера, представляющего собой допустимый структурный сдвиг, определяется условной вероятностью активации:

f4

В приведенной ниже реализации MQL5 вместо использования обычной сигмоидной функции активации это распределение вероятностей отображается непосредственно через функцию гиперболического тангенса (MathTanh). Это дает единообразный итоговый выход за счет обеспечения строгого нелинейного распределения, ограниченного диапазоном от -1 до 1. Сделка разрешается к исполнению только в том случае, если этот результат превышает настроенный входной параметр m_dbn_threshold.

Реализация на MQL5: анатомия кодовой базы и выбор индикаторов

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

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

Вместо того чтобы ждать сигнала о пересечении скользящей средней, которое часто происходит с задержкой, мы строим проактивный временной граф на основе "графика в реальном времени". Мы используем алгоритм системы непересекающихся множеств (DSU) для геометрического отображения и сопоставления исходных шоков волатильности в реальном времени по мере регистрации новых ценовых баров. Тем не менее, совершение сделок исключительно на основе необработанной, неожиданной волатильности может быть безрассудным, поскольку высокочастотные гэпы ликвидности и охота за стопами обычно маскируются под истинный импульс. Таким образом, нам необходимо объединить алгоритмический движок построения графов с глубокой сетью доверия (DBN). Движок DSU отвечает за управление временной структурой цены путем группировки кажущихся хаотичными баров в математические множества, в то время как DBN служит структурным "фильтром", безжалостно отсекая ложные сигналы до того, как они попадут к брокеру.

Прежде чем алгоритм DSU сможет эффективно разделить временные ряды на дискретные множества, ему необходимы объективные математические границы. Они помогают определить, что именно можно считать "шоком". Таким образом, выбор индикаторов в данном случае имеет очень важное значение. Учитывая наш поиск аномальной волатильности в ценовом действии, мы не можем использовать стандартные индикаторы, такие как MACD или RSI. Эти осцилляторы отслеживают направление движения цены, что размывает данные в пределах окна ретроспективного анализа и уничтожает важные начальные и конечные точки искомой аномалии волатильности.

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

  1. Средний истинный диапазон ('CiATR'): Этот осциллятор используется для отслеживания абсолютных ненаправленных расширений. Этот осциллятор часто предпочтительнее альтернатив, таких как стандартное отклонение, поскольку он учитывает разрывы между ценовыми барами. При торговле активами с высокой ликвидностью, например, предоставляемыми институциональными брокерскими компаниями, публикация макроэкономических данных обычно приводит к разрывам цены над пулами ликвидности. Как только всплеск волатильности выходит за пределы своей исторической нормы, ATR немедленно регистрирует шок, и это дает нашим расчетам объективную границу для запуска кластера DSU.
  2. Полосы Боллинджера ('CiBands'): Мы также используем настройки полос Боллинджера для применения цены 'PRICE_CLOSE' со стандартным отклонением 2,0. Это позволяет количественно оценить относительную дисперсию по отношению к скользящей средней. Таким образом, в то время как размер физических баров измеряется с помощью ATR, полосы Боллинджера позволяют алгоритму отслеживать структурное сжатие через изменение ширины полос. Если изменение режима импульса является устойчивым, то часто ему предшествует экстремальное сжатие волатильности, также известное как сжатие ликвидности. Поэтому мы определяем скорость изменения ширины полосы (расстояние между верхней и нижней полосами). Измерив это изменение, мы можем выделить кластеры волатильности, которые прорываются со значительным импульсом, вместо того, чтобы поддаваться влиянию каждой свечной модели.

Кроме того, прежде чем мы разберем код MQL5 для этой модели, важно рассмотреть последовательность действий, которая происходит всякий раз, когда в терминале регистрируется новый ценовой бар и вызывается проверка условия для длинной позиции. Этот конвейер можно представить в виде мини-карты следующим образом:

  1. Получение индекса: Мы начинаем с определения начального индекса активного временного ряда. Фиксация на текущем ценовом движении означает, что наш алгоритм сможет оценивать динамику рынка в реальном времени, не полагаясь на глубокие, вызывающие задержку циклы.
  2. Построение графов и маршрутизация DSU: Далее мы оцениваем выбранный режим ввода пользователя, 'DSUMode', и соответствующим образом направляем выполнение в соответствующую ветку алгоритма обработки временных рядов, выбирая между ATR, расширением полос Боллинджера, их комбинированным вероятностным режимом или режимом чистого price action.
  3. Оценка кластера: Мы получаем исходный вектор ('dsu_val'), который представляет как направленное смещение, так и геометрическую плотность текущего кластера волатильности.
  4. Нейронный контроль: Мы передаем этот вектор DSU в предварительно обученную глубокую сеть доверия, чтобы оценить генеративную достоверность пробоя волатильности.
  5. Подтверждение сигнала: Мы одобряем длинную позицию, как только все параметры совпадают. Для запуска команды выполнения в советнике мы присваиваем базовый весовой коэффициент паттерна, равный 100.


Шаг 1: Инициализируем границы графа для всех четырех режимов

int result = 0;
   int idx = StartIndex();
   double dsu_val = 0.0;
//--- 1. Apply selected Disjoint Set Union Algorithm Mode
   switch(m_dsu_mode)
     {
      case 1:
         dsu_val = DSUClusterATR(idx);
         break;
      case 2:
         dsu_val = DSUClusterBB(idx);
         break;
      case 3:
         dsu_val = DSUClusterCombined(idx);
         break;
      case 4:
         dsu_val = DSUClusterPriceAction(idx);
         break;
      default:
         dsu_val = DSUClusterATR(idx);
         break;
     }

Этот начальный блок служит центром управления этапом структурной группировки. Нам необходимо объявить начальный индекс 'idx', необходимый для извлечения рыночных данных из ценовых буферов и индикаторов. Мы ограничиваем ретроспективный анализ DSU недавним микроокном (около 10 баров, регулируемым читателем) и обеспечиваем легковесность и производительность этого начального потока. Когда происходят временные шоки волатильности, они часто очень быстрые; если для пробоя потребуется более десятка последовательных баров для формирования его структуры, мы используем 4-часовой таймфрейм, чтобы этот показатель можно было настроить под тестируемый актив и таймфрейм; в этом случае мы будем считать это медленным дрейфом, а не аномалией импульса, заслуживающей внимания.

Вместо расчета стандартных дельт скользящих средних, наш оператор switch считывает выбранный пользователем режим из 'm_dsu_mode' и направляет выполнение в одну из четырех специализированных итераций. В фоновом режиме эти методы вызывают пользовательские функции класса для операций над графовой структурой — 'Find()' и 'Union()'. Тем самым структура сводится к единому математическому множеству, а в параметр 'dsu_val' возвращается значение DSU. При разработке алгоритмов для пользовательских классов Мастера MQL5 мы обычно выносим до четырех режимов работы. Это число всегда можно отлаживать и корректировать в зависимости от точки зрения и подхода к рынку, однако ниже мы рассмотрим логику, лежащую в основе выбранных нами четырех режимов:

Режим 1: Кластер абсолютной волатильности ATR

Наш начальный режим предназначен для ситуаций, характеризующихся внезапными и непрекращающимися экономическими потрясениями. Он фокусируется только на выходных данных индикатора 'CiATR' в локализованном скользящем окне. В этом режиме мы проверяем, действительно ли абсолютная волатильность расширяется от бара к бару. Как только текущий бар и непосредственно предшествующие бары показывают непрерывную цепочку истинного диапазона, операция 'Union()' объединит их в одно направленное множество. Эта итерация полностью игнорирует исторические скользящие средние, а вместо этого фокусируется на взрывной кинетической энергии текущей ленты котировок. Она отличается высокой степенью реагирования, агрессивностью и способна точно определить продолжительность снятия ликвидности на фоне новостей.

Режим 2: Кластер расширения полос Боллинджера

В режиме 1 мы отслеживаем абсолютный размер, а в режиме 2 — относительное расширение волатильности. Эта версия позволяет определить физическое расстояние между верхней и нижней полосами на протяжении нескольких последовательных баров. Операция 'Union()' выполняется только в том случае, если ширина полосы непрерывно увеличивается. Математическая логика, лежащая в основе этого алгоритма, призвана зафиксировать классический пробой "сжатия волатильности". Рынки могут проводить много времени в условиях низкой ликвидности во время консолидации, поэтому, когда полоса начинает прорываться наружу и расширяться, этот режим динамически группирует отдельные расширяющиеся бары. Здесь мы игнорируем крупные бары, которые возникают в уже волатильных условиях, и вместо этого ищем структурные переходы из режимов с низкой дисперсией.

Режим 3: Объединенный кластер совместной вероятности

Это может быть наиболее консервативный и структурно ограничительный из четырех режимов. Он требует перекрытия и одновременных подтверждений как в абсолютной, так и в относительной областях. Операция 'Union()' объединит два бара в активный кластер, когда алгоритм подтвердит, что средний истинный диапазон активно расширяется, а ширина полосы Боллинджера также увеличивается. Принудительное согласование двойной вероятности в режиме 3 значительно сокращает количество торговых сигналов и, возможно, даже чрезмерно отфильтровывает противоречивые рыночные состояния. Тем не менее, полученные кластеры структурно плотные и указывают на наибольшую вероятность подлинного устойчивого направленного пробоя.

Режим 4: Кластер чистого ценового действия

В последнем режиме итерации не учитываются никакие исторические индикаторы. Логика здесь в том, что прямой алгоритм чтения ленты, измеряющий абсолютный размер тел последовательных свечей, может лучше задавать границы текущего режима волатильности. Когда физическая последовательность размеров тела текущей последовательности выходит за пределы базового ATR, бары объединяются в кластер. Этот режим предназначен для пуристов или трейдеров, предпочитающих немедленное подтверждение исходных данных о цене без математического лага, возникающего, например, при использовании полос скользящих средних.

Шаг 2: Добавьте модуль контроля допуска сделок DBN

Этот второй этап, на котором мы вводим нейронную сеть, выделен в приведенном ниже списке:

//--- 2. Evaluate with Deep Belief Network (If active)
   if(m_use_dbn)
     {
      double dbn_score = DBNForwardPass(dsu_val);
      if(dbn_score < m_dbn_threshold)
         return(0); // DBN rejected the long signal
     }
   else
     {
      //--- Standalone algorithm check
      if(dsu_val <= 0.0)
         return(0);
     }

Этот конкретный блок кода представляет собой наиболее важный механизм защиты в нашем пользовательском классе сигналов. Он устраняет фундаментальный недостаток торговли на пробоях: чистая волатильность может быть очень обманчивой. Институциональные алгоритмы могут регулярно устанавливать высокочастотную охоту за стопами, копирующую ценовую сигнатуру реальных пробоев, и это может заманивать трейдеров, торгующих на основе импульса, которые попадают в ловушку до разворота. Чтобы обойти это, входной параметр 'm_use_dbn' можно установить в значение true, так что непроверенный кластерный вектор из DSU, 'dsu_val', будет передаваться через стековую нейросетевую архитектуру с помощью функции 'DBNForwardPass()'. Хотя высокоуровневая обработка данных, а также офлайн-обучение глубоких сетей доверия выполняются в Python-фреймворках (которые также можно кодировать в IDE Meta Editor), выполнение MQL5 должно быть очень отзывчивым. Таким образом, в идеале эта сеть должна работать со статически предобученными весами и смещениями, которые жестко закодированы в одномерные массивы после инициализации класса.

Функция 'DBNForwardPass()' работает как ограниченная машина Больцмана (RBM). Она принимает геометрическую плотность и направленный вес кластера DSU и распределяет их по скрытому вычислительному слою. Применяя веса и обрабатывая конечный результат с помощью функции активации гиперболического тангенса ('MathTanh'), эта DBN вычисляет внутреннее энергетическое состояние текущего кластера волатильности. Это ставит очень важный вопрос. Соответствует ли внутренняя дисперсия этого набора баров признаку устойчивого тренда или это похоже на быстро откатывающийся шум?

Когда DBN считает последовательность ловушкой, результирующий 'dbn_score' снижается. Если этот показатель не соответствует или не превышает настроенный входной параметр 'm_dbn_threshold', то класс сигнала просто вернет 0. Никаких компромиссов. Фактически, это полностью блокирует сигнал на покупку, поскольку советник не может совершить статистически обречённую сделку, что, теоретически, должно помочь сохранить капитал трейдера.

Шаг 3: Обходная ветка подтверждения

//--- 3. Confirmation
   result = m_pattern_0;
   return(result);

Любой сигнал, в соответствии с передовой практикой, должен обеспечивать оперативный обход для целей тестирования изоляции, а также оптимизации стратегии. Когда трейдер хочет проверить чистую прогностическую мощность алгоритма системы непересекающихся множеств без дополнительной нагрузки со стороны нейросетевой фильтрации, блок 'else' может служить резервной веткой. В таком автономном режиме алгоритму нужно будет только проверить целостность направления вектора кластера, который не был скорректирован. Если такой вектор отрицательный или полностью плоский,

dsu_val <= 0.0

это будет указывать на отсутствие структурного бычьего импульса, и условие для покупки снова будет аннулировано. Наконец, после того как все структурные проверки будут выполнены в рамках конвейера — будь то с помощью строгого контролирующего фильтра DBN или с помощью автономной DSU, система присвоит результату целочисленное значение, предварительно заданное и сохраненное параметром базового класса 'm_pattern_0'. В стандартной библиотеке это подразумевает базовый вес паттерна, равный 100. Это взвешенное целое число затем передается обратно в унаследованную функцию класса 'Direction(void)', разрешающую исполнение сделки.

Полная логика сигналов

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

//+------------------------------------------------------------------+
//| "Voting" that price will grow.                                   |
//+------------------------------------------------------------------+
int CSignalDSUDBN::LongCondition(void)
  {
   int result = 0;
   int idx = StartIndex();
   double dsu_val = 0.0;
//--- 1. Apply selected Disjoint Set Union Algorithm Mode
   switch(m_dsu_mode)
     {
      case 1:
         dsu_val = DSUClusterATR(idx);
         break;
      case 2:
         dsu_val = DSUClusterBB(idx);
         break;
      case 3:
         dsu_val = DSUClusterCombined(idx);
         break;
      case 4:
         dsu_val = DSUClusterPriceAction(idx);
         break;
      default:
         dsu_val = DSUClusterATR(idx);
         break;
     }
//--- 2. Evaluate with Deep Belief Network (If active)
   if(m_use_dbn)
     {
      double dbn_score = DBNForwardPass(dsu_val);
      if(dbn_score < m_dbn_threshold)
         return(0); // DBN rejected the long signal
     }
   else
     {
      //--- Standalone algorithm check
      if(dsu_val <= 0.0)
         return(0);
     }
//--- 3. Confirmation
   result = m_pattern_0;
   return(result);
  }


Эмпирическая проверка: анализ тестера стратегий

Как обычно, чтобы понять, насколько полезным для нашего пользовательского класса сигналов может быть контролирующий фильтр, который мы рассмотрели выше, мы тестируем собранный мастером советник в двух режимах. Сначала только с алгоритмом, а затем с алгоритмом и сетью одновременно. Тестирование проведено на валютной паре USD CAD с 01.01.2025 по 01.05.2026 на 4-часовом таймфрейме. Оптимизация проводилась в 2025 году, а форвард-период — с 01.01.2026 по 01.05.2026.

Только алгоритм

В первом тестовом запуске мы обходим нейронную сеть, установив для параметра 'UseDBN' значение false. В результате оптимизации предпочтительным режимом работы алгоритма стал режим 2, то есть режим полос Боллинджера. Эта настройка позволяет торговать только при относительном расширении ширины полос Боллинджера. В отчете о форвард-тесте указано много сделок, всего 68, с чистой прибылью около 5% от начального баланса при просадке, которая составила почти 20% от этого баланса. При профит-факторе всего 1,09, этот запуск, возможно, и был  прибыльным, однако он сопровождался огромным риском. 

r1


Двухкомпонентный фильтр

Для второй оптимизации и форвард-теста мы задействуем полную модель, включив DBN, а предпочтительным режимом алгоритма с включенным DBN был режим 3, комбинированный режим ATR и полос Боллинджера. Наш отчет показывает значительное изменение, и да, DBN является безжалостным контролирующим фильтром, однако выбор режима 3 алгоритма также мог бы отсеять значительное количество сделок. В итоге было совершено всего 4 сделки, из которых только одна оказалась прибыльной. Как ни парадоксально, этот результат, возможно, стоит изучить подробнее на более длинных тестовых горизонтах и на разных инструментах, относительная просадка по средствам (equity) все равно была меньше, чем в нашем первом тестовом запуске. 

r2



Заключение

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

название описание
wz_95_r2.mq5 Советник, собранный Мастером
SignalDSUDBN_r2.mqh Пользовательский сигнальный файл, используемый в сборке мастера
r1_r.set Настройки входных параметров для первого тестового запуска
r2_r.set Настройки входных параметров для второго тестового запуска

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/22937

Прикрепленные файлы |
MQL5.zip (7.82 KB)
Автоматизация торговых стратегий на MQL5 (Часть 34): Система пробоя линии тренда с оценкой качества аппроксимации по коэффициенту R2 Автоматизация торговых стратегий на MQL5 (Часть 34): Система пробоя линии тренда с оценкой качества аппроксимации по коэффициенту R2
В этой статье мы разработаем на MQL5 систему пробоя линии тренда, которая определяет линии поддержки и сопротивления по свинговым точкам (локальным экстремумам). Надежность линий будет оцениваться по коэффициенту детерминации R², а также по ограничениям на угол наклона. После проверки система сможет автоматически открывать сделки на пробое. Мы будем находить локальные максимумы и минимумы в пределах заданной глубины анализа, строить линии тренда с минимально допустимым количеством касаний и оценивать их надежность по коэффициенту детерминации R² и углу наклона.
Модульная архитектура индикаторов в MQL5 (Часть 1): Хватит копировать и вставлять — начните писать масштабируемый, переиспользуемый код Модульная архитектура индикаторов в MQL5 (Часть 1): Хватит копировать и вставлять — начните писать масштабируемый, переиспользуемый код
В статье разработан объектно-ориентированный каркас для индикаторов MQL5 путем преобразования примитивного примера в пригодные для постоянного использования модули. В ней формализуется частичный пересчет буфера в OnCalculate, логика переносится в классы, вынесенные в заголовочные файлы (CAppliedPrice, CSma), а также вводятся CSubIndiBase, CIndicatorBase и реестр для централизации требований. В результате получаются переносимые компоненты, изолированные входные параметры и аккуратно организованные буферы при минимуме шаблонного кода, что ускоряет сборку новых индикаторов и упрощает их обслуживание.
Автоматизация классических рыночных методов в MQL5 (Часть 3): Стадийный анализ Стэна Вайнштейна Автоматизация классических рыночных методов в MQL5 (Часть 3): Стадийный анализ Стэна Вайнштейна
В статье представлен полноценный торговый советник, построенный на методе стадийного анализа Стэна Вайнштейна. Советник классифицирует рынок по одной из четырёх стадий, анализируя наклон и положение 30-недельной скользящей средней, а также характер движения цены и динамику объёма. Затем он открывает длинные позиции только при прорывах в Стадию 2, а короткие — при пробоях вниз в Стадию 4. В статье объясняется каждая стадия, способы её программного определения и то, почему преимущество метода создаёт именно дисциплина — торговля только на подходящей стадии.
Моделирование рынка: Position View (IX) Моделирование рынка: Position View (IX)
В данной статье, которая станет поворотным моментом, мы начнем более глубоко изучать взаимодействие между разрабатываемыми нами приложениями для обеспечения полной поддержки системы повторов и симуляции. Здесь мы проанализируем проблему, которая, с одной стороны, довольно неприятна, но с другой — очень интересна для объяснения и решения. Проблема заключается в следующем: как вернуть линии тейк-профита и стоп-лосса после того, как они были удалены, и сделать это без использования терминала путем выполнения операции прямо на графике. На первый взгляд, это кажется простым. Однако, существуют несколько препятствий, которые необходимо преодолеть.