MMI (Market Meanness Index) — Индекс злобы рынка / Индекс деловой активности

Market-Meanness-Index-2
Market Meanness Index (MMI) представляет собой инструмент, который помогает трейдерам определить характер текущего рынка — является ли он трендовым или боковым. Название «Meanness» (злоба) отражает идею, что рынок иногда ведет себя «злобно» или непредсказуемо по отношению к трейдерам, особенно когда находится в боковом движении.

Индикатор MMI по сути является мерой индекса деловой активности.

Если цена часто меняет направление и наиболее вероятные движения близки к случайным, рынок считается «mean» (не трендовый). MMI облегчает распознавание состояний, когда поведение цен ближе к случайной прогулке, и, наоборот, когда рынок демонстрирует трендовость. MMI основан на подсчете количества пар ценовых значений (обычно цен закрытия), которые не следуют простому линейному шаблону, и их соотношения к общему количеству проанализированных пар. Индикатор измеряет «хаотичность» или «случайность» движения цены в определенный период.

Применение: фильтр для торговых систем (избегать трендовых стратегий при высоких значениях MMI и избегать контртрендных при низких), помощь в выборе режимов (скальпинг/свинг) и управления риском. Обычно выводится как индекс в диапазоне 0..1 (или 0..100), где значения ближе к 1 (или 100) указывают на более «средный»/рандомный рынок, а ближе к 0 — на выраженный тренд.

— Низкие значения (обычно ниже 50) указывают на преобладание трендового движения.
— Высокие значения (обычно выше 50) указывают на преобладание бокового или хаотичного движения.

Правило трех четвертей
Любая серия независимых случайных чисел возвращается к среднему значению – или, точнее, к их медиане – с вероятностью 75%. Предположим, что у вас есть последовательность случайных, некоррелированных ежедневных данных –, например, ежедневные темпы изменения кривой цен случайного блуждания. Если значение данных понедельника было выше медианного, то в 75% всех случаев данные вторника будут ниже понедельничных. И если понедельник был ниже медианного значения, 75% вероятность того, что вторник будет выше. Доказательство правила 75% относительно простое и не потребует интегрального исчисления. Рассмотрим ряд данных с медианой М. По определению, половина значений меньше М а половина больше (для простоты игнорируем тот случай, когда значение именно М). Теперь объедините значения в пары, каждая из которых состоит из значения Пы и следующее значение Пт. Таким образом, каждая пара представляет собой изменение от Пы чтобы Пт. Теперь мы получили много изменений, которые разделили на четыре набора:
(Pt < M, Py < M) (Pt < M, Py > M)
(Pt > M, Py < M) (Pt > M, Py > M)

Эти четыре набора, очевидно, имеют одинаковое количество элементов –, то есть 1/4 от всех Py->Pt изменения – когда Pt и Py некоррелированы, т.е. полностью независимы друг от друга. Стоимость М и какие данные в сериале для этого значения не будут иметь. Теперь сколько пар данных возвращаются к медиане? Все пары, которые выполняют это условие: (Py < M и Pt > Py) или (Py > M и Pt < Py) Условие в первой скобке выполняется для половины данных в наборе 1 (в другой половине выполняется Pt меньше чем Py) и во всем наборе 3 (потому что Pt всегда выше, чем Py в наборе 3). Итак, первая скобка верна для 1/2 * 1/4 + 1/4 = 3/8 всех изменений данных. Аналогично, вторая скобка верна в половине множества 4 и во всем множестве 2, таким образом также для 3/8 всех изменений данных. 3/8 + 3/8 дает 6/8, т.е. 75%. Это правило трех четвертей для случайных чисел. MMI функция просто подсчитывает количество пар данных, для которых выполняется условие, и возвращает их процент. The Данные серии могут содержать цены или изменения цен. Цены всегда имеют некоторую последовательную корреляцию: если EUR/USD сегодня находится на уровне 1,20, то завтра также будет около 1,20. То, что завтра он закончится на уровне 70 центов или 2 долларов за евро, маловероятно. Эта последовательная корреляция справедлива и для ценового ряда, рассчитанного на основе случайных чисел, поскольку не сами цены случайны, а их изменения. Таким образом, функция MMI должна возвращать меньший процент, например 55%, при питании ценами. В отличие от цен, изменения цен не обязательно имеют последовательную корреляцию. Стопроцентно эффективный рынок не имеет корреляции между изменением цен со вчерашнего дня на сегодняшний день и изменением цен с сегодняшнего дня на завтра. Если функция MMI будет оснащена совершенно случайными изменениями цен на идеально эффективном рынке, она вернет стоимость около 75%. Чем менее эффективным и более трендовым становится рынокс, чем больше уменьшается MMI. Таким образом, падающий MMI является индикатором предстоящего тренда. Растущий MMI намекает на то, что рынок станет гаже, по крайней мере, для систем трейдинга трендов.


Расчёт Индекса злобы рынка (MMI)

Базовый и широко используемый вариант MMI опирается на подсчёт количества «возвратов» экстремумов внутри окна по сравнению с ожидаемым числом для случайной последовательности. Один стандартный подход (так называемый «Hurst-like / runs-based» вариант) описывается так:

Обозначения:
— N — длина окна (количество свечей/тиков).
— price[i] — цена (например, закрытие) в момент i, i=1..N.
— L — число локальных максимумов и локальных минимумов внутри окна (или число смен направлений; определение может варьироваться).
— MMI вычисляется через вероятность появления таких изменений в случайном блуждании.

Один из практичных, часто цитируемых вариантов (по статье Lento, Gradojevic и Т., 2006+) — следующий:
1. Разбить окно из N наблюдений на N-2 триплета (price[i], price[i+1], price[i+2]) для i=1..N-2.
2. Посчитать K — количество триплетов, где middle point является экстремумом, т.е. (price[i+1] > price[i] и price[i+1] > price[i+2]) или (price[i+1] < price[i] и price[i+1] < price[i+2]). 3. Для случайной последовательности (i.i.d. с непрерывным распределением) ожидаемое число экстремумов E[K] = 2*(N-2)/3 и дисперсия Var[K] = (16*N - 29)/90 (формулы зависят от предположений; вариации встречаются в литературе). 4. Нормализовать отклонение K от ожидания, получая Z-статистику: Z = (K - E[K]) / sqrt(Var[K]) 5. Преобразовать в индекс в диапазоне 0..1 так, чтобы: - MMI близко к 1 означает «большая средность» (поведение похоже на случайность). - MMI близко к 0 означает выраженный тренд (меньше экстремумов, чем в случайности). Простая сигмоидальная нормировка: MMI = 1 - Phi(|Z|) или MMI = 1 - exp(- (Z^2) / c ) где Phi — функция распределения нормального закона (c — подстраиваемый параметр). Часто берут: MMI = 1 - CDF_normal(|Z|) чтобы получить значения близкие к 1 при |Z| малом (K≈E[K]) и к 0 при |Z| большом. - Упрощённая практическая формула (часто реализуемая в торговых платформах без сложной статистики): 1. Посчитать K как в пункте 2. 2. Нормировать: MMI = 1 - |K - E[K]| / E[K], затем ограничить 0..1. То есть:

  E = 2*(N-2)/3
  MMI_raw = 1 — abs(K — E) / E
  MMI = max(0, min(1, MMI_raw))

Это даёт простую интерпретацию: если K близко к ожидаемому E, MMI≈1; если сильно меньше или больше — MMI↓.

Альтернативный вариант расчета
Расчет Индекса злобы рынка включает следующие этапы:

1. Создание множества пар последовательных цен закрытия (Close) в заданном периоде Length.

2. Подсчет количества «непоследовательных» пар. Пара считается непоследовательной, если она не следует линейному шаблону, характерному для тренда. Если две последовательные пары (P1, P2) и (P2, P3) имеют противоположные направления (разные знаки разности), пара считается непоследовательной.

3. Расчет MMI как процентного соотношения:
MMI = (Количество непоследовательных пар / Общее количество пар) * 100

4. Формально это можно представить так:
Для каждой тройки последовательных цен (Close[i-2], Close[i-1], Close[i]) проверяем:
Если (Close[i-1] — Close[i-2]) * (Close[i] — Close[i-1]) < 0, то пара считается непоследовательной 5. Подсчитываем общее количество таких пар MMI = (Количество непоследовательных пар / (Length - 2)) * 100

// Market Meanness Index
double MMI(double *Data,int Length)
{
  double m = Median(Data,Length);
  int i, nh=0, nl=0;
  for(i=1; i m && Data[i] > Data[i-1]) // mind Data order: Data[0] is newest!
      nl++;
    else if(Data[i] < m && Data[i] < Data[i-1])
      nh++;
  }
  return 100.*(nl+nh)/(Length-1);
}

Интерпретация Market Meanness Index

Market-Meanness-Index-MMI

Уровни индикатора:
● MMI > 50: Рынок находится в боковом или хаотичном состоянии.
● MMI < 50: Рынок находится в трендовом состоянии. ● Чем ближе MMI к 100, тем более хаотичным является рынок. ● Чем ближе MMI к 0, тем более выражен тренд. Применение для торговых стратегий:
● Когда MMI высокий (>50), рекомендуется использовать стратегии, ориентированные на боковой рынок (например, торговля в диапазоне, осцилляторы).
● Когда MMI низкий (<50), рекомендуется использовать трендовые стратегии (например, следование за трендом). Динамика изменений:
● Снижение MMI с высоких уровней может сигнализировать о формировании нового тренда.
● Повышение MMI с низких уровней может указывать на завершение тренда и переход к консолидации.

Экстремальные значения:
● Очень низкие значения (MMI < 20) могут указывать на сильный тренд, но также потенциальную перекупленность/перепроданность. ● Очень высокие значения (MMI > 80) указывают на крайне хаотичный рынок, где сложно применять любые стратегии.

Фильтрация сигналов:
● MMI часто используется как фильтр для других индикаторов:
— Сигналы трендовых индикаторов (MA, MACD) более надежны при низком MMI.
— Сигналы осцилляторов (RSI, Stochastic) более надежны при высоком MMI.

Комбинирование с другими индикаторами:
● MMI хорошо работает в сочетании с ADX (Average Directional Index)
— Низкий MMI и высокий ADX подтверждают сильный тренд.
— Высокий MMI и низкий ADX подтверждают боковой рынок.

Временные рамки:
● MMI может использоваться на разных временных рамках для определения характера рынка.
— Долгосрочный MMI помогает определить основное состояние рынка.
— Краткосрочный MMI помогает выбрать подходящую стратегию для текущих условий.