07/11/2024

Волны Эллиотта и Волновой анализ в Примерах Индикаторы и Применение

 

Содержание статьи

Волны Эллиотта и Волновой анализ в Примерах + Индикаторы и Применение

В чем суть и как работает теория волнового анализа в торговле на финансовых рынках. Волны Эллиотта и уровни Фибоначчи, индикаторы и методы.

Что такое Волновой Анализ

Теория волн Эллиотта разработана почти 100 лет назад. Она позволяет увидеть общую закономерность в движении цен на рынке. Графически они представляют собой волны: главный тренд сменяется кратковременным откатами, после чего цикл повторяется.

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

  • Что такое Волновой Анализ простыми словами
  • Основы волнового анализа
    • Фрактальная структура волн
    • Импульсы
    • Коррекции
    • Видео: Волны Эллиота для новичков
    • Инструменты волнового анализа
    • Индикаторы
    • Применение волновой теории в торговле
    • Плюсы и минусы волновой теории
    • Книги
    • Советы и рекомендации

    Что такое Волновой Анализ простыми словами

    Теория волнового анализа разработана американским бухгалтером и финансистом Ральфом Эллиоттом (Ralph Nelson Elliott) в 1930-х гг. Основные моменты он изложил в книге, которая была издана в 1938 году. Главная идея состоит в том, что поведение участников рынка можно описать простой, хорошо распознаваемой моделью. Графически ее изображают в виде волны – сначала наблюдается ценовой импульс, после чего противоположное движение (коррекция).

    Исходя из этого можно дать определение: волновой анализ рынка – это способ прогнозирования движения цен разных активов (валюты, акций и других) на основе одинаковых моделей.

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

    Основы волнового анализа

    В основе концепции лежит закон волн Эллиотта, согласно которому движение рынка можно описать простой и наглядной моделью – волной. Она отражает главный принцип поведения рынка: цена движется не прямолинейно, а волнообразно.

    Актив начинает движение (например, рост цены), после чего наблюдается коррекция (откат вниз). После этого он «отдыхает» либо повторяет цикл – как на повышение, так и на понижение. Причем любая волна состоит из 2 частей:

    1. Движущая (импульс) – основное движение.
    2. Корректирующая (коррекция) – откат в противоположном направлении.

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

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

    Цикл

    Умение увидеть в «беспорядочном» движении графика организованную волну позволяет трейдеру правильно определить текущее местоположение и сделать верный прогноз на ближайшее время. Так, в показанном примере достаточно определить точку разворота после движущей волны и заработать на откате (сделка SELL). После окончания коррекции можно снова войти в рынок (сделка BUY) и опять получить прибыль на повышении цены.

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

    Фрактальная структура волн

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

    Например, океан состоит из бесчисленного множества капель, и при этом каждая капля – это «мини-океан», поскольку она повторяет его свойства и состав. Аналогично все живые организмы состоят из клеток.

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

    Так и волна на рынке состоит из нескольких «мини-волн», напоминающих по внешнему виду основное движение (тренд). На практике они группируются в 9 волновых уровней.

    9 уровней

    Оригинальное название Название на русском языке Период/таймфрейм
    Grand Supercycle Главный Более 10 лет
    Supercycle Суперуровень
    Cycle Основной (Цикл) 10 лет
    Primary Первичный Y1 (годовой)
    Intermediate Промежуточный M1 (месячный)
    Minor Вторичный W1 (недельный)
    Minute Минутный D1 (дневной)
    Minuette Маленький H4 (4-часовой)
    Subminuette Сверхмаленький H1 (часовой)

    Например, на часовом графике сформировалась волна с классическим циклом «импульс – коррекция». С другой стороны, это только часть импульса, который виден на 4-часовом тайфрейме. Если делать волновой анализ на более крупном интервале, можно увидеть, что вся эта волна – только начало импульса на дневном, недельном графике и т.д.

    Схематически это можно представить так: импульс движется от «больших» точек 1-5. В свою очередь, он состоит из 3 более мелких импульсов 1-5 и 2 волн коррекции А-С.

    Коррекции

    Аналогично и коррекция состоит из 2 импульсов 1-5 и 1 отката А-С.

    Откат

    Импульсы

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

    1. На участках до 1, а также 2-3 и 4-5 движение идет по тренду.
    2. На участках 1-2 и 3-4 – по противотренду (небольшой откат).

    Модель для восходящего тренда:

    Модель для восходящего тренда

    Модель для нисходящего тренда:

    Модель для нисходящего тренда

    Несмотря на колебания, всю волну следует рассматривать как единое целое, т.е. участок 1-5 – это и есть импульс, состоящий из 5 элементов.

    Коррекции

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

    • Тренд меняется на противоположный (пойдет новая пятерка);
    • На рынке наступает момент неопределенности, когда цена длительное время будет двигаться в узком коридоре (флэт);
    • Тренд сохраняется, но наступает кратковременный откат.

    В последнем случае речь идет о коррекции. Это меньшая по амплитуде волна, состоящая из 3 участков (поэтому ее также называют тройкой). Каждый из них Эллиотт обозначил буквами А, В и С:

    1. На участках до А и В-С видна коррекция против тренда.
    2. На участке А-В – коррекция по тренду.

    Модель для восходящего тренда:

    Коррекция для нисходящего тренда

    Модель для нисходящего тренда:

    Коррекция для восходящего тренда

    Теперь, если объединить все элементы в одну картину, можно сделать упрощенный волновой анализ на примере восходящего тренда. Видно 2 больших участка – импульс 1-5 и коррекция А-С. Пятерка состоит из 5 участков с 3 движениями по тренду и 2 небольшими откатами. Тройка состоит из 3 участков с 1 движением по тренду и 2 откатами:

    Импульс и коррекция

    Аналогично (в зеркальном отражении) – для нисходящего тренда:

    Пример импульса и коррекции

    Если показать волновой анализ валютной пары или другого актива на примере реального графика, картинка выглядит так. Виден полный цикл пятерки (1-5) и тройки (А-С).

    Волновой анализ валютной пары

    Видео: Волны Эллиота для новичков

    Инструменты волнового анализа

    Использование волн Эллиотта в трейдинге основано на правильном определении импульса и коррекции на конкретном тайфрейме – часовом, дневном, недельном и т.д. Для этого используется специальный индикатор, расчет которого основан на соотношении волн Эллиотта.

    Каждая из них (например, 1-2, 2-3 или А-В, В-С) представляет собой определенную часть от волны 1 или волны А.

    Соотношении волн Эллиотта

    Волна Классическое соотношение
    1 Единица измерения (1,000)
    2 0,382 от волны 1
    0,500
    0,618
    3 1,618
    2,618
    4 0,382
    0,500
    5 0,382
    0,500
    0,618
    А 0,382
    0,500
    0,618
    В 0,382 от волны А
    0,500
    С 1,618
    0,618
    0,500

    Из таблицы видно взаимосвязь волн Эллиотта и уровней Фибоначчи. Так, деление отрезка в соотношении 0,382 и 0,618 – это модель золотого сечения, которая и используется в уровнях Фибоначчи. Подобное совпадение не является случайным: оно подтверждается анализом графиков, которые Эллиотт изучал на протяжении нескольких лет.

    Волны обычно измеряют в пунктах. Например, волна 1 прошла 1000 пунктов. Тогда длина волны 2 может быть 382, 500 или 618 пунктов. В другом примере волна А тоже прошла 1000 пунктов. Тогда длина С может составить 1618, 618 или 500 пунктов.

    Приведенные расчеты не могут быть идеально точными, поскольку рынок непредсказуем. Поэтому допускается 10% погрешность как в большую, так и в меньшую сторону.

    Индикаторы

    Знание классического соотношения дает возможность автоматизировать построение волны на графике. С одной стороны, ее можно определить визуально, и этот навык безусловно полезен.

    С другой – трейдеры часто используют индикатор волн Эллиотта (Elliott Wave Prophet). Его можно скачать и установить в терминал МТ4. Инструмент четко показывает импульс (на схеме синим цветом) и коррекцию (красным).

    Индикатор волн Эллиотта

    Теория Эллиота – основная, но не единственная: на практике используются и другие индикаторы волнового анализа. Это осцилляторы (MACD, RSI, Stochastic), инструмент ZigZag, полосы Боллинджера и другие. При этом когда говорят о классическом волновом анализе, чаще всего подразумевают именно теорию Эллиотта.

    Применение волновой теории в торговле

    В простом варианте волны Эллиотта используются «в чистом виде», т.е. без применения дополнительных инструментов – ценовые уровни, индикаторы и другие. Алгоритм действий:

    1. Определить главный тренд на старшем тайфрейме – дневной, недельный, месячный.
    2. Нанести на него волну Эллиотта, понять текущее местоположение (например, точка 3, неподалеку от точки В и т.п.).
    3. Перейти на более мелкий таймфрейм и повторить те же действия.
    4. Сделать прогноз движения цены в ближайшее время с учетом обоих таймфреймов. Например, если младший интервал H4 говорит о готовящемся развороте, а старший D1 свидетельствует о продолжении тренда, считать приоритетными показания последнего.
    5. Дождаться подтверждения прогноза, установить Stop-Loss, Take-Profit и войти в рынок либо настроить отложенный ордер.

    волны Эллиотта

    Основной признак подтверждения составленного прогноза – фактическое движение цены. Так, если нанести волны по H4, достаточно подождать формирования хотя бы одной свечи на H1 в правильном направлении.

    Наряду с этим подтверждение сигнала получают и с помощью других инструментов:

    • Ценовые уровни;
    • Индикаторы технического анализа;
    • Модели японских свечей.

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

    Плюсы и минусы волновой теории

    Торговля по волнам Эллиотта дает трейдеру несколько ощутимых преимуществ:

    • Модель применяется на разных активах;
    • Волны можно увидеть на разных таймфреймах;
    • Они наглядны, а потому доступны для восприятия;
    • Помогают определить текущее местоположение цены на рынке (импульс, откат, начало, середина, завершение тренда).

    Но есть и свои недостатки. Главный минус – субъективность: 2 трейдера могут построить 2 разных волны, которые формально не противоречат теории Эллиотта.

    Поэтому на практике знание этой теории не всегда приводит к гарантированной прибыли. Но попробовать применять ее в работе можно и нужно. А чтобы увеличить вероятность правильного прогноза, рекомендуется следовать эффективным советам, описанным ниже.

    Книги

    • Закон природы. Секрет вселенной – Ральф Эллиотт
    • Полный курс по закону волн Эллиотта – Альфред Фрост, Роберт Пректер
    • Прогноз рынка по новой рафинированной системе распознавания паттернов по волновому принципу Эллиотта – Рич Сваннелл
    • Код Эллиотта. Волновой анализ рынка Forex – Дмитрий Возный
    • Волновой принцип Эллиотта – Альфред Фрост, Роберт Пректер
    • Мастерство анализа волн Эллиотта – Глен Нили
    • Волновой принцип Эллиотта. Приложение к рынкам Форекс – Роберт Балан
    • Практическое использование волн Эллиотта в трейдинге – Валерий Сафонов
    • Полное собрание работ по волнам Эллиотта – Артур Гамильтон Болтон
    • Практическое применение механической торговой системы. Упрощенный анализ волн Эллиотта – Том Джозеф
    • Исследование взаимосвязи теорий циклов и волн Эллиотта в режиме компьютерного моделирования – Чарльз Миллер

    Советы и рекомендации

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

    1. При открытии длительных сделок (недели, месяцы) обязательно применять фундаментальный, а не только волновой анализ.
    2. Не игнорировать сигналы индикаторов, особенно если они противоречат логике волны.
    3. Всегда учитывать близость важных ценовых уровней поддержки или сопротивления, которые исторически тестировались ценой уже много (5-10 и более) раз.
    4. Всегда сопоставлять данные 2-3 соседних таймфреймов (например, H1, H4 и D1).
    5. Обращать внимание на публикацию важных новостей, которые могут непредсказуемо изменить тренд по крайней мере на несколько часов.
    6. Изначально практиковаться только на демо-счете до получения нужных навыков (при усиленной работе на это уйдет 1-2 месяца).
    7. Обращать внимание на особенности конкретного актива: например, USD/JPY свойственны более длительные, не слишком резкие тренды. В то же время цена EUR/USD в большей степени подвержена импульсному движению.
    8. Всегда соблюдать правила мани-менеджмента: не рисковать в ходе одной сделки суммой, превышающей 3% от текущего депозита.

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

    За основу можно взять модель построения волн, а затем доработать ее под конкретный актив, таймфрейм и стиль торговли.

    Главный редактор Stolf. «Самостоятельное управление личными финансами позволяет заниматься интересной работой в удобное для вас время и увеличивает возможности самореализации.»

    Реализация автоматического анализа волн Эллиотта на MQL5

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

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

    1. Волновой принцип Эллиотта

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

    Импульсные волны представляют собой последовательность пяти колебаний цены, коррекционные волны — последовательность трех или пяти колебаний цены. Импульсные волны по форме, структуре, а также применимым к ним правилам бывают следующих типов:

    • Окончание второй волны никогда не заходит за начало первой волны;
    • Третья волна всегда простирается дальше вершины первой волны;
    • Окончание четвертой волны никогда не заходит за вершину первой волны;
    • Третья волна никогда не бывает самой короткой из всех действующих волн;
    • Третья волна всегда является импульсом;
    • Первая волна может быть или импульсом, или клином;
    • Пятая волна может быть или импульсом, или диагональю;
    • Вторая волна может принять форму любой коррекционной волны за исключением треугольника;
    • Четвертая волна может принять форму любой коррекционной волны;
    • Окончание второй волны никогда не заходит за начало первой волны;
    • Третья волна всегда простирается дальше вершины первой волны;
    • Окончание четвертой волны всегда заходит за вершину первой волны, но никогда не заходит за начало третьей волны;
    • Третья волна никогда не бывает самой короткой из всех действующих волн;
    • Третья волна всегда является импульсом;
    • Первая волна может быть или импульсом, или клином;
    • Пятая волна может быть или импульсом или диагональю;
    • Вторая волна может принять форму любой коррекционной волны за исключением треугольника;
    • Четвертая волна может принять форму любой коррекционной волны;
    • Окончание второй волны никогда не заходит за начало первой волны;
    • Третья волна всегда простирается дальше вершины первой волны;
    • Окончание четвертой волны, как правило, заходит за вершину первой волны, но никогда не заходит за начало третьей волны;
    • Третья волна никогда не бывает самой короткой из всех действующих волн;
    • Первая, вторая и третья волны могут принять форму любой коррекционной волны за исключением треугольника;
    • Четвертая и пятая волна могут принять форму любой коррекционный волны;
    • Волна A может принять форму импульса или клина;
    • Волна C может принять форму импульса или диагонали;
    • Волна B может принять форму любой коррекционной волны;
    • Волна C простирается дальше вершины волны A;
    • Окончание волны B не заходит за начало волны A;
    • Волна A может принять форму любой коррекционной волны за исключением треугольника;
    • Волна B может принять форму любой коррекционной волны;
    • Волна C может принять форму импульса или диагонали;
    • Волна W и волна Y принимают форму зигзага;
    • Волна X может принять форму любой коррекционной волны;
    • Волна Y простирается дальше вершины волны W;
    • Окончание волны X не заходит за начало волны W;
    • Волна W, волна Y и волна Z принимают форму зигзага;
    • Волна X может принять формул любой коррекционной волны за исключением треугольника;
    • Волна XX может принять форму любой коррекционной волны;
    • Волна Y простирается дальше вершины волны W;
    • Волна Z простирается дальше вершины волны Y;
    • Окончание волны X не заходит за начало волны W;
    • Окончание волны XX не заходит за начало волны Y;
    • Волна W принимает форму любой коррекционной волны за исключением треугольника;
    • Волна X и волна Y принимают форму любой коррекционной волны;
    • Волна W, волна X и волна Y могут принять форму любой коррекционной волны за исключением треугольника;
    • Волна XX и волна Z могут принять форму любой коррекционной волны;
    • Волна C никогда не выходит за ценовые пределы волны B;
    • Волна D никогда не выходит за ценовые пределы волны C;
    • Волна E никогда не выходит за ценовые пределы волны D;
    • Волна A, волна B и волна C могут принять форму любой коррекционной волны за исключением треугольника;
    • Волна D и волна E могут принять форму любой коррекционной волны;
    • Волна C всегда превышает волну B по длине
    • Волна D всегда превышает волну С по длине
    • Волна A, волна B и волна C могут принять форму любой коррекционной волны за исключением треугольника
    • Волна D и волна E могут принять форму любой коррекционной волны

    Представленные выше модели волн и правила соответствуют лишь классическому представлению о волновом анализе.

    Существует также его современное представление, сформированное при изучении рынка Forex. Найдена, например новая модель наклонного (сдвигающегося) треугольника, выявлены импульсы с треугольником во второй волне и др.

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

    На этом можно закончить краткое введение в волновой принцип Эллиотта и перейти к теме автоматической разметки волн.

    2. Алгоритм автоматической разметки волн Эллиотта

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

    Одним из таких инструментов стал механизм автоматической разметки волн Эллиотта.

    Можно выделить два принципа авторазметки:

    1. Согласно фрактальности волн, анализ ведется «сверху вниз», от больших волн к меньшим;
    2. Анализ ведется методом прямого перебора возможных вариантов.

    Блок-схема алгоритма автоматического анализа волн Эллиотта представлена на рисунке 12.

    Рисунок 12. Блок-схема алгоритма автоматического анализа волн Эллиотта

    Рассмотрим алгоритм более подробно на примере автоматической разметки Импульса (см. рисунок 13).

    На первом этапе, на требуемом интервале времени графика цены с помощью «Зигзага» выделяется необходимое для разметки количество точек. Количество точек зависит от того, какую волну мы хотим анализировать. Так, для анализа Импульса требуется шесть точек — 5 вершин и одна точка начала. Если бы анализировался Зигзаг, то количество требуемых точек было бы уже 4 — 3 вершины и одна точка начала.

    Если «Зигзаг» определил шесть точек на графике цены, тогда сразу можно произвести разметку Импульса: первая точка — точка начала волны 1, вторая точка — вершина волны 1, третья точка — вершина волны 2, четвертая точка — вершина волны 3, пятая точка — вершина волны 4, и шестая точка — вершина волны 5.

    Однако на рисунке 13 «Зигзаг» определил 8 точек. В этом случае придется перебрать по этим точкам все возможные варианты разметки волны. А их, если нетрудно посчитать, будет пять (выделены разным цветом). И каждый вариант разметки придется проверять на правила.

    Варианты разметки

    Рисунок 13. Варианты разметки импульса

    После проверки на правила, в случае, если размеченная волна по всем параметрам является Импульсом, таким же образом происходит анализ ее субволн.

    То же самое касается анализа всех остальных импульсных и коррекционных волн.

    3. Виды волн для автоматической разметки

    Как уже было ранее сказано, анализ будет вестись сверху вниз путем подачи программе указания найти на заданном интервале какую-либо волну. Однако на самом большом интервале невозможно определить состояние волны, ее начало и конец. Такую волну будем называть неначатой и незавершенной.

    Все волны можно разбить на следующие группы:

    1. Неначатые волны:
      1. Волны с неначатой первой волной — 1<-2-3-4-5 (например, Импульс с неначатой волной 1; количество требуемых точек — 5) и 1<-2-3 (например, Зигзаг с неначатой волной A; количество требуемых точек — 3);
      2. Волны с неначатой второй волной — 2<-3-4-5 (например, Диагональ с неначатой волной 2; количество требуемых точек — 4) и 2<-3 (например, Плоскость с неначатой волной B; количество требуемых точек -2);
      3. Волны с неначатой третье волной — 3<-4-5 (например, Тройной зигзаг с неначатой волной Y; количество требуемых точек — 3);
      4. Волны с неначатой четвертой волной — 4<-5 (например, Треугольник с неначатой волной D; количество требуемых точек -2);
      5. Волны с неначатой пятой волной — 5< (например, Импульс с неначатой волной 5; количество требуемых точек — 1);
      6. Волны с неначатой третьей волной — 3< (например Двойная тройка с неначатой волной Z; количество требуемых точек — 1);
      1. Волны с незавершенной пятой волной — 1-2-3-4-5> (например, Импульс с незавершенной волной 5; количество требуемых точек — 5);
      2. Волны с незавершенной четвертой волной — 1-2-3-4> (например, Тройной зигзаг с незавершенной волной XX; количество требуемых точек — 4);
      3. Волны с незавершенной третьей волной — 1-2-3> (например, Клин с незавершенной волной 3; количество требуемых точек -3);
      4. Волны с незавершенной второй волной — 1-2> (например, Зигзаг с незавершенной волной B; количество требуемых точек -2);
      5. Волны с незавершенной первой волной — 1> (например, Плоскость с незавершенной волной A; количество требуемых точек -1);
      1. Волны с неначатой первой волной и незавершенной второй волной —1<-2> (например, Зигзаг с неначатой волной A и незавершенной волной B; количество требуемых точек — 1);
      2. Волны с неначатой второй волной и незавершенной третьей волной — 2<-3> (например, Зигзаг с неначатой волной B и незавершенной волной C; количество требуемых точек — 1);
      3. Волны с неначатой третьей волной и незавершенной четвертой волной — 3<-4> (например, Импульс с неначатой волной 3 и незавершенной волной 4; количество требуемых точек — 1);
      4. Волны с неначатой четвертой волной и незавершенной пятой волной — 4<-5> (например, Импульс с неначатой волной 4 и незавершенной волной 5; количество требуемых точек — 1);
      5. Волны с неначатой первой и незавершенной третьей волной — 1<-2-3> (например, Тройная тройка с неначатой волной W и незавершенной волной Y; количество требуемых точек — 2);
      6. Волны с неначатой второй волной и незавершенной четвертой волной — 2<-3-4> (например, Клин с неначатой волной 2 и незавершенной волной 4; количество требуемых точек — 2);
      7. Волны с неначатой третьей волной и незавершенной пятой волной — 3<-4-5> (например, Диагональ с неначатой волной 3 и незавершенной волной 5; количество требуемых точек — 2);
      8. Волны с неначатой первой и незавершенной четвертой волной — 1<-2-3-4> (например, Тройная тройка с неначатой волной W и незавершенной волной XX; количество требуемых точек — 3);
      9. Волны с неначатой второй волной и незавершенной пятой волной — 2<-3-4-5> (например, Импульс с неначатой волной 2 и незавершенной волной 5; количество требуемых точек — 3);
      10. Волны с неначатой первой волной и незавершенной пятой волной —1<-2-3-4-5> (например, Тройной зигзаг с неначатой волной W и незавершенной волной Z; количество требуемых точек — 4);

      Знак «<» после номера волны говорит о том, что она не началась. Знак «>» после номера волны говорит, что она незавершена.

      На рисунке 14 можно выделить следующие волны:

      1. Волну с неначатой первой волной AA<-B-C ;
      2. Волну с неначатой первой W и незавершенной второй X волной — W<-X> ;
      3. Завершенные волны B и C ;

      Неначатые и незавершенные волны

      Рисунок 14. Неначатые и незавершенные волны

      4. Описание структур данных автоматического анализатора волн Эллиотта

      Для написания автоматического анализатора волн Эллиотта нам понадобятся следующие структуры данных:

      4.1. Структура описания анализируемых в программе волн:

      4.2. Класс для хранения параметров конкретной волны:

      4.3. Класс для хранения значений вершин и индексов вершин зигзага:

      4.4. Класс для представления дерева волн:

      4.5. Структура для хранения найденных по зигзагу точек:

      4.6. Класс для хранения параметров уже проанализированного участка графика:

      4.7. Класс для хранения маркировки волн перед нанесением на график:

      5. Описание функций автоматического анализатора волн Эллиотта

      Для написания автоматического анализатора волн Эллиотта нам понадобятся следующие функции:

      Функция поиска экстремумов «Зигзага»:

      Ключевым звеном в автоматическом анализаторе волн Эллиотта является «Зигзаг», по которому и будут строиться волны. При этом расчет «Зигзага» по какому-либо параметру должен быть очень быстрым.

      В нашем анализаторе будет использоваться «Зигзаг», взятый из статьи «Как писать быстрые и неперерисовывающиеся зигзаги».

      Функция Zigzag рассчитывает «Зигзаг» с параметром H на интервале от Start до Finish и записывает найденные индексы вершин и значения вершин, соответственно, в массивы IndexVertex и ValueVertex, адреса которых передаются в данную функцию.

      Функция Zigzag возвращает количество найденных вершин «Зигзага».

      Функция перебора «Зигзага» и сохранения его параметров:

      Как было показано раньше, нам будет нужно находить необходимое количество точек на графике цены для разметки волны. Поэтому потребуется иметь массив вершин «Зигзагов» с разными параметрами, который мы потом и будем перебирать для нахождения этих точек.

      Функция FillZigzagArray рассчитывает «Зигзаги» на интервале графика от Start до Finish со всеми возможными значениями параметра H (пока количество вершин «Зигзага» не станет равно или менее двух), сохраняет информацию о найденных вершинах в объектах класса TZigzag и записывает эти объекты в глобальный массив ZigzagArray, объявление которого выглядит следующим образом:

      Функция поиска на заданном интервале требуемого количества точек на графике цены:

      Функция FindPoints ищет не менее NumPoints точек на графике цены на требуемом диапазоне поиска от IndexStart до IndexFinish с требуемыми значениями первой и последней точек ValueStart и ValueFinish, и сохраняет их (т.е. точки) в структуре Points, ссылка на которую передается в данную функцию.

      Функция FindPoints возвращает true, если требуемое количество точек удалось найти, иначе возвращается false.

      Функция анализа неначатых и незавершенных волн:

      Функция NotStartedAndNotFinishedWaves анализирует все волны третьей группы волн — волны неначатые и незавершенные. Функция анализирует NumWave волну (с волновым уровнем Level) волны с названием ParentWave.Name, которая может принимать форму Subwaves волн (форму Зигзага, Плоскости, Двойного зигзага и (или) др.). Анализируемая волна NumWave будет храниться в узле дерева волн, дочернем узлу Node.

      Так, например, если ParentWave.Name=»Импульс», NumWave=5, Subwaves=»Импульс, Диагональ,» и Level=2, то можно сказать, что функция NotStartedAndNotFinishedWaves будет анализировать пятую волну Импульса, которая имеет волновой уровень 2 и может принять форму Импульса или Диагонали.

      В качестве примера приведем блок-схему алгоритма анализа неначатой и незавершенной волны 1<-2-3> в функции NotStartedAndNotFinishedWaves:

      <img alt=»Рисунок 15. Блок-схема анализа волны с формулой "1"» title=»Рисунок 15. Блок-схема анализа волны с формулой "1"» src=»https://c.mql5.com/2/2/fig15__1.gif» style=»vertical-align:middle;» height=»1746″ width=»750″>
      Рисунок 15. Блок-схема анализа волны с формулой «1<-2-3>»

      При работе функции NotStartedAndNotFinishedWaves вызываются функции NotStartedWaves, NotFinishedWaves и FinishedWaves.

      Функция анализа неначатых волн:

      Функция NotStartedWaves анализирует все волны первой группы волн — волны неначатые. Функция анализирует NumWave волну (с волновым уровнем Level) волны с названием ParentWave.Name, которая может принимать форму Subwaves волн. Анализируемая волна NumWave будет храниться в узле дерева волн, дочернем узлу Node.

      При работе функции NotStartedWaves вызываются функции NotStartedWaves и FinishedWaves.

      Все волны анализируются аналогично блок-схеме на рисунке 15.

      Функция анализа незавершенных волн:

      Функция NotFinishedWaves анализирует все волны второй группы волн — волны незавершенные. Функция анализирует NumWave волну (с волновым уровнем Level) волны с названием ParentWave.Name, которая может принимать форму Subwaves волн. Анализируемая волна NumWave будет храниться в узле дерева волн, дочернем узлу Node.

      При работе функции NotFinishedWaves вызываются функции NotFinishedWaves и FinishedWaves.

      Все волны анализируются аналогично блок-схеме на рисунке 15.

      Функция анализа завершенных (законченных) волн:

      Функция FinishedWaves анализирует все волны четвертой группы волн — волны завершенные. Функция анализирует NumWave волну (с волновым уровнем Level) волны с названием ParentWave.Name, которая может принимать форму Subwaves волн. Анализируемая волна NumWave будет храниться в узле дерева волн, дочернем узлу Node.

      При работе функции FinishedWaves вызывается функция FinishedWaves.

      Все волны анализируются аналогично блок-схеме на рисунке 15.

      Функция поиска волны в структуре данных WaveDescription:

      Функция FindWaveInWaveDescription по названию волны NameWave, передаваемую в качестве параметра, ищет ее в массиве структур WaveDescription и возвращает номер индекса, соответствующего данной волне.

      Массив структур WaveDescription имеет следующий вид:

      Функция FindWaveInWaveDescription применяется в функциях анализа волн NotStartedAndNotFinishedWaves, NotStartedWaves, NotFinishedWaves и FinishedWaves.

      Функция, проверяющая, был ли уже проанализирован данный участок графика:

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

      Функция Already ищет в глобальном массиве NodeInfoArray, в котором хранятся объекты класса TNodeInfo, участок графика, соответствующий волне NumWave волны с именем Wave.Name, имеющую форму Subwaves волн, и записывает в Node адрес узла уже размеченного участка графика. Если данного участка нет, то создается и заполняется новый объект класса TNodeInfo и записывается в массив NodeInfoArray.

      Функция возвращает true, если участок графика уже анализировался, иначе возвращается false.

      Массив NodeInfoArray объявляется следующим образом:

      5.10. Функции проверки волны на правила

      Включают в себя функцию VertexAAboveB, WaveAMoreWaveB и собственно WaveRules, из которой и вызываются первые две функции. При проверке следует помнить, что волны бывают неначатые и (или) незавершенные, и, например, у волны с формулой «1<-2-3>» невозможно определить, зашла ли четвертая волна за территорию первой или нет, т.к. четвертой волны еще нет.

      Функция проверки волны на правила:

      Функция WaveRules возвращает true, если волна с названием Wave.Name «правильная», иначе возвращается false. При своей работе функция WaveRules вызывает функции VertexAAboveVertexB и WaveAMoreWaveB.

      Функция проверки превышения одной вершины другой вершины:

      Функция VertexAAboveVertexB возвращает число >=0, если вершина волны A превысила вершину волны B, иначе возвращается -1. Если InternalPoints=true, то учитываются внутренние точки волн (максимальные и (или) минимальные значения волн).

      Функция проверки превышения длины одной волны длины другой волны:

      Функция WaveAMoreWaveB возвращает число >=0, если волна A больше волны B, иначе возвращается -1.

      11. Функции очистки памяти

      Функция очистки дерева волн с верхним узлом Node:

      Функция очистки массива ClearNodeInfoArray:

      Функция очистки массива ZigzagArray:

      5.12. Функции обхода дерева волн и выдачи результатов анализа на график

      После завершения автоматического анализа волн Эллиотта у нас имеется дерево волн.

      Его пример можно представить как на рисунке ниже:

      Рисунок 16. Пример дерева волн

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

      Можно выделить два типа узлов дерева.

      Первый тип — узлы с названием волн («Импульс», «Зигзаг» и т.п.). Второй тип — узлы с номерами волн («1», «1<» и т.п.). Вся информация о параметрах волны находится в первом типе узлов. Поэтому при посещении данных узлов мы будем извлекать и записывать информацию о волне, чтобы затем отобразить ее на графике.

      Для простоты мы будем обходить дерево, посещая только первые варианты волн.

      Пример обхода приведен на рисунке 17 и выделен красной линией.

      Рисунок 17. Пример обхода дерева волн

      Функция обхода дерева волн:

      Функция FillLabelArray обходит дерево волн с корнем Node, посещая только первые варианты волн в дереве, и заполняет глобальный массив LabelArray, в каждом индексе которого будет храниться ссылка на массив вершин (массив объектов класса TLabel), имеющих данный индекс на графике.

      Массив LabelArray определен следующим образом:

      Функция вывода результатов анализа на график:

      Функция CreateLabels создает графические объекты «Текст», соответствующие меткам волн на графике. Метки волн создаются на основе массива LabelArray.

      Функция обновления (корректировки) вершин волн на графике:

      Функция CorrectLabel корректирует метки волн на графике при его прокручивании и (или) его сужении.

      6. Реализация функций автоматической разметки волн Эллиотта

      6.1. Функция Zigzag:

      6.2. Функция FillZigzagArray:

      6.3. Функция FindPoints:

      6.4. Функция NotStartedAndNotFinishedWaves:

      6.5. Функция NotStartedWaves:

      6.6. Функция NotFinishedWaves:

      6.7. Функция FinishedWaves:

      6.8. Функция FindWaveInWaveDescription:

      6.9. Функция Already:

      6.10. Функция WaveRules:

      6.11. Функция VertexAAboveVertexB:

      6.12. Функция WaveAMoreWaveB:

      6.13. Функция ClearTree:

      6.14. Функция ClearNodeInfoArray:

      6.15. Функция ClearZigzagArray:

      6.16. Функция FillLabelArray:

      6.17. Функция CreateLabels:

      6.18. Функция CorrectLabel:

      7. Функции инициализации, деинициализации и обработки событий

      В функции OnInit происходит создание кнопок управления автоматического анализатора волн Эллиотта.

      1. «Начать анализ» — происходит автоматический анализ волн,
      2. «Показать результаты» — происходит вывод меток волн на график,
      3. «Очистить график» — происходит очистка памяти и удаление меток волн с графика,
      4. «Скорректировать метки» — происходит корректировка меток волн на графике.

      Обработка нажатия на эти кнопки происходит в функции обработки событий OnChartEvent.

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

      На этом мы рассмотрели все функции автоматического анализатора волн Эллиотта.

      8. Пути совершенствования программы

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

      1. Несовершенная система проверки правил разметки. Так например, при проверке на правила не учитываются соотношения Фибоначчи между волнами, как временные, так и ценовые.
      2. Наличие неразмеченных областей на графике (пробелов в разметке). Это значит, что по найденным точкам на заданном временном интервале невозможно построить правильную волну. Выходом из данной ситуации является увеличение количества точек для определения какой-либо волны. Например, для нахождения импульса искать не 6, а 8 точек или более.
      3. По результатам разметки не выводится какая-либо дополнительная информация, например, автоматически не строятся каналы, не вычисляются цели и др.
      4. Реализация работы с деревом волн в статье не предусмотрена (нельзя выбрать конкретный вариант разметки), поэтому на график выводится только один из множества вариантов разметки (самый первый вариант разметки).
      5. Вне зависимости от того, что на график выводится только один вариант волн, все остальные варианты находятся в памяти и занимают ее.
      6. Программа ориентирована на разметку графиков от месячных до дневных, т.к. наблюдается очень медленная работа при большом количестве баров (могут уйти часы для разметки часового графика). Пример разметки месячного графика EURUSD приведен на рисунке 18.

      Разметка волн автоматическим анализатором на MQL5

      Рисунок 18. Разметка волн автоматическим анализатором на MQL5

      Заключение

      В данной статье был рассмотрен алгоритм автоматического анализа волн Эллиотта. Данный алгоритм был реализован на языке MQL5.

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

      Источник https://stolf.today/volny-elliotta.html

      Источник https://www.mql5.com/ru/articles/260

      Источник

      Источник