PMA (Polynomial Moving Average) — полиномиальная скользящая средняя

PMA
Polynomial Moving Average (PMA) — это скользящая средняя, получаемая аппроксимацией последних N значений цены полиномом некоторой степени m и оценкой значения полинома в последней точке (или предсказанием следующего значения). В отличие от простых (SMA) или экспоненциальных (EMA) средних, PMA использует метод наименьших квадратов для подгонки полинома к историческим ценам и берёт его значение в текущем баре как сглаженное представление тренда. Это даёт более гибкую форму сглаживания: PMA может лучше подстраиваться под нелинейные переходы цены и уменьшать фазовый сдвиг по сравнению с некоторыми классическими средними.

— Компоненты и параметры:
— Период N — число последних баров, используемых для аппроксимации.
— Степень полинома m (обычно m = 1..3; m = 1 даёт линейную регрессию, m = 2 — квадратичную и т.д.).
— Источник данных src — обычно close, но можно high/low/typical.
— Метод оценки — наименьшие квадраты (OLS) для коэффициентов полинома.
— Смещение/оценка — значение полинома в последней точке (t = 0) или в точки вперед/назад (вперед = предсказание).

— Свойства:
— Гибкость: степень полинома управляет гибкостью аппроксимации (большая степень — лучше подгонка краткосрочных колебаний, но риск переобучения).
— Плавность: PMA сглаживает шум, сохраняя нелинейные характеристики движения.
— Запаздывание: зависит от степени m и метода выборки; PMA часто имеет меньший лаг, чем SMA той же «эффективной» ширины, особенно если используется предсказание.
— Чувствительность к выбросам: как и регрессия, чувствительна к резким выбросам в окне; можно применять взвешивание (WLS) или робастные методы.

— Варианты:
— Линейная регрессионная средняя (Linear Regression / Least Squares Moving Average) — частный случай PMA при m=1.
— Квадратичная/кубическая PMA — m=2 или 3.
— Взвешенная PMA — веса на точки в окне (например, больше веса более свежим данным).
— Центрированная vs. односторонняя: можно аппроксимировать симметричное окно вокруг центра (центральная PМА) или использовать только прошлые данные (обычно для трейдинга выбирают одностороннюю).

На первый взгляд, перспективная скользяшка. Но только, если не сравнивать ее с JURIK MOVING AVERAGE (JMA). Вот как PMA выглядит на фоне JMA с тем же периодом.
PMA-сравнение


Формула расчёта Индикатора Polynomial Moving Average

Общая математическая постановка (односторонний подход, используются последние N точек: t = 0 (текущий), −1, −2, …, −(N−1)).

Пусть данные: (x_i, y_i) — где x_i = i (или время t_i), y_i = src_{t−i}, i = 0..N−1.
Строим полином степени m:
p(x) = a_0 + a_1 x + a_2 x^2 + … + a_m x^m

Коэффициенты a = [a_0 … a_m]^T находятся решением задачи наименьших квадратов:
minimize ||V a − y||^2,
где V — матрица Вандермонда размера N×(m+1):
V_{i,j} = (x_i)^j, i=0..N−1, j=0..m,
и y = [y_0, y_1, …, y_{N−1}]^T.

Решение (обычное OLS):
a = (V^T V)^{-1} V^T y

Значение PMA в текущей точке (x = 0, т.е. оценка в последней точке) равно:
PMA_t = p(0) = a_0
Если используются координаты x_i так, что x=0 соответствует последней точке. Альтернативно, если используют x_i = −i, то PMA_t = p(0) = a_0.

Если требуется предсказание на k шагов вперёд (extrapolation):
PMA_{t+k} = p(k) = a_0 + a_1 k + a_2 k^2 + … + a_m k^m

Практическая оптимизация: вместо обратного умножения часто вычисляют веса w_i такие, что
PMA_t = sum_{i=0..N-1} w_i * y_i
эти веса зависят только от N и m (и выбранной шкалы x_i). Весовая форма получается из выражения:
w = e_0^T (V^T V)^{-1} V^T
где e_0 = [1, 0, 0, …, 0]^T соответствует выборке p(0)=a_0. Тогда PMA_t = w · y.

Пример частного случая — линейная регрессия (m = 1):
— Коэффициенты регрессии a = [a_0, a_1] решаются явными формулами; PMA_t = a_0 (оценка в x=0).
— Для равномерных x_i можно получить явные весовые коэффициенты (см. формулы Linear Regression Moving Average).

Примечания по численной реализации:
— Для устойчивости и скорости обычно используют предвычисленные матрицы или ортогональную регрессию (QR-разложение) либо прямое вычисление весов once-per-(N,m).
— В реальном коде для онлайн-вычисления применяют рекуррентные алгоритмы или хранение весов w_i и свёртку с входной серией.

Пример кода автора

public static IList PMA(this IList Xseries, int Period) //Prosvirin Moving Average
        {
            var result = new List();
            double SumOfPowX, SumOfX, n, SumOfXY, SumOfY, x, y, det, a, b;

            for (int bar = 0; bar < Period; bar++)
            {
                result.Add(Xseries[bar]);
            }

            for (int bar = Period; bar < Xseries.Count; bar++)
            {
                SumOfPowX = 0; SumOfX = 0; n = Period; SumOfXY = 0; SumOfY = 0;

                for (int i = 0; i < Period; i++)
                {
                     x = bar - i;
                     y = Xseries[bar - i];
                    SumOfPowX += x * x;
                    SumOfX += x;
                    SumOfXY += x * y;
                    SumOfY += y;
                }
                 det = SumOfPowX * n - Math.Pow(SumOfX, 2);
                 a = (SumOfXY * n - SumOfX * SumOfY) / det;
                 b = (SumOfY - a * SumOfX) / n;
                result.Add(bar * a + b);
            }
            return result;
        }

Применение в трейдинге Индикатора Polynomial Moving Average

Цели и преимущества:
- Выявление тренда с учётом нелинейной динамики: PMA лучше описывает кривые/изменяющиеся тренды, чем простая линейная средняя.
- Снижение фазового сдвига (лаг): при правильной настройке (малая степень и/или экстраполяция) PMA может опережать цену сильнее, чем SMA.
- Подгон под локальные структуры: полезна при анализе разворотов и криволинейной динамики цены.

Сигналы:
- Пересечения: стандартные сигналы — пересечение цены и PMA (цена выше PMA → бычий сигнал; ниже → медвежий).
- Направление PMA: наклон аппроксимирующего полинома (производная p'(0) = a_1) даёт оценку мгновенного наклона/напрвления тренда.
- Дивергенции: расхождение между локальными экстремумами цены и поведением PMA (особенно при m≥2) может указывать на замедление/ускорение тренда.
- Предсказание: extrapolation (p(k) при k>0) используется для попытки прогнозирования следующего значения (но сопряжено с риском).

Настройка параметров:
- Период N: больше N даёт более гладкую PMA; меньше — более чувствительную. Для дейтрейдинга N обычно = 10..30; для свинга — 30..100+.
- Степень m: m=1 (линейная) — менее склонна к переобучению; m=2..3 — даёт криволинейную подгонку, полезную на рынках с изгибами тренда, но повышает шум и риск переобучения.
- Взвешивание: придание большего веса более свежим данным (WLS) улучшает реактивность.

Комбинации и фильтрация:
- Используйте PMA вместе с классическими индикаторами тренда/волатильности (ADX, ATR), объёмом или уровнями поддержки/сопротивления.
- Можно комбинировать две PMA с разными N/m (быстрая и медленная) — строить гистограмму разницы, как в MA Histogram.
- Для определения точек входа — ждать подтверждение ценой (синхронный откат/поддержка) и использовать стоп-лоссы по технике управления риском.

Примеры практических стратегий:
- Трендовый фильтр: брать сделки только в направлении наклона PMA (покупки при положительном a_1).
- Пересечение PMA с ценой + подтверждение объёма: вход при пробое и удержании выше PMA.
- Двойная PMA: вход при пересечении быстрой PMA вверх через медленную; выход при обратном пересечении или при смене знака производной медленной PMA.
- Использование PMA для сглаживания сигналов осцилляторов (например, фильтр сигналов RSI, если PMA подтверждает тренд).

Ограничения и риски:
- Переобучение: высокая степень m и маленький N могут привести к «подгонке» под шум и ложным сигналам.
- Чувствительность к выбросам: экстремальные бары в окне сильно влияют на коэффициенты.
- Экстраполяция ненадежна: предсказание p(k>0) рискованно и должно использоваться с осторожностью и подтверждением.
- Вычислительная сложность: PMA тяжелее в вычислении, чем SMA/EMA; для высокой частоты может потребоваться оптимизация.

Короткое резюме:
- PMA — это MA, основанная на полиномиальной регрессии по последним N точкам; даёт гибкую, потенциально менее запаздывающую оценку тренда и его криволинейности.
- Формула: коэффициенты полинома a = (V^T V)^{-1} V^T y, PMA_t = p(0) = a_0 (или эквивалентная свёртка весов w · y).
- В трейдинге PMA используют для определения направления и изменения тренда, фильтрации сигналов и (с осторожностью) для краткосрочных прогнозов; комбинируют с другими инструментами и управлением риском.