Разработка системы волнового анализа Эллиотта
Теория волн Эллиотта — одна из самых сложных для алгоритмизации методологий технического анализа. Рынок движется в 5-волновых импульсах и 3-волновых коррекциях, вложенных друг в друга на разных фреймах. Автоматическое распознавание волновой структуры требует комбинации алгоритмического анализа и статистических методов.
Базовая теория и правила
Импульс (5 волн, обозначаются 1-2-3-4-5):
- Волна 2 не может ретрейсировать более 100% волны 1
- Волна 3 не может быть наименьшей из волн 1, 3, 5
- Волна 4 не может перекрывать ценовой диапазон волны 1
Коррекция (3 волны, обозначаются A-B-C):
- Простая: Zigzag (5-3-5), Flat (3-3-5), Triangle (3-3-3-3-3)
- Комплексная: Double/Triple Three
Соотношения Фибоначчи для волн:
- Волна 3 обычно 161.8% от волны 1
- Волна 5 часто равна волне 1 или 61.8% от волн 1–3
- Волна 2 корректирует 38.2%–61.8% волны 1
- Волна 4 корректирует 23.6%–38.2% волны 3
Алгоритм разметки волн
Этап 1: Поиск базовых pivot points
Используем ZigZag индикатор с настраиваемым порогом (например, 5% минимальное движение). Каждый пик и впадина ZigZag — потенциальная граница волны.
Этап 2: Рекурсивный поиск волновых структур
def find_impulse(pivots, start_idx):
candidates = []
# Перебираем все возможные 5-волновые структуры
for i in range(start_idx, len(pivots) - 8):
wave1 = (pivots[i], pivots[i+1])
wave2 = (pivots[i+1], pivots[i+2])
wave3 = (pivots[i+2], pivots[i+3])
wave4 = (pivots[i+3], pivots[i+4])
wave5 = (pivots[i+4], pivots[i+5])
if validate_impulse_rules(wave1, wave2, wave3, wave4, wave5):
score = calculate_fibonacci_score(wave1, wave2, wave3, wave4, wave5)
candidates.append((i, score))
return sorted(candidates, key=lambda x: x[1], reverse=True)
Этап 3: Scoring и выбор наилучшей разметки
Для каждой потенциальной разметки рассчитывается score на основе:
- Соответствия правилам Эллиотта (обязательные условия)
- Близости соотношений волн к числам Фибоначчи
- Канальный анализ (волны 1-3-5 вдоль одной линии)
- Альтернация волн 2 и 4 (должны чередоваться по типу коррекции)
Этап 4: Прогноз текущей позиции
После разметки завершённых волн система определяет в какой волне находится рынок сейчас и проецирует цели для следующей волны на основе Fibonacci extensions.
Мультиволновой анализ
Волны Эллиотта фрактальны: каждая волна состоит из волн меньшего масштаба. Система работает одновременно на нескольких таймфреймах:
- Grand Supercycle (месячный/недельный) — долгосрочная картина
- Primary/Intermediate (дневной/4h) — среднесрочная
- Minor/Minute (1h/15m) — краткосрочная
Разметка старшего таймфрейма задаёт контекст для младшего.
Известные ограничения и как мы с ними работаем
Волновой анализ субъективен — два аналитика могут разметить один и тот же график по-разному. Алгоритм решает это через:
Множественные сценарии: система генерирует top-3 наиболее вероятных разметки с вероятностями. Не один вариант, а несколько альтернатив.
Invalidation levels: для каждой разметки определяется уровень, при пробое которого разметка становится недействительной и пересматривается.
Статистическая валидация: backtesting показывает historical accuracy алгоритма — какой процент прогнозов подтвердился.
Практические торговые сигналы
Система генерирует торговые сигналы в конкретных ситуациях:
- Конец волны 4: вход в направлении тренда перед волной 5
- Конец волны 5: потенциальный разворот, начало A-B-C коррекции
- Конец волны C: завершение коррекции, возврат к тренду
Каждый сигнал включает entry zone, stop-loss (invalidation level), target (Fibonacci extension для следующей волны) и вероятность сценария.
Технический стек
Backend: Python, библиотека elliott-wave-trading или собственная реализация. pandas для работы с OHLCV. scipy для оптимизационных задач.
Хранение: PostgreSQL с таблицами wave_structures (разметка волн), wave_projections (цели), wave_alerts.
Визуализация: TradingView Lightweight Charts + SVG оверлеи для отрисовки волновых меток и каналов. Каждая волна подписывается (1, 2, 3... или A, B, C), draw каналы для волн импульса.
Алерты: Telegram уведомления при завершении волны и появлении торгового сигнала с деталями: «BTC/USDT 4h — завершение волны 4, цель волны 5: $105,000, стоп: $92,000, вероятность: 68%».
Разрабатываем полноценную систему с автоматической разметкой, множественными сценариями, invalidation levels и backtesting модулем для оценки точности алгоритма.







