Знакомство с языком MQL5 (Часть 18): Введение в паттерн "Волны Вульфа"
Введение
И снова приветствуем вас в Части 18 серии "Знакомство с языком MQL5"! В этой части мы продолжим развивать все, что мы изучили до сих пор, используя наш фирменный проектный подход, чтобы помочь вам улучшить свои навыки в языке MQL5 через примеры из реальной жизни. В Части 17 мы сосредоточились на пробоях трендовых линий и сетапах разворота, продемонстрировав, как вы можете создавать советники, которые реагируют на ключевые уровни и торгуют на основе поведения цены вокруг трендовых линий.
В этой статье мы сделаем шаг вперед и исследуем более продвинутый графический паттерн – волны Вульфа. В отличие от базовых паттернов, которые сильно зависят от простых пробоев поддержки и сопротивления, паттерн волн Вульфа включает в себя точную пятиточечную структуру и нацелен на прогнозирование движения цены к определенной целевой линии. Это мощный инструмент для прогнозирования разворотов и определения времени входа с максимальной точностью.
Эта часть будет сосредоточена на объяснении понятий, связанных с паттернами волн Вульфа, включая то, как выявлять как медвежьи, так и бычьи сетапы. Вы научитесь распознавать эти паттерны на графике и поймете условия, которые определяют действительную структуру волн Вульфа. В этом разделе также будут описаны система для программного распознавания паттерна и создание советника на ее основе. В следующей статье мы реализуем эту логику на языке MQL5, чтобы автоматически выявлять волны Вульфа и создать советник на основе этого паттерна.
1. Паттерн волн Вульфа
Волны Вульфа – это один из разворотных графических паттернов, который можно использовать для выявления возможного изменения в направлении рынка. Движение цены состоит из пяти различных волн. Чтобы нарисовать пять точек, этот паттерн полагается на нахождение важных максимумов и минимумов свинга. После нахождения этих пяти точек паттерн указывает на то, что цена развернется на пятой точке и продолжит движение в направлении целевой линии, которая, как ожидается, будет проведена от точки 1 до точки 4. Чтобы сделать стратегию еще точнее, она также оценивает предполагаемую целевую область и проверяет паттерн с помощью расширения Фибоначчи.
Медвежий паттерн волн Вульфа
Для паттерна медвежьей волны Вульфа необходимо последовательно найти пять различных ценовых точек, каждая из которых соответствует четко определенным структурным принципам. Паттерн должен начинаться с волны 1, которая должна быть максимумом свинга. Волна 2 должна быть расположена ниже волны 1, потому что она является минимумом свинга. Далее, волна 3 является максимумом свинга, который превышает волну 1 и попадает в заранее определенный диапазон расширения Фибоначчи от движения цены между волнами 1 и 2. Затем создается волна 4 как минимум свинга, который должен оставаться выше волны 2, при этом находясь ниже обеих волн 3 и 1.
Поскольку волна 5 является максимумом свинга, который поднимается выше волны 3 и должна попасть в определенный диапазон расширения Фибоначчи от движения между волнами 3 и 4, она в конечном итоге становится самой важной точкой. Поскольку завершение волны 5 часто указывает на чрезмерный бычий импульс, рынок считается готовым к возможному развороту вниз, когда все эти требования выполнены.

Волны 3 и 4 должны составлять как минимум 70% от размера волн 1 и 2, что повышает точность разворота. Для распознания паттерна волн Вульфа имеют решающее значение три трендовые линии. Чтобы лучше определить верхнюю структуру паттерна, первая трендовая линия проводится от волны 1 до волны 3. Нижняя граница формируется второй трендовой линией, которая соединяет волны 2 и 4. Паттерн визуально обрамлен сходящейся структурой, образуемой этими двумя линиями. Более стратегическую функцию выполняет третья трендовая линия, которая проводится от волны 1 до волны 4. Она помогает определить ожидаемую траекторию волны 5. Эта последняя трендовая линия является важной контрольной точкой для входа в сделку, так как она часто указывает на возможный разворот, когда цена достигает ее или приближается к ней.
Бычий паттерн волн Вульфа
В бычьем паттерне волн Вульфа необходимо определить пять отдельных точек свинга в определенном порядке, каждая из которых должна соответствовать точным структурным правилам. Паттерн начинается как минимум свинга в волне 1. Далее идет волна 2, создавая максимум свинга, который должен располагаться выше волны 1. Затем распознается волна 3 как минимум свинга, который попадает в определенный диапазон расширения Фибоначчи от движения между волнами 1 и 2 и опускается ниже волны 1. После этого появляется волна 4 как максимум свинга, который должен подняться выше волн 1 и 3, но оставаться ниже волны 2.
Самым важным элементом этого бычьего сетапа является волна 5. Она должна находиться в пределах определенного диапазона расширения Фибоначчи от движения между волной 3 и волной 4 и распознается как минимум свинга, который устанавливается ниже волны 3. После завершения волны 5 рынок считается несколько недооцененным, что указывает на высокую вероятность восходящего разворота.
Как и медвежий паттерн, бычий паттерн волн Вульфа зависит от симметрии между его волнами. Переходы от волны 3 к волне 4 должны быть по возможности такими же по длительности, как переходы от волны 1 к волне 2. Говоря конкретнее, переход от волны 3 к волне 4 должен составлять как минимум 70% перехода от волны 1 к волне 2.
Три трендовые линии обеспечивают важнейшее подтверждение бычьей волны Вульфа. Первая трендовая линия, проводимая от волны 1 до волны 3, определяет нижнюю структуру паттерна. Вторая трендовая линия соединяет волны 2 и 4, устанавливая верхнюю границу структуры. Эти две трендовые линии часто образуют более узкую, сходящуюся форму. Третья и самая значимая трендовая линия проводится от волны 1 до волны 4. Она помогает предсказать ожидаемую траекторию волны 5 и является важной точкой отсчета для входа в сделку.

Выявление волн
Чтобы выявлять волны Вульфа, мы сначала должны понять, как обнаруживать максимумы и минимумы свинга. В предыдущих статьях я объяснял, как выявлять эти критические точки. Для максимума свинга цена максимума определенной свечи должна быть выше цен максимумов заданного количества свечей до и после нее. Аналогичным образом, минимум свинга возникает, когда минимальная цена бара ниже минимальных цен указанного количества баров вокруг него. Такие точки свинга служат основой для определения пятиволновой структуры паттерна Вульфа. Без их точного обнаружения оставшуюся часть паттерна невозможно надежно идентифицировать.
Как только максимумы и минимумы свинга будут точно определены, следующим шагом будет их организация в пятиволновую структуру, которая определяет паттерн волны Вульфа. Существует определенный порядок, в котором каждая из волн должна быть связана с другими. Например, волна 3 должна находиться в пределах корректного расширения Фибоначчи от предыдущего движения, в то время как волны 1 и 2 устанавливают начальную ориентацию. Эта организованная структура поддерживает геометрическую симметрию и предсказательную силу паттерна. Крайне важно правильно установить эту последовательность перед тем, как пытаться внедрить ее в советник.
Пример:
//+------------------------------------------------------------------+ //| FUNCTION FOR SWING LOW | //+------------------------------------------------------------------+ bool IsSwingLow(const double &low_price[], int index, int lookback) { for(int i = 1; i <= lookback; i++) { if(low_price[index] > low_price[index - i] || low_price[index] > low_price[index + i]) return false; } return true; } //+------------------------------------------------------------------+ //| FUNCTION FOR SWING HIGH | //+------------------------------------------------------------------+ bool IsSwingHigh(const double &high_price[], int index, int lookback) { for(int i = 1; i <= lookback; i++) { if(high_price[index] < high_price[index - i] || high_price[index] < high_price[index + i]) return false; } return true; }

Минимум свинга можно найти на ценовом графике с помощью функции IsSwingLow(). Минимум свинга наступает, когда минимальная цена бара ниже минимальных цен окружающих его баров. Эта функция принимает на вход массив минимумов, значение интервала проверки, которое указывает, сколько баров следует проверить до и после текущего бара, и индекс определенного бара, вокруг которого будет проводиться проверка. Затем функция используется для сравнения текущего минимума с минимумами каждой из окружающих свечей. Функция возвращает false, если текущая свеча не является минимумом свинга. Она возвращает true, если текущий минимум меньше любого из окружающих минимумов, указывая на то, что он является минимумом свинга.
Аналогичным образом, за выявление максимума свинга отвечает функция IsSwingHigh(). Когда максимальная цена бара на графике превышает максимумы баров, которые находятся в пределах определенного интервала перед ним и после него, это называется максимумом свинга. По аналогии с функцией IsSwingLow(), эта функция сравнивает максимумы вместо минимумов. Чтобы определить, имеют ли у какие-либо из баров, окружающих целевой индекс, больший максимум, функция проходит по ним. Если это так хотя бы для одного из окружающих баров, функция возвращает false, и текущая свеча не является максимумом свинга. Максимум свинга подтверждается, если максимум текущей свечи выше максимумов всех окружающих ее свечей.
При анализе волновых паттернов, таких как волны Вульфа, эти функции имеют решающее значение для определения пиков и впадин в ценовых данных. Максимумы и минимумы свинга связываются между собой для создания волн в этих паттернах. Эти функции позволяют советнику строить действительные волновые структуры на основе реального поведения рынка, программно выявляя определенные точки разворота.
В обеих функциях решающее значение имеет параметр интервала проверки. Он указывает количество баров, которые будут проверены с обеих сторон от текущего бара. Более высокое значение интервала проверки уменьшает количество ложных сигналов, требуя, чтобы свинг был более отчетливым на фоне окружающей ценовой активности. Логика, которая выявляет волны в паттернах технического анализа, имеет в своей основе эти функции, которые часто используются в советнике для выявления возможных сетапов.
Получение свечных данных и выявление свингов
Как обычно, работа с любым графическим паттерном означает, что вы работаете непосредственно с ценовым действием. Чтобы эффективно анализировать ценовое действие, первым и самым важным шагом является извлечение свечных данных из графика. Без доступа к данным баров вы не сможете выявлять максимумы и минимумы свинга, необходимые для определения таких графических паттернов, как волны Вульфа. Для заранее определенного количества недавних баров мы извлечем данные о ценах открытия, максимума, минимума и закрытия, а также о времени. Чтобы помочь выявить важные точки разворота цен, эти значения будут храниться в массивах и сканироваться через предыдущие свечи. Определяя эти точки свинга, мы можем начать определять возникновение волн, которые потенциально напоминают паттерн волн Вульфа. Все, что следует далее, а именно построение расширений Фибоначчи, подтверждение структуры паттерна и построение трендовых линий, основано на точном определении точек свинга.
Пример:input ENUM_TIMEFRAMES timeframe = PERIOD_CURRENT; int bars_check = 500; datetime time_bar; double total_symbol_bars; double open[]; double close[]; double low[]; double high[]; datetime time[]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { total_symbol_bars = Bars(_Symbol, timeframe); time_bar = iTime(_Symbol, timeframe, 0); CopyOpen(_Symbol, timeframe, time_bar, bars_check, open); CopyClose(_Symbol, timeframe, time_bar, bars_check, close); CopyLow(_Symbol, timeframe, time_bar, bars_check, low); CopyHigh(_Symbol, timeframe, time_bar, bars_check, high); CopyTime(_Symbol, timeframe, time_bar, bars_check, time); } //+------------------------------------------------------------------+ //| FUNCTION FOR SWING LOW | //+------------------------------------------------------------------+ bool IsSwingLow(const double &low_price[], int index, int lookback) { for(int i = 1; i <= lookback; i++) { if(low_price[index] > low_price[index - i] || low_price[index] > low_price[index + i]) return false; } return true; } //+------------------------------------------------------------------+ //| FUNCTION FOR SWING HIGH | //+------------------------------------------------------------------+ bool IsSwingHigh(const double &high_price[], int index, int lookback) { for(int i = 1; i <= lookback; i++) { if(high_price[index] < high_price[index - i] || high_price[index] < high_price[index + i]) return false; } return true; }
Пояснение:
Чтобы регулировать количество исторических баров, которые он анализирует, этот советник инициализирует важные переменные, такие как timeframe и bars_check. Чтобы распознавать свинги и графические паттерны, он также объявляет массивы для хранения свечных данных. Советник использует функции Bars() и iTime() для определения того, сколько баров существует, и когда начинать копирование данных. Затем функции Copy*() загружают исторические ценовые данные в массивы для анализа.
В рамках определенного периода времени и определенного количества баров такие функции, как CopyOpen(), загружают в массивы определенные ценовые данные, такие как цены открытия, закрытия, максимума или минимума. Хотя они нацелены на разные классы цен, все эти функции действуют по одной и той же схеме. Функции IsSwingLow и IsSwingHigh помогают выявлять ключевые точки разворота цен, проверяя, является ли минимум или максимум свечи более локальным экстремумом по отношению к окружающим его свечам в интервале проверки. Если условие выполнено, свеча помечается как действительная точка свинга.
Использование этих функций необходимо для нахождение пяти волновых точек, которые определяют такие графические паттерны, как волны Вульфа. На самом деле, эти функции обнаружения точек свинга всегда будут оставаться полезными, пока мы работаем с графическими паттернами. Они служат краеугольным камнем нашего подхода, и эта статья, как и другие в этой серии, развивает ранее представленные основные идеи. Каждая новая статья, тем не менее, должна включать четкое объяснение этих моментов, особенно для читателей, которые знакомятся только с этой частью серии и не читали другие.

2. Создание советника
Как работает советник
Разработка советника для волн Вульфа требует понимания логики, стоящей за действительными возможностями для покупки и продажи. Для эффективной работы советник должен уметь выявлять эти волны в исторических ценовых данных и проверять, что они соответствуют определённым требованиям, таким как симметрия и соответствие Фибоначчи.
Перед тем как начинать писать код, критически важно определить базовую систему, которая будет управлять решениями советника. Это подразумевает указание того, что такое действительный паттерн, когда стоит задумываться о возможном входе, и как избежать ложных формаций. Если такая система будет определена, советник будет реагировать только на сетапы с высоким уровнем вероятности, которые соответствуют традиционной структуре волн Вульфа.
Эта часть статьи закладывает основу, необходимую для последующего перевода логики паттерна в программные шаги. Мы рассмотрим, как визуально представить график, используя ключевые волновые точки, и как подготовить данные, которые советник будет использовать в своем анализе.
Логика для продажи
- Советник обнаружит четыре точки, которые соответствуют волне 1, волне 2, волне 3 и волне 4 в рамках паттерна медвежьей волны Вульфа.
- На графике будут проведены три трендовые линии. Первая соединяет волну 1 и волну 3, очерчивая верхнюю структуру. Вторая соединяет волну 2 и волну 4, определяя нижнюю структуру. Третья трендовая линия соединяет волну 1 и волну 4 и используется для проекции потенциальной зоны целевой прибыли.
- На график будет добавлен объект расширения Фибоначчи как для отрезков волн 1 и 2, так и для отрезков волн 3 и 4. Это поможет убедиться, что волна 3 и волна 5 соответствуют необходимым критериям расширения, имеющим в основе структуру волн Вульфа.
- Советник отслеживает бычий пробой, когда цена пересекает трендовую линию, проведенную от волны 1 до волны 3, и закрывается выше нее.
- После пробоя советник ждет подтверждающую медвежью свечу, которая пересекает ту же трендовую линию обратно вниз и закрывается под ней.
- Как только эта подтверждающая разворотная свеча закроется, советник немедленно разместит ордер на продажу.
- Затем он проверит все бары между свечой пробоя и свечой разворота, чтобы найти наибольший максимум в этом диапазоне. Этот максимум принимается за вершину волны 5 и используется в качестве уровня стоп-лосса.
- Устанавливается тейк-профит. Это позволяет сделке продолжаться до тех пор, пока цена не достигнет проекции трендовой линии, проведенной от волны 1 до волны 4. Эта трендовая линия служит окончательным триггером для фиксации прибыли.
- Как только цена коснется трендовой линии, проведенной от волны 1 до волны 4, советник автоматически закроет сделку на продажу.

Логика для покупки
- Советник определит четыре точки, которые соответствуют волне 1, волне 2, волне 3 и волне 4 паттерна бычьей волны Вульфа.
- На графике будут проведены три трендовые линии. Первая соединяет волну 1 и волну 3, определяя нижнюю структуру. Вторая соединяет волну 2 и волну 4, формируя верхнюю границу. Третья трендовая линия соединяет волну 1 и волну 4 и используется для проекции потенциальной зоны целевой прибыли.
- На график будет добавлен объект расширения Фибоначчи как для отрезков волн 1 и 2, так и для отрезков волн 3 и 4. Это помогает проверить, попадают ли волна 3 и волна 5 в требуемые диапазоны расширения, ожидаемые для правильного паттерна волны Вульфа.
- Советник отслеживает медвежий пробой, когда цена пересекает трендовую линию, проведенную от волны 1 до волны 3, и закрывается ниже нее.
- После пробоя советник ждет подтверждающую бычью свечу, которая пересекает ту же трендовую линию обратно вверх и закрывается над ней.
- Как только эта подтверждающая свеча закроется, советник немедленно разместит ордер на покупку.
- Затем советник проверит все бары между свечой пробоя и свечой разворота, чтобы найти наименьший минимум в этом диапазоне. Эта точка минимума принимается за основание волны 5 и используется в качестве уровня стоп-лосса.
- Устанавливается тейк-профит. Сделка остается открытой до тех пор, пока цена не достигнет проекции трендовой линии, проведенной от волны 1 до волны 4, которая служит зоной целевой прибыли.
- Как только цена коснется трендовой линии, соединяющей волны 1 и 4, советник автоматически закроет покупку.

Примечание: Этот проект направлен на обучение программированию на языке MQL5 и стратегиям графических паттернов, но не для торговли в реальном времени. Всегда консультируйтесь с финансовым консультантом перед использованием любой стратегии на реальных рынках.
Заключение
В этой статье вы познакомились с концепцией паттерна волн Вульфа, включая его структуру и логику, необходимую для создания советника на его основе. Мы исследовали, как выявлять действительные волновые точки, используя максимумы и минимумы свинга, а также ключевые принципы, которые определяют сетапы на покупку и продажу. В следующей статье мы рассмотрим, как реализовать эту логику программно на языке MQL5, реализовав стратегию волн Вульфа с помощью автоматизированной торговли.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/18555
Предупреждение: все права на данные материалы принадлежат MetaQuotes Ltd. Полная или частичная перепечатка запрещена.
Данная статья написана пользователем сайта и отражает его личную точку зрения. Компания MetaQuotes Ltd не несет ответственности за достоверность представленной информации, а также за возможные последствия использования описанных решений, стратегий или рекомендаций.
Нейросети в трейдинге: Двусторонняя адаптивная временная корреляция (Основные компоненты)
Анализ нескольких символов с помощью Python и MQL5 (Часть 3): Треугольные курсы валют
Детерминированный алгоритм дендритных клеток — Deterministic Dendritic Cell Algorithm (dDCA)
Квантовые вычисления и градиентный бустинг в торговле EUR/USD
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования