Возможности Мастера MQL5, которые вам нужно знать (Часть 83): Использование паттернов стохастического осциллятора и FrAMA — поведенческие архетипы
Введение
Платформа MetaTrader 4/5 за более чем 20 лет получила широкое признание прежде всего благодаря гибкости, позволяющей вести торговлю как вручную, так и автоматически. Например, в ней поддерживается как ручная, так и автоматизированная торговля, причем для каждого подхода предусмотрен собственный набор инструментов. Для ручной торговли предусмотрен календарь событий и новостей, а для автоматизированной – Тестер стратегий; это лишь часть инструментов, доступных в каждом режиме.
Мастер MQL5, предназначенный для автоматизации торговли, а не для ручной торговли, остается несколько недооцененным инструментом, позволяющим создавать прототипы мультисигнальных систем с настраиваемыми трейлинг-стопами и правилами управления капиталом. Каждый советник, созданный Мастером, включает основные компоненты: один или несколько классов сигналов, логику трейлинг-стопа и правила управления капиталом. Класс сигнала, которому посвящено большинство статей серии, выявляет паттерны, оценивает вероятности и формирует торговые решения.
В этой статье подробно рассмотрим пользовательский класс сигнала, объединяющий стохастический осциллятор и фрактальную адаптивную скользящую среднюю. Сочетание двух известных индикаторов формирует гибридную систему, в которой логика индикаторов представляется в виде конвейерной последовательности двоичных сигналов. Такой подход фактически выступает цифровым фильтром шума при анализе рыночных паттернов. Как обычно, рассмотрим десять индикаторных паттернов для разных рыночных режимов: трендовых и склонных к возврату к среднему, коррелированных и декоррелированных, с низкой и высокой волатильностью. Каждый из десяти паттернов, определенных в пользовательском классе сигнала, соответствует определенному условию, связанному с наклоном FrAMA, положением Stochastic или ценовым паттерном.
Поэтому структура пользовательского класса сигнала соответствует модульному подходу Мастера MQL5. Прикрепленный в конце статьи код следует разместить в папке MQL5\Include\Expert\Signal\Custom или в каталоге, указанном в заголовке приложенного файла .mq5. Новые читатели найдут здесь инструкции по размещению кода и сборке советника с помощью Мастера. Каждый из десяти паттернов пользовательского класса сигнала самодостаточен: все они используют общую вычислительную основу, однако каждый паттерн можно включать и отключать, назначать ему отдельный вес и независимо оптимизировать его условия в Тестере стратегий. Таким образом, архитектура советника — не "черный ящик", а максимально прозрачная система. Система адаптируется к разным рыночным режимам и лучше приспособлена к работе с разными типами рынков благодаря тонкой настройке: трендовым и склонным к возврату к среднему, коррелированным и декоррелированным, а также к периодам низкой и высокой волатильности.
Представленная схема тестирования показывает, как десять сигнальных паттернов работают в каждом из этих рыночных режимов. Сначала в течение года проводим обучение или оптимизацию, а затем в течение следующего года выполняем форвардное тестирование. Кроме того, для разных рыночных режимов проводится тестирование на разных классах активов: сырьевых товарах, фондовых инструментах и валютных парах. В частности, будут протестированы XAUUSD, индекс S&P 500 и валютная пара USDJPY. Все тесты проводятся на 4-часовом таймфрейме. Обучение охватывает период с июля 2023 года по июль 2024 года, а форвардное тестирование – с июля 2024 года по июль 2025 года.
В статье будет показано, как сочетание этих двух взаимодополняющих индикаторов можно преобразовать в систему принятия решений, выявляющую паттерны с учетом контекста. Мы представим не только методическую основу для экспериментов, но и подход к отбору идей, которые можно внедрить в собственные торговые системы.
Сочетание стохастического осциллятора и FrAMA
Чтобы понять, как стохастический осциллятор и фрактальная адаптивная скользящая средняя (FrAMA) дополняют друг друга, важно разобраться, что измеряет каждый из них. Кроме того, векторизованные двоичные паттерны можно использовать для дополнительной проверки или фильтрации сигналов индикаторов.
Начнем с FrAMA – это скользящая средняя, которая изменяет чувствительность в зависимости от фрактальной размерности ценового движения. На трендовом рынке FrAMA становится более сглаженной, а при хаотичном, "фрактальном" ценовом движении быстрее реагирует на изменения цены. Ее формула имеет следующий вид:
![]()
При:
![]()
И:

Где:
- P(t) – текущая цена, обычно цена закрытия;
- D – фрактальная размерность, характеризующая степень неоднородности рынка;
- N1 и N2 – ценовые диапазоны последовательных сегментов в окне анализа FrAMA.
Когда рынок становится более направленным и менее шумным, значение D стремится к единице. В результате значение alpha увеличивается, а FrAMA, подобно быстрой скользящей средней, ближе следует за ценой. Однако на хаотичном рынке или рынке в диапазоне D стремится к 2. В этом случае FrAMA становится более сглаженной и плоской, поскольку отфильтровывает рыночный шум. В представленном ниже пользовательском классе сигнала FrAMA выступает контекстно-зависимой основой для определения тренда. FrAMA динамически корректирует свой наклон с учетом волатильности и ценовой структуры.
Стохастический осциллятор, разработанный Джорджем Лейном, – один из старейших и наиболее распространенных индикаторов моментума. Он показывает положение текущей цены закрытия относительно диапазона от максимума до минимума за заданный период. Индикатор содержит два буфера – K и D. Их формулы имеют следующий вид:

Где:
- Ct – текущая цена закрытия;
- Hn – наибольшая цена максимума за последние n периодов;
- Ln – наименьшая цена минимума за последние n периодов;
- SMAm – простая скользящая средняя для значения %K за m периодов.
Во встроенной библиотеке индикаторов MQL5 этому индикатору соответствует класс CiStochastic. Значения буферов K и D можно получить с помощью методов Main и Signal экземпляра этого класса. Значение K изменяется от 0 до 100. Уровень ниже 20 указывает на перепроданность актива, а выше 80 – на перекупленность. Пересечения K и D, а также их паттерны на этих уровнях и вблизи них важны для выявления разворотов и продолжений тренда. В этой статье они служат основой для двоичных представлений, используемых в качестве торгового сигнала.
Определив оба индикатора, рассмотрим их сочетание. Сочетание FrAMA и стохастического осциллятора формирует двумерную логику. FrAMA определяет направление тренда и адаптирует степень сглаживания, позволяя динамически оценивать направленность рынка – восходящую, нисходящую или боковую. Стохастический осциллятор выявляет истощение моментума и подходящие моменты входа относительно преобладающего ценового диапазона. Совместное использование индикаторов обычно компенсирует их слабые стороны. FrAMA отфильтровывает шум на нетрендовых рынках и снижает число преждевременных сигналов, а стохастический осциллятор помогает избегать запоздалых входов при разворотах. Ниже приведен список дополнительных пользовательских функций для этой пары индикаторов.
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FlatFrama(int ind) { const double tol = m_pips * m_symbol.Point(); for(int i = ind; i < m_past+ind; i++) if(MathAbs(FrAMASlope(i)) > tol) return false; return true; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FarAboveFrama(const int ind, double mult) { double dist = MathAbs(Close(ind) - FrAMA(ind)); double atr = High(ind + 1) - Low(ind + 1); if(atr <= 0.0) return false; //printf(__FUNCTION__ + " dist & atr are: %.5f, & %.5f ", dist, atr); return (Close(ind) > FrAMA(ind) && dist > mult * m_symbol.Point() * atr / 4.0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FarBelowFrama(const int ind, double mult) { const double dist = MathAbs(Close(ind) - FrAMA(ind)); const double atr = High(ind + 1) - Low(ind + 1); if(atr <= 0.0) return false; //printf(__FUNCTION__); return (Close(ind) < FrAMA(ind) && dist > mult * m_symbol.Point() * atr / 4.0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::BullishDivergence() { int a = -1, b = -1; for(int i = 2; i <= m_past + 2; i++) { if(Low(i) < Low(i - 1) && Low(i) < Low(i + 1)) { if(a == -1) a = i; else { b = i; break; } } } if(a == -1 || b == -1) return false; bool priceLL = (Low(a) < Low(b)); bool oscHL = (K(a) > K(b)); return (priceLL && oscHL); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::BearishDivergence() { int a = -1, b = -1; for(int i = 2; i <= m_past + 2; i++) { if(High(i) > High(i - 1) && High(i) > High(i + 1)) { if(a == -1) a = i; else { b = i; break; } } } if(a == -1 || b == -1) return false; bool priceHH = (High(a) > High(b)); bool oscLH = (K(a) < K(b)); return (priceHH && oscLH); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FramaTurningUp() { return (FrAMASlope(X() + 3) < 0 && FrAMASlope(X() + 2) < 0 && FrAMASlope(X() + 1) > 0 && FrAMASlope(X()) > 0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::FramaTurningDown() { return (FrAMASlope(X() + 3) > 0 && FrAMASlope(X() + 2) > 0 && FrAMASlope(X() + 1) < 0 && FrAMASlope(X()) < 0); }
Для получения двоичного представления каждое условие индикатора проверяется в булевой логике true-false. Например, проверяется наличие наклона или условия диапазона. Каждый такой результат становится однобитным сигналом. После объединения эти сигналы образуют двоичный вектор: 1 означает наличие паттерна, а 0 – его отсутствие. По сути, метод оцифровывает непрерывное ценовое движение и позволяет советнику анализировать рынок как последовательность булевых векторов. Эти векторы не требуют значительных вычислительных ресурсов, поэтому при формировании каждого нового ценового бара можно проверять несколько паттернов, не создавая высокой нагрузки на процессор.
Схема тестирования
Цель тестирования сигнальных паттернов стохастического осциллятора и FrAMA – не только протестировать одну стратегию на исторических данных, но и понять, как десять уникальных паттернов работают в разных рыночных условиях. Для статистической сопоставимости все тесты проводятся при одинаковых настройках оптимизации входных параметров. При этом разные классы активов тестируются в разных рыночных архетипах.
Все десять сигнальных паттернов тестируются на 4-часовом таймфрейме. Такой выбор представляет собой компромисс между снижением рыночного шума и сохранением достаточной частоты сделок. Как отмечалось выше, каждый паттерн обучается или оптимизируется с 1 июля 2023 года по 1 июля 2024 года, а форвардное тестирование и валидация проводятся с 1 июля 2024 года по 1 июля 2025 года. Такой формат разделения обеспечивает год обучения на внутривыборочных данных, за которым следует год валидации на вневыборочных данных.
В ходе оптимизации настраивались стандартные пороги открытия и закрытия пользовательского класса сигнала, дельта лимитной цены для размещаемых ордеров и тейк-профит. Как и в предыдущих статьях, для каждого сигнального паттерна также настраивается порог открытия или срабатывания. Помимо этого, настраиваются период анализа и порог в пунктах. Параметр битовой маски PatternsUsed также вручную настраивается для каждого запуска сигнального паттерна, как уже объяснялось в предыдущих статьях.
Чтобы лучше оценивать двоичные паттерны в контексте, тесты сгруппированы по торговым инструментам в соответствии с конкретным рыночным архетипом. Выбранные торговые инструменты лучше всего иллюстрируют каждый из этих типов рыночного поведения. Результаты сведены в следующую таблицу:
| Тип рынка | Проверяемые паттерны | Используемый инструмент | Обоснование |
|---|---|---|---|
| Трендовый | 0,6 | XAUUSD | Способность золота формировать тренд при совпадении макроэкономических факторов |
| Склонный к возврату к среднему | 1,7 | XAUUSD | Внутридневные консолидации золота, которые могут указывать на пики моментума |
| Коррелированный | 2 | SPX | Сильная корреляция между акциями и сигналы согласованного моментума |
| Декоррелированный | 3,9 | SPX | Логика дивергенции и декорреляции может эффективно работать в некоторых асимметричных секторах |
| Высокая волатильность | 4,8 | USDJPY | Волатильность иены может указывать на чрезмерное отклонение цены и паттерны разворота у средней линии |
| Низкая волатильность | 5 | USDJPY | В периоды низкой волатильности часто наблюдаются флэт и плоская FrAMA. |
Приведенная выше таблица позволяет оценить каждый сигнальный паттерн в рыночной среде, для которой он предназначен.
В качестве критерия оптимизации выбран встроенный комплексный критерий, который делает упор на устойчивость и способность к обобщению, а не на абсолютную прибыль. Поскольку каждый сигнальный паттерн оформлен как автономный блок двоичной логики, можно точнее подтвердить или опровергнуть его соответствие рыночному архетипу тестируемого инструмента. Благодаря этому разработчики могут повторно использовать эту схему для создания самостоятельных гибридных стратегий, внося лишь минимальные изменения в код.
Паттерн 0 – согласование пробоя на трендовом рынке
Первый паттерн предназначен для рынков с выраженным направленным моментумом. В основе паттерна лежат адаптивный наклон FrAMA и сигналы пересечения линий стохастического осциллятора. Реализуем этот паттерн на языке MQL5 следующим образом:
SELL – цена находится ниже FrAMA; наклон FrAMA отрицательный, что указывает на нисходящий моментум; линия Stochastic %K пересекает %D сверху вниз, формируя медвежье пересечение; значение %K выше 80, то есть рынок находится в состоянии перекупленности.

//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((Close(X()) > FrAMA(X()) && FrAMASlope(X()) > 0 && CrossUp(K(X()), D(X()), K(X() + 1), D(X() + 1)) && K(X()) < 20) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((Close(X()) < FrAMA(X()) && FrAMASlope(X()) < 0 && CrossDown(K(X()), D(X()), K(X() + 1), D(X() + 1)) && K(X()) > 80) ? true : false); } return(false); }
Сигнал на продажу зеркален бычьему: цена находится ниже FrAMA, наклон FrAMA отрицательный, линия K пересекает D сверху вниз, а значение K превышает 80. Паттерн 0 отражает переход от сжатия волатильности к ее расширению – характерный признак зарождения тренда. Золото выбрано потому, что оно часто переходит от продолжительных направленных движений к консолидации под влиянием макроэкономических факторов: ожиданий по инфляции и политики центральных банков. Золото выбрано, чтобы использовать чувствительность паттерна 0 к направленному движению. Ниже также приведены результаты форвардного тестирования паттерна 0:

Форвардное тестирование дало небольшую прибыль. Результат этого паттерна может указывать на два важных обстоятельства. Во-первых, выбранный инструмент мог хорошо подходить для теста: динамика XAU в значительной степени определяется макроэкономическими факторами и характеризуется сильным моментумом. Амплитуда дневного диапазона обычно позволяет стохастическому осциллятору выйти из зоны перепроданности без преждевременных разворотов. Во-вторых, роль могла сыграть устойчивость паттерна: он сочетает два независимых показателя – направление тренда и повторное ускорение моментума. Каждый из двух индикаторов вносит собственные данные в двоичное решение, которое успешно работает как во время обучения, так и при форвардном тестировании.
Паттерн 1 – крюкообразный разворот при возврате к среднему
Если в паттерне 0 мы искали пробои на трендовом рынке, то этот сигнальный паттерн использует противоположный подход – возврат к среднему. Здесь выявляются точки истощения, в которых цена временно отклоняется от равновесия перед возвратом к нему. Паттерн использует чувствительность стохастического осциллятора на краткосрочных экстремумах. FrAMA служит динамической опорной линией и помогает выявлять чрезмерные отклонения в пределах адаптивного диапазона.
Паттерн 1 должен хорошо работать с активами, которые часто колеблются вокруг среднего значения, формируя пики и спады моментума при относительно стабильной волатильности. Золото может демонстрировать эти свойства, особенно в периоды консолидации после сильного роста или снижения. Реализуем это на языке MQL5 следующим образом:
SELL – цена находится выше FrAMA (зона переоценки); линия %K выше 85, то есть рынок находится в состоянии сильной перекупленности; линия %K снижается, то есть ее значение ниже, чем на предыдущем баре.

//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((Close(X()) < FrAMA(X()) && K(X()) < 15 && K(X()) > K(X() + 1)) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((Close(X()) > FrAMA(X()) && K(X()) > 85 && K(X()) < K(X() + 1)) ? true : false); } return(false); }
Сигналы на покупку и продажу фиксируют первый разворот линии K в экстремальных зонах. При этом вход выполняется против краткосрочного поведения большинства участников рынка. FrAMA выступает фильтром и допускает вход, когда цена значительно отклоняется от среднего значения, которое постоянно корректируется. Это снижает число ложных разворотов в трендовых движениях.
Хотя золото часто формирует тренды, в фазах консолидации оно также подходит для паттернов возврата к среднему. Цена может колебаться в узком боковом диапазоне, особенно при отсутствии значимых макроэкономических катализаторов. В такие периоды наклон FrAMA обычно выравнивается, отражая адаптивное равновесие и указывая на "справедливую стоимость". Когда стохастический осциллятор формирует крюк в экстремальной зоне – ниже 15 или выше 85, – это может указывать на истощение спекулятивных позиций и создавать возможность входа на разворот. Форвардное тестирование оказалось прибыльным; его результаты приведены ниже.

Паттерн 2 – продолжение коррелированного тренда
Третий паттерн предназначен для выявления продолжения тренда на коррелированных рынках, где активы синхронно движутся под влиянием общих макроэкономических факторов. Паттерн использует устойчивый наклон FrAMA: выраженно положительный при покупках и выраженно отрицательный при продажах. Это условие дополняется устойчивым положением линий стохастического осциллятора. В частности, при открытии длинной позиции K и D должны оставаться выше уровня 50, а при открытии короткой – ниже него. Это указывает на устойчивый моментум. Реализуем это на языке MQL5 следующим образом:
SELL – наклон FrAMA выраженно отрицательный, что подтверждает нисходящий тренд; в течение последнего периода анализа и Stochastic %K, и %D оставались ниже 50, что указывает на устойчивый медвежий настрой.

//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_2(ENUM_POSITION_TYPE T) { const double strong = m_pips * m_symbol.Point(); bool up = (FrAMASlope(X()) > strong); bool down = (FrAMASlope(X()) < -strong); bool over = true, under = true; for(int i = 0; i < m_past; i++) { over &= (K(X() + i) > 50 && D(X() + i) > 50); under &= (K(X() + i) < 50 && D(X() + i) < 50); } if(T == POSITION_TYPE_BUY) { return((up && over) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((down && under) ? true : false); } return(false); }
Строго говоря, для тестирования этого паттерна можно использовать любой актив; выбор SPY не является инвестиционной рекомендацией. Однако индекс подходит для этого паттерна, поскольку из десяти рассматриваемых паттернов именно этот сильнее всего опирается на корреляцию. Кроме того, индекс обычно тесно коррелирует с входящими в него акциями. Поэтому в отдельные периоды здесь можно ожидать высокой автокорреляции. Форвардное тестирование дало умеренно обнадеживающие результаты, как показано ниже.

Паттерн 3 – распознавание декоррелированных дивергенций
Четвертый паттерн отходит от правил следования за трендом и сосредотачивается на декорреляции рынка. Это происходит, когда движение цены и моментум перестают быть синхронными. Паттерн использует структурный контраст между FrAMA, плавно отражающим тренд, и стохастическим осциллятором, выступающим краткосрочным измерителем внутренней энергии рынка. Цель – выявлять бычьи и медвежьи дивергенции непосредственно перед обновлением ценового экстремума, чтобы формировать сигналы на покупку и продажу соответственно. Затем стохастический осциллятор не должен подтверждать продолжение моментума, что может указывать на его истощение. Это указывает на декорреляцию, особенно на рынках, которые обычно характеризуются корреляцией и синхронным поведением активов. Реализуем это на языке MQL5 следующим образом:
SELL – цена находится выше FrAMA, но моментум не подтверждает это движение; наблюдается медвежья дивергенция ; цена формирует более высокий максимум, а Stochastic %K – более низкий максимум.

//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((Close(X()) < FrAMA(X()) && BullishDivergence()) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((Close(X()) > FrAMA(X()) && BearishDivergence()) ? true : false); } return(false); }
Индекс SPY подходит для этого паттерна, поскольку часто демонстрирует автокорреляцию вследствие синхронного движения с входящими в него активами. Поэтому этот сетап подходит для выявления временной декорреляции, возникающей при развитии межсекторных дивергенций. Например, технологический сектор может укрепляться, тогда как энергетический – ослабевать под влиянием краткосрочных факторов или неожиданных новостей. Такие межсекторные дивергенции могут возникать в точках макроэкономического перелома и нередко предвещают дивергенции индикаторов на уровне индекса. В этом случае FrAMA служит структурной базовой линией, а стохастический осциллятор – краткосрочным индикатором ускорения. Когда сигналы индикаторов расходятся, это обычно предшествует ослаблению тренда или фазе ребалансировки. Результаты форвардного тестирования паттерна 3 приведены ниже.

Положительный результат паттерна 3 может объясняться тем, что он не следует за ценой, а заранее выявляет нарушения корреляций, обычно предшествующие более масштабным разворотам рынка.
Паттерн 4 – чрезмерное отклонение при высокой волатильности
Пятый и последний рассматриваемый в статье паттерн предназначен для выявления экстремумов, вызванных волатильностью. Такие экстремумы возникают, когда цена значительно отклоняется от адаптивной средней перед последующей коррекцией или продолжением движения. Это правило объединяет адаптивную базовую линию FrAMA с фильтром отклонения цены. По сути, задача состоит в выявлении статистически значимых отклонений, усиливающихся при расширении волатильности.
Этот паттерн предназначен для быстро движущихся рынков, где чрезмерное отклонение цены встречается часто, а трендовые импульсы нередко отклоняются от равновесия перед нормализацией. Поэтому для этого паттерна выбрана валютная пара USDJPY. Реализуем этот паттерн на языке MQL5 следующим образом:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalFrAMA_Stochastic::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY) { return((FarAboveFrama(X()) && K(X()) > 60) ? true : false); } else if(T == POSITION_TYPE_SELL) { return((FarBelowFrama(X()) && K(X()) < 40) ? true : false); } return(false); }
Дополнительный гиперпараметр динамического расстояния dist обеспечивает срабатывание сигнала только при статистически значимом отклонении. Входной параметр mult также можно было оптимизировать, однако он используется скорее как эпсилон или ненулевое значение. Читатели могут ознакомиться с кодом ниже и проверить, насколько настройка этого параметра влияет на эффективность сигнального паттерна.
Вернемся к выбору USDJPY: эта валютная пара, как и большинство пар с иеной, обычно демонстрирует асимметричную волатильность. Это особенно заметно при продолжительных трендовых импульсах, например когда денежно-кредитная политика или процентные ставки ФРС и Банка Японии существенно различаются. Однако за такими импульсами обычно следуют сопоставимые движения в обратную сторону. Сильные реакции также наблюдаются при изменениях внутридневной ликвидности и публикации важных экономических новостей. Все эти факторы соответствуют логике паттерна, предназначенного для высокой волатильности. Форвардное тестирование этого паттерна оказалось прибыльным, как показано в отчете ниже.

Эти положительные результаты могут объясняться тем, что в паттерне 4 используется масштабирование по волатильности.
Заключение
Для этой пары индикаторов предусмотрены десять паттернов, как и для других сочетаний индикаторов, однако в этой статье рассматриваются только пять. В следующей статье мы продолжим с того места, на котором остановились. Как показало тестирование, объединение FrAMA и стохастического осциллятора в пользовательском классе сигнала может быть полезно и за пределами ограниченных тестовых периодов. Каждый из пяти рассмотренных паттернов отражает определенный поведенческий архетип, наиболее наглядно проявляющийся на конкретном торговом инструменте. Тестирование проводилось на XAUUSD, SPX и USDJPY. В следующей статье работа с этими инструментами продолжится с другими, но связанными рыночными паттернами.
Отказ от ответственности
Данная статья не является инвестиционной рекомендацией. Цель этих статей – не заявлять о полном понимании рынков, а приглашать к обсуждению идей. Цель не в поиске "святого Грааля", а в изучении доступных возможностей и демонстрации того, как их можно использовать. Если читатель решит использовать представленные материалы, окончательная проверка и необходимая осмотрительность остаются за ним.
| имя | описание |
|---|---|
| WZ-83.mq5 | Советник, собранный Мастером, в заголовке которого перечислены имена и расположение включенных файлов |
| SignalWZ_83.mqh | Файл пользовательского класса сигнала, используемый Мастером для создания советника |
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/19857
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Изучение Стандартной библиотеки MQL5 (Часть 2): Интеграция и связывание компонентов
Автоматизация торговых стратегий на MQL5 (Часть 37): Поиск дивергенций и конвергенций RSI с визуализацией на графике
Автоматизация торговых стратегий на MQL5 (Часть 38): Торговля по скрытым дивергенциям RSI с фильтрами угла наклона
Как построить мультивалютную netting-сетку с точным CatBoost и swap/carry-слоем в MQL5
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования