OTF (John Ehlers Optimal Tracking Filter) — Оптимальный фильтр отслеживания Элерса

John Ehlers Optimal Tracking Filter (OTF) — адаптивный цифровой фильтр для отслеживания тренда и сглаживания рыночного шума с минимальной фазовой задержки. Разработан Джоном Эллерсом (John Ehlers) на основе принципов цифровой обработки сигналов — оптимального фильтра Калмана (R.E. Kalman) и оптимизации отклика фильтра под характеристики сигнала.
Основная идея: фильтр автоматически подстраивает свою «полосу пропускания» (или эквивалентный временной период) в зависимости от локальной частотной структуры цены, обеспечивая быстрое реагирование на изменения тренда при одновременном снижении шума в периодах спокойного движения.
Немного истории, откуда все началось
Доктор. РЭ Калман представил свою концепцию оптимальной оценки в 1960 году. С того времени его техника оказалась мощным и практичным инструментом. Этот подход особенно хорошо подходит для оптимизации производительности современных наземных и космических навигационных систем. Многие трейдеры, не участвующие непосредственно в системном анализе, слышали о фильтрации Калмана и выразили заинтересованность в том, чтобы узнать о ней больше для рыночных приложений. Хотя были предприняты попытки дать простые, интуитивные объяснения, ни одна из них не увенчалась полным успехом. Почти без исключения описания погрязли в жаргоне и обозначениях пространства состояний “cult”.
Удивительно, но, несмотря на малопонятную на вид математику (самую непроницаемую из которых можно найти в оригинальной статье доктора Калмана), фильтрация Калмана — понятие довольно прямое и простое. В духе прагматичности мы не будем иметь дело с полномасштабными матричными уравнениями в этом описании и будем менее строгими в применении к торговле. Строгое применение требует знания вероятностных распределений статистики. Тем не менее, мы заканчиваем практически полезными результатами. Мы отойдем от классического подхода, работая в обратном направлении от экспоненциальных скользящих средних. В этом процессе мы вводим способ создания скользящего среднего почти с нулевой задержкой. Оттуда мы будем использовать концепцию индекса отслеживания, который оптимизирует отслеживание фильтров для заданной неопределенности в движении цен и неопределенности в нашей способности его измерять.
Расчёт индикатора John Ehlers Optimal Tracking Filter
Обозначения: цена (входной сигнал) — Price_t (обычно Close).
Параметры и переменные:
— период сглаживания (Length) или аналогичный период/частота;
— переменная alfa (α) — сглаживающий коэффициент;
— внутренние состояния фильтра — Filt1, Filt2 и т.д.
Ниже — одна из часто приводимых реализаций OTF.
1. Вычислить скорость изменения цены (delta) и нормализованную частоту (если требуется). В классической формуле Эллерса используется параметр периодности (Period) и вычисление коэффициента alfa:
— Обычно задают параметр Period (например, 10 — 20). Частота или коэффициент задаётся как:
α = (Cosine term or derived) — в упрощённой форме используют
α = exp(-1.414 * sqrt(2) * π / Period)
Но у разных реализаций формула α может отличаться. Часто используется оптимизированный вариант:
β = cos(2π / Period)
α = (β + 1) / 2 (альтернативный подход для цифровых фильтров)
(Важно: точная форма α зависит от выбранной дискретизации и варианта реализации OTF.)
2. Инициализация внутренних состояний:
— Filt1_0 = Price_0
— Filt2_0 = Price_0
(или равные первому доступному значению цены)
3. Рекурсивные формулы фильтра (одна из типовых реализаций):
— Filt1_t = (1 — α) * Price_t + α * Filt1_{t-1}
— Filt2_t = (1 — α) * Filt1_t + α * Filt2_{t-1}
Это даёт двухступенчатое сглаживание, похожее на двумерный low-pass с меньшей задержкой.
4. Оптимизация отклика (адаптация α) — ключевая часть OTF:
— Вычисляют показатель изменения/энергии сигнала, например:
Delta = |Price_t — Price_{t-1}|
Energy = EMA(Delta, k) или другое сглаженное измерение волатильности
— Затем α адаптируют обратно пропорционально Energy (чтобы при большой изменчивости α увеличивался — фильтр быстрее реагирует):
α_t = f(Energy_t), где f — нормирующая функция, например:
α_t = min(α_max, max(α_min, C / (Energy_t + ε)))
или
α_t = α_base + K * Energy_t
Конкретные коэффициенты (α_min, α_max, C, K) подбираются эмпирически.
5. Финальный выход (OTF):
— OTF_t = a linear combination of internal states, часто берут Filt2_t как итоговый сглаженный сигнал, либо:
OTF_t = w1 * Filt1_t + w2 * Filt2_t
где веса w1,w2 обычно задают 0.5 и 0.5 или другие значения для дополнительной коррекции фазы.
6. Альтернативная (чаще встречаемая в реализации Эллерса) форма
Ehlers в ряде публикаций представляет OTF как модифицированный IIR-фильтр с коэффициентами, рассчитанными через желаемую частоту среза fc (или Period), и с автоматической подстройкой фазового отклика. Конкретный компактный набор формул (пример):
— RC = 1 / (2 * π * fc)
— dt = 1 (шаг дискретизации)
— α = dt / (RC + dt)
Затем:
— s1_t = α * Price_t + (1 — α) * s1_{t-1}
— s2_t = α * s1_t + (1 — α) * s2_{t-1}
— OTF_t = 2 * s1_t — s2_t
Здесь комбинация 2*s1 — s2 уменьшает фазу и улучшает реакцию.
Замечания и рекомендации:
— Существует несколько вариантов реализации OTF у Эллерса; точные формулы могут различаться в зависимости от источника и желаемых свойств фильтра (степень адаптации, способ оценки локальной частоты).
— Для практической реализации: начните с двухступенчатого IIR с одним адаптивным α, где α зависит от локальной волатильности (EMA абсолютных изменений). Подберите границы α_min/α_max и период усреднения волатильности эмпирически.
— Тестируйте на исторических данных, сравнивайте с эталонными реализациями (если доступны) и проверяйте задержку и подавление шума.
Пример в Pine Script®
//@version=2
study("Ehlers Optimal Tracking Filter",shorttitle="OTF_SH",overlay=true)
p = hl2
value1 = 0.2*(p-p[1]) + 0.8*nz(value1[1])
value2 = 0.1*(high-low)+0.8*nz(value2[1])
lambda = abs(value1/value2)
alpha = (-lambda*lambda + sqrt(lambda*lambda*lambda*lambda + 16*lambda*lambda))/8
value3 = alpha*p + (1-alpha)*nz(value3[1])
plot (value3,linewidth=2)
Как использовать John Ehlers Optimal Tracking Filter

Применение: генерация сглаженного ценового сигнала для определения тренда, построение входов/выходов, фильтрация сигналов других индикаторов. Часто сравнивается с другими адаптивными фильтрами Эллерса (например, MESA, SuperSmoother).
Выявление трендов в реальном времени — фильтр помогает обнаруживать начало трендов, что позволяет принимать быстрые действия для стратегий входа или выхода.
Снижение шума в данных цены — фильтр фильтрует случайные колебания, изолируя основной тренд.
Можно использовать все сигналы как с обычной скользящей средней.
Характеристики: низкая фазовая задержка по сравнению с традиционными скользящими средними при схожем уровне сглаживания; чувствительность контролируется параметрами, позволяющими балансировать между сглаживанием и скоростью отклика.


















