Student Wyckoff · Elliott Wave

Блог и практика

Данные и код для волн Эллиотта: MT4, MT5, Pine и Python

Три учебных примера: завершённые OHLC, задержка подтверждения pivot и проверка шести ценовых опор.

Редакция Student Wyckoff

Опубликовано: (UTC+3)

Русский · English · Deutsch · Español · Français · Italiano · 繁體中文 · 日本語 · 한국어

Перед программированием разметки определите вход, порядок баров и момент доступности результата. Код ниже иллюстрирует отдельные операции, а не полноценное распознавание волн. Он не устанавливает связь с Pro или Light и не отправляет заявки.

MT4, MT5 и MQL5: сначала контракт OHLC

В MQL4/MQL5 CopyRates с start_pos=0 включает текущий незавершённый бар. Учебный вызов ниже берёт три D1-бара с позиции 1. Результат должен вернуть ровно 3: ошибка или ещё загружаемая история требуют остановки и повторной проверки. ArraySetAsSeries(false) позволяет читать старый бар первым; физически CopyRates размещает старые данные в начале независимо от признака серии.

Сохраните символ, брокерское время, торговую сессию, настройки корректировок, OHLC и единицы объёма. Tick volume и реальный торговый объём не взаимозаменяемы. Получение MqlRates не распознаёт волну и не доказывает совместимость CSV с Pro. Фактический формат импорта сверяют отдельно; это учебный скрипт, а не подтверждение запуска терминала автором.

void OnStart() {
  MqlRates rates[];
  ArraySetAsSeries(rates, false);
  int n = CopyRates(_Symbol, PERIOD_D1, 1, 3, rates);
  if(n != 3) { Print("Need 3 completed bars; received ", n); return; }
  for(int i=0; i<n; i++)
    Print(rates[i].time, " ", rates[i].open, " ", rates[i].high,
          " ", rates[i].low, " ", rates[i].close);
}

Pine Script: где pivot был и когда стал известен

Здесь ta.pivothigh(high,2,2) требует два бара справа. Если вершина находится на баре 10, она становится известна только на закрытии 12. offset=-2 переносит рисунок к 10, но не переносит знание в прошлое. Подпись создаётся на баре подтверждения и сохраняет оба номера.

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

//@version=6
indicator("Confirmed pivot record", overlay=true, max_labels_count=100)
p = ta.pivothigh(high, 2, 2)
confirmed = barstate.isconfirmed and not na(p)
plot(confirmed ? p : na, style=plot.style_cross, offset=-2)
if confirmed
    label.new(bar_index, high, str.format("pivot {0}; available {1}", bar_index-2, bar_index))
    alert("Confirmed high pivot", alert.freq_once_per_bar_close)

Python: CSV и ограниченная проверка цен

csv.DictReader читает поля как строки; Decimal получает исходную строку без промежуточного float. Для файлов используйте open(path,newline="",encoding="utf-8"). Пример использует вымышленные шесть опор обычного восходящего импульса и проверяет только часть ценовых ограничений.

Для 100→120→110→145→125→150 длины движущих волн равны 20,35,25; волна 3 не самая короткая, четвёртая остаётся выше 120. Замена 125 на 119 нарушает неперекрытие. True не устанавливает подволны, степень, корректность выбора экстремумов или прибыльность; диагонали требуют другого набора правил.

Проверка f>d дополнительно ограничивает этот пример неусечённой пятой волной. Усечённая пятая может не обновить вершину третьей, поэтому отказ функции сам по себе не исключает иной допустимый импульс.

import csv, io
from decimal import Decimal as D

csv_text = "point,price\n0,100\n1,120\n2,110\n3,145\n4,125\n5,150\n"
with io.StringIO(csv_text, newline="") as stream:
    p = [D(row["price"]) for row in csv.DictReader(stream)]

def upward_price_subset(p):
    if len(p) != 6: return False
    a,b,c,d,e,f = p
    l1,l3,l5 = b-a,d-c,f-e
    return (b>a and a<c<b and d>b and b<e<d and f>d
            and l3 >= min(l1,l5))

assert upward_price_subset(p)
assert not upward_price_subset(p[:4]+[D("119"),p[5]])
print(upward_price_subset(p))  # True: price subset only

Индикаторы MT4 и MT5: сначала контракт буферов

В MQL4 iCustom возвращает значение выбранного буфера по mode и shift. В MQL5 iCustom возвращает handle, а значения получают CopyBuffer. Эти интерфейсы не доказывают, что неназванный индикатор распознаёт волны Эллиотта. Сохраните файл и версию, входные параметры, значение буфера, правило пропусков и границу завершённых баров.

Для обоих запусков используйте один брокерский ряд и сохранённые свечи. Экстремум ZigZag, подпись волны и торговый сигнал требуют разных проверок. Разберите задержку и пересмотр истории; неизвестное остаётся неизвестным. Предыдущий пример CopyRates только получает данные. Никакая конкретная бесплатная сборка, интеграция MT4/MT5 с Pro или автоматическая заявка этим примером не подтверждается.

ИнтерфейсРезультат вызова
MT4 / iCustomdouble: mode + shift
MT5 / iCustomhandle → CopyBuffer
P4=119 / P1=120Нет. Нарушено неперекрытие; остальные структурные проверки выполняются отдельно.

TradingView: сформированный паттерн, настройки и алерты

Официальная документация собственного индикатора Elliott Waves описывает поиск импульса и зигзага на последних 600 барах. Два уровня меток показывают вложенность, не автоматически установленную историческую степень Эллиотта. Алгоритм выбирает подходящие опоры крупных движений, не все возможные разметки. Сведения проверены 25 октября 2026 года; установленный тест в аккаунте пользователя не заявляется.

Перед изменением сохраните символ с площадкой, интервал, шкалу, последний закрытый бар, все параметры и снимок. В диалоге алерта выберите индикатор как условие, затем один из трёх документированных типов события. Сообщение о сформированной части не подтверждает полный паттерн Эллиотта. Доступность зависит от аккаунта; бесплатный доступ в определённом тарифе здесь не обещается.

Настройка или событиеСмысл и воспроизводимая проверка
Invert patternМеняет направление поиска: нисходящий импульс и восходящий зигзаг. Сравнивайте на одном сохранённом окне данных.
In progressВключает незаконченные структуры. Отключите для сравнения только распознанных завершённых паттернов; последующие данные могут пересматривать и их.
Length type: Absolute / PercentAbsolute измеряет разность цен, Percent — относительное изменение. Зафиксируйте выбор: порядок длин и проверка правил могут измениться.
Show projectionsПоказывает возможные следующие волны по соотношениям Фибоначчи в режиме In progress. Проекция ещё не является наблюдавшейся ценой.
Pivots / последняя волнаОпоры привязываются к подходящим разворотам, текущая последняя волна — к локальному максимуму или минимуму. Записывайте время доступности и переносы каждой опоры.
New patternНовый паттерн либо пересмотр с одновременным переносом не менее двух точек; изменение самой первой точки в этот подсчёт не входит.
New potential waveДобавлена новая формирующаяся волна либо последняя сформированная волна перенесена и снова формируется.
Wave formedРанее формировавшаяся волна сформирована. Сохраните время, выбранное событие и состояние; это не обещание доходности.
ПересчётНовые данные уточняют прежние паттерны; изменение любого параметра запускает полный пересчёт. Сравнивайте результаты на одинаковом сохранённом входе.

Источники и границы