Индикатор Fractal Adaptive Moving Average (FRAMA) — фрактальная адаптивная скользящая средняя

FRAMA
Fractal Adaptive Moving Average (FRAMA) — адаптивная скользящая средняя, предложенная Джоном Элерсом (John Ehlers) в 1994 году и представлен в журнале Technical Analysis of Stocks & Commodities в октябре 2000 года. Основная идея FRAMA — автоматически изменять «период усреднения» в зависимости от текущей структуры цены, используя понятие фрактальной размерности. Когда рынок «шумный» (много краткосрочных колебаний), FRAMA становится более гладкой (больше сглаживания). Когда рынок трендовый (цены движутся устойчиво), FRAMA быстрее реагирует (меньше сглаживания). Это позволяет получить компромисс между чувствительностью к тренду и подавлением рыночного шума. FRAMA — это усовершенствованный вид экспоненциальной скользящей средней (EMA), которая автоматически регулирует свою чувствительность к изменениям цены на основе фрактальной размерности рынка.

• В трендовых (менее фрактальных) рыночных условиях FRAMA быстро реагирует на изменения цены, подобно короткой EMA.
• В боковых (более фрактальных) рыночных условиях FRAMA реагирует медленнее, подобно длинной EMA.

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

Ключевые особенности:
• Адаптивность: коэффициент сглаживания меняется в зависимости от локальной фрактальной размерности цены.
• Реакция: при тренде FRAMA приближается к более коротким скользящим средним, при боковике — к более длинным.
• Сглаживание: использует экспоненциальную форму сглаживания с адаптивным коэффициентом.
• Эффективность на разных рынках. FRAMA одинаково полезен как на высоковолатильных криптовалютах, так и на стабильных валютах или акциях.
• Уменьшенное запаздывание сигналов. Благодаря своему уникальному механизму FRAMA выдает сигналы с минимальным лагом, что делает его идеальным для активной торговли.
• Легкость в восприятии. Несмотря на сложную внутреннюю структуру, внешне FRAMA похож на обычную скользящую среднюю, легко читаемую и понятную любому трейдеру.

Применение в торговле:
— Определение направления тренда: цена выше FRAMA → восходящий тренд; ниже → нисходящий.
— Фильтр для входов: входить в сделки только в направлении сигнала FRAMA (например, покупать только если цена и другие индикаторы подтверждают выше FRAMA).
— Выходы / стопы: переносить стоп-лосс за FRAMA или закрывать позицию при пересечении цены и FRAMA.
— Комбинация с другими индикаторами (MACD, RSI, ADX) для уменьшения ложных сигналов.


Расчёт индикатора Fractal Adaptive Moving Average (FRAMA)

Ниже приведён один из стандартных вариантов расчёта FRAMA (версия по Ehlers). Пусть у нас есть последовательность цен (обычно берут цену закрытия): Pt. Основные шаги:

1) Выбор окна N — количество баров для расчёта фрактальной размерности (обычно N = 16).

2) Для каждого времени t считаем расстояния (диапазоны) на трёх подинтервалах:
— Полный интервал длины N: для i от t-N+1 до t вычисляем суммарный абсолютный «ход»:
PriceRangeFull

(можно также использовать максимум-минимум, но классический Ehlers использует сумму абсолютных изменений).

• Левый подинтервал длины N/2: для i от t-N+1 до t-N/2:
PriceRangeLeft

• Правый подинтервал длины N/2: для i от t-N/2+1 до t:
PriceRangeRight

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

3) Оценка фрактальной размерности D:
Ehlers предлагает считать:
Оценка-фрактальной-размерности

Если знаменатель или аргумент логарифма невалиден (нулевые или отрицательные суммы), нужно предусмотреть защиту (например, ограничивать снизу очень маленькими положительными числам и/или использовать проверку деления).

4) Перевод D в коэффициент сглаживания (alpha):
Ehlers использует:
α = exp(-4.6*(D-1)\)

Затем нормализует alpha, ограничивая в диапазоне [αmin, αmax], где

αmin = exp(-4.6*(Dmax — 1))

и обычно выбирают Dmax=2, Dmin=1, или просто ограничивают alpha значениями, соответствующими минимуму и максимуму периодов (например, αmin=2/(N+1) и αmax = 1). В практических реализациях часто применяют:

α = max(αmin, min(α, αmax))

Типичные границы: αmin = 0.01 — αmax = 1.

Различные источники предлагают немного разные формулы нормализации. Частая практическая формула для получения alpha из D:
α = exp(-4.6*(D — 1))

и затем ограничивать:
и-затем-ограничивать

5) Расчёт FRAMA (экспоненциальное сглаживание с адаптивным alpha):
Используем рекуррентную формулу (EMA-тип):

FRAMAt = αt * Pt + (1-αt)*FRAMAt-1

Для начального значения можно взять простое среднее по первым N значений или присвоить FRAMAt0 = Pt0.

Итоговая последовательность FRAMA зависит от выбранной формулы для D, от способа расчёта диапазонов (sum of absolute differences или high-low) и от правил ограничения alpha.

Пример пошагового псевдокода (упрощённо):

N = 16
alpha_min = 2/(N+1)   // пример
FRAMA_initial = average(P[1..N])

for t = N+1 to T:
    PriceRangeFull = sum_{i=t-N+1..t} |P[i] - P[i-1]|
    PriceRangeLeft = sum_{i=t-N+1..t-N/2} |P[i] - P[i-1]|
    PriceRangeRight = sum_{i=t-N/2+1..t} |P[i] - P[i-1]|

    if PriceRangeFull <= 0: D = 1.0 // защита
    else:
        ratio = (PriceRangeLeft + PriceRangeRight) / PriceRangeFull
        D = ln(ratio) / ln(2)
        D = clamp(D, 1, 2) // по желанию

    alpha = exp(-4.6 * (D - 1))
    alpha = max(alpha, alpha_min)

    FRAMA[t] = alpha * P[t] + (1 - alpha) * FRAMA[t-1]

Замечания и вариации:
- В некоторых реализациях используют high/low (максимум-минимум) вместо суммы абсолютных изменений.
- Коэффициент 4.6 в формуле экспоненты выбран эмпирически; иногда используют другие множители для изменения чувствительности.
- При разбиении окна N на два подинтервала N/2 при нечётном N следует аккуратно определить границы (округление).
- Альтернативный подход — нормализовать D в пределах [1,2] и затем вычислять alpha как линейную функцию от D к периодам, а затем переводить период в alpha через стандартную формулу EMA: α = 2/(period+1).

Пример преобразования D → период → alpha:
1. Нормализовать D: D'= (D-1)/(2-1) = D-1 (в пределах 0..1).
2. Отобразить на период между P_min и P_max, например P_min = 2, P_max = N:
period = P_min + D' * (P_max - P_min).
3. alpha = 2/(period+1).

Это даёт более интуитивно понятную связь с «эффективным периодом».


Торговля с Fractal Adaptive Moving Average (FRAMA)

FRAMA может интерпретироваться аналогично другим скользящим средним, но с учетом ее адаптивной природы:

1. Направление FRAMA:
• Восходящая FRAMA указывает на восходящий тренд.
• Нисходящая FRAMA указывает на нисходящий тренд.

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

3. Пересечения нескольких FRAMA:
• Пересечение короткой FRAMA с длинной FRAMA снизу вверх может указывать на начало восходящего тренда.
• Пересечение короткой FRAMA с длинной FRAMA сверху вниз может указывать на начало нисходящего тренда.
Две-скользящие-FRAMA

4. Угол наклона FRAMA:
• Крутой угол наклона указывает на сильный тренд.
• Пологий угол наклона указывает на слабый тренд.
• Горизонтальное движение указывает на боковой тренд.

5. Фильтрация сигналов:
• Благодаря своей адаптивной природе, FRAMA создает меньше ложных сигналов, чем традиционные скользящие средние.
• Чем меньше период FRAMA, тем более чувствительным будет индикатор к изменениям цены.
• Фильтрация пробоев: применять FRAMA как трендовый фильтр для пробоев уровней — торговать пробои только в направлении, в котором цена находится относительно FRAMA.

6. Уровни поддержки и сопротивления:
• FRAMA может служить динамическим уровнем поддержки в восходящем тренде.
• FRAMA может служить динамическим уровнем сопротивления в нисходящем тренде.
indicator_fractal_adaptive_moving_average

Пример
Практический пример индекса Nifty 50 приведен ниже. The ТорговыйВью на скриншоте показана почасовая диаграмма, на которой видна индикаторная линия FRAMA вместе с почасовыми подсвечниками. Красные стрелки или указатели показывают точки, в которых рынок движется к нисходящему тренду, что является сигналом либо продать и уйти с рынка, либо сократить индекс.

Зеленые указатели указывают на уровни, указывающие на восходящий тренд на рынке, что сигнализирует трейдерам о выходе на рынок, поскольку после этого есть все возможности роста цен. На скриншоте ниже показаны некоторые области, где линия FRAMA постоянно растет, что указывает на тенденцию роста рынка. Трейдеры могут использовать эту линию как уровень поддержки. Противоположное произойдет в случае нисходящего тренда, когда линия FRAMA падает, показывая снижение сопротивление уровень.
FRAMA-graph