🌐 Поиск «точек вращения» на ценовом графике
Контекст: цена буквально вращается вокруг центра, часто — зеркально. Это указывает на локальную симметрию колебаний, что характерно для циклических и сигнальных моделей анализа.
Ниже — обзор существующих концепций, рабочие методы поиска центров вращения, готовый код и рекомендации по применению.
—
🔍 Существующие концепты, близкие к «точкам вращения»
Эти инструменты описывают один и тот же феномен: цена как сумма колебаний с разной частотой/амплитудой, формирующих локальные центры и зеркальную симметрию.
| Концепт | Описание | Источники |
| Center of Gravity (COG) (Дж. Элерс) | Нулелаговый осциллятор, отслеживающий «центр тяжести» окна цен. Хорошо выделяет поворотные точки. | traders.com, cTrader, MQL5 |
| Hilbert Transform / Sinewave (Элерс) | Анализ мгновенной фазы аналитического сигнала. Нулевые пересечения фазы — естественные центры волн. | motivewave.com, ProRealCode |
| Hurst Cycles: FLD (Future Line of Demarcation) | Цена, сдвинутая на полпериода вперёд. Пересечения FLD отражают симметрию волн и кратные циклы. | prescientrading.com, Hurst Cycles Notes |
| Detrended Price Oscillator (DPO) | Удаление тренда сдвинутой SMA. Остаточные колебания центрированы вокруг нуля — легко видеть симметрию. | StockCharts — ChartSchool |
| Anchored VWAP (AVWAP) | Объёмно-взвешенная средняя, закреплённая на событии. Часто выступает как «магнит» для цены. | alphatrends.net, Б. Шеннон |
| Auction Market / Market Profile (POC) | Point of Control — цена с максимальным объёмом/временем. Окружена «ротацией» и балансом. | FTMO, CME Group |
| Median Line (Pitchfork Эндрюса) | Медианная линия канала. Цена статистически стремится к ней и колеблется вокруг. | Investopedia |
✅ Все эти подходы — разные проекции одного процесса: динамика цены как сумма циклов, где «центры вращения» возникают на пересечении фаз и амплитуд.
—
🔧 Как искать «точки вращения» на своих данных?
A) Зеркальная корреляция вокруг кандидата t₀
Идея: Если цена зеркально симметрична относительно точки — отражённая правая часть должна коррелировать с левой.
Алгоритм:
- Берём окно
k слева и справа от t₀.
- Отражаем правую часть по вертикали.
- Считаем корреляцию:
corr(Left, Reverse(Right)).
- Высокая корреляция → кандидат в «центры вращения».
✅ Подходит, если вы ищете визуальную зеркальность.
—
B) Фаза по Хилберту (Hilbert Transform)
Идея: Аналитический сигнал даёт мгновенную фазу. Центр колебания — при фазе ≈ 0 или π и смене знака.
Преимущества:
- Работает при меняющемся доминирующем цикле.
- Устойчив к шуму.
—
C) Скользящий «центр тяжести» (COG)
Формула Элерса:
COG = - Σ(n × Priceₙ) / Σ(Priceₙ)
где n — веса от 0 до L-1 (0 — текущая свеча).
Как использовать:
- Нулевые пересечения COG → центры разворотов.
- Экстремумы COG → возможные повороты.
✅ Готовые индикаторы: MT4/MT5, cTrader, MQL5.
—
D) Опорная средняя как «ось вращения»
Подходы:
- Anchored VWAP: закреплён на событии (новость, гэп, пивот). Цена вращается вокруг неё.
- Pitchfork Эндрюса: медианная линия как «магнит».
Критерий «ротации»:
- Частая смена знака
(price - AVWAP)
- Цена удерживается в пределах ±σ от средней
📚 Б. Шеннон, The Art and Science of Technical Analysis — подробно про AVWAP.
—
💻 Готовый код (можно вставлять напрямую)
1) Python: Поиск центров вращения через зеркальную корреляцию
import numpy as np
import pandas as pd
def mirror_rotation_centers(close: pd.Series, window=20, min_corr=0.70):
"""
Ищет точки с зеркальной симметрией на графике.
:param close: серия цен (закрытия)
:param window: размер окна слева/справа
:param min_corr: порог корреляции
:return: массив индексов центров, массив корреляций
"""
x = pd.Series(close).astype(float).values
n = len(x)
corr_vals = np.full(n, np.nan)
for i in range(window, n - window):
left = x[i - window:i]
right = x[i:i + window]
# Стандартизуем
l = (left - left.mean()) / (left.std(ddof=0) + 1e-12)
r = (right[::-1] - right.mean()) / (right.std(ddof=0) + 1e-12) # отражаем
# Корреляция Пирсона
corr_vals[i] = np.mean(l * r)
# Находим локальные максимумы с высокой корреляцией
centers = []
for i in range(window + 1, n - window - 1):
if (np.isfinite(corr_vals[i]) and
corr_vals[i] >= min_corr and
corr_vals[i] > corr_vals[i-1] and
corr_vals[i] > corr_vals[i+1]):
centers.append(i)
return np.array(centers), corr_vals
Интерпретация: Высокая корреляция = высокая зеркальность → потенциальный центр вращения.
—
2) Python: Осциллятор COG (Элерс)
def ehlers_cog(close: pd.Series, length=10) -> pd.Series:
"""
Center of Gravity (COG) по Элерсу.
:param close: цена закрытия
:param length: длина окна
:return: серия COG
"""
p = pd.Series(close).astype(float)
weights = np.arange(length - 1, -1, -1) # [L-1, L-2, ..., 0]
numerator = p.rolling(length).apply(lambda a: np.dot(weights, a), raw=True)
denominator = p.rolling(length).sum()
return -numerator / (denominator + 1e-12)
⚙️ Используйте нулевые пересечения и экстремумы COG как сигналы.
—
3) Pine Script v5: Anchored VWAP + счётчик ротаций
//@version=5
indicator("Anchored VWAP + Rotation Count", overlay=true)
anchor = input.time(timestamp("2024-01-01T00:00:00"), "Anchor Time")
var float sumTPV = 0.0
var float sumV = 0.0
var int startBar = na
if na(startBar) and time >= anchor
startBar := bar_index
float avwap = na
if not na(startBar) and bar_index >= startBar
tp = (high + low + close) / 3.0
sumTPV += tp * volume
sumV += volume
avwap := sumTPV / sumV
plot(avwap, "AVWAP", color=color.orange, linewidth=2)
// Счётчик смены сторон (ротация)
side = close > avwap ? 1 : -1
rotation_count = ta.barssince(side != side[1])
plot(rotation_count, "Rotation Count", color=color.blue, location=location.bottom)
📌 Совет: Добавьте полосы ±1σ (стандартное отклонение от AVWAP) для оценки диапазона вращения.
🔗 TradingView, pineify.app — готовые скрипты.
—
🔎 Куда копать дальше?
Если хотите глубже в «сумму волн» и динамические циклы:
Hilbert–Huang Transform (HHT) / EMD
Раскладывает ряд на Intrinsic Mode Functions (IMF) с переменной частотой/амплитудой.
→ Идеально для нестационарных данных.
🔗 ResearchGate
Практика FLD и циклов Хёрста
Работа с полупериодными сдвигами, поиск синхронизации впадин.
🔗 prescientrading.com
—
⚠️ Важные предупреждения
Нет подглядывания в будущее!
Не используйте данные справа от t₀ при принятии решений.
Фиксированные окна
Тестируйте на out-of-sample данных. Адаптивные окна могут переобучаться.
Сильный тренд ломает симметрию
Добавьте фильтры:
- ADX > 25 → тренд, отключаем поиск вращения
- Наклон AVWAP / скользящей средней
- Волатильность (ATR)
Ложные срабатывания
Симметрия может быть случайной. Подкрепляйте другими сигналами (объём, импульс, структура).
—
📌 Вывод: Явление «вращения цены вокруг центра» — не миф, а проявление циклической природы рынка.
Существующие инструменты (COG, Hilbert, AVWAP, FLD) — это разные грани одного и того же.
Комбинируйте — и ищите симметрию там, где другие видят хаос.