3Qu
3Qu личный блог
16 января 2021, 00:04

Совершенствуем Exponential Moving Average (EMA).

На днях написал топик с описанием своей старой стратегии - Ретростратегия ретро ТС., снятой с эксплуатации в далеком 2014 г, которая, как оказалось, даже в упрощенном виде может работать и сегодня. Не собирался ее использовать, но в ходе обсуждений решил потратить на нее пару вечеров, восстановить по памяти до последней ее версии, и посмотреть, не стоит ли отложить текущие дела, и быстренько вывести ее на рынок.
В ходе восстановления пришлось также дорабатывать фильтры ФНЧ, простейшим из которых является ЕМА. Я дорабатывал свои фильтры, а вам покажу, что можно сделать с ЕМА, чтобы ее усовершенствовать и улучшить.
В комментариях к топику о ретростратегии упомянули некоего Jurik (jurikres.com) и его JMA. Думал, что он уже забыт, но, жив — курилка. То, что мы получим будет не хуже его индикаторов и подобрав периоды сглаживания можете сами в этом убедиться. Вообще, все поделки Jurikа — это где-то на уровне лабораторных работ студентов 4-го курса института по курсу ТАУиР. Наши сегодняшние тоже сложностью не отличаются, но может даже лучше, хотя бы потому, что не являются черными ящиками, и вы знаете как это устроено.

Выражение для ЕМА знают, пожалуй, все:
               Y(t) = a0*X(t) +b1*Y(t-1).
У нее много недостатков, одним из которых является большая групповая задержка. Попробуем исправить это, и для начала вычислим ошибку слежения ЕМА за котировками:
               delta = x(t) — Y(t-1).
Теперь добавим эту ошибку с некоторым коэффициентом Kos к X(t) (это называется — обратная связь), и получим выражение для нашей скорректированной ЕМА:
               Y(t) = a0*(X(t) + Kos*delta) +b1*Y(t-1).
Теоретически Kos может принимать значения от 0 до 1, но увлекаться не надо, обычно достаточно Kos от 0 до 0.3.
Все, можете смотреть что получится.

В рассмотренном выше случае мы использовали так называемую линейную обратную связь, когда корректирующий сигнал пропорционален сигналу ошибки. Далее мы рассмотрим нелинейную связь, когда и сам коэффициент Kos меняется пропорционально ошибке. Запишем это:
                delta_nl = Knl*abs(delta/y[t-1])*delta.
Здесь delta/y[t-1] сделано для того, чтобы delta_nl не изменялась от уровня цены, а зависела только от ее изменения.
В итоге, для нашей ЕМА с нелинейной обратной связью окончательно получим:
                Y(t) = a0*(X(t)+ delta_nl) +b1*Y(t-1).
С Knl тоже увлекаться не надо, но он здесь достаточно велик, у меня Knl= 1.0.

Теперь можем скомбинировать обе обратных связи в одном индикаторе:
                 Y(t) = a0*(X(t)+ Kos*delta + delta_nl) +b1*Y(t-1).
И наконец графики того, что у нас из этого получилось на единичном скачке 1(t) — это такой стандартный тест для всяческих подобных систем, по которому, глаз пристрелямши, можно оценивать характеристики системы.
Совершенствуем Exponential Moving Average (EMA).
LPF — типовой ФНЧ фильтр,
OS — ФНЧ с обратной связью
NL — ФНЧ с комбинированной связью (последний вариант в топике)
Смотрим выбросы — 10% — это оч небольшой выброс, реально, если и будет виден, то только на гэпах.
Теперь посмотрим те же самые индикаторы на реальных котировках фьючерса Si.
Совершенствуем Exponential Moving Average (EMA).
На графиках все так называемы периоды сглаживания одинаковы. Я выбирал значения Kos и Knl такими, которые оптимальны для моих целей. Для ваших применений значения Kos и Knl могут быть совсем другими, и, соответственно, и графики будут иметь несколько иной вид.
Сорри, но для тестов я использовал не ЕМА, а свои ФНЧ, но на ЕМА тоже должно получится, когда-то давно я пробовал.
Вот и все.
Удачи.
24 Комментария
  • ezomm
    16 января 2021, 00:23
    А связь ФНЧ  обратная положительная или отрицательная? Я в Метастоке изобретал средние от противного как в ББ.Чем быстрее цена идет тем более отставание средней… чтобы защититься от ложных проколов.Вот коридор \ошибки\ работает против ББ (болинжера). Зачем это ему? Мне это было не понятно .
    Кстати люблю аллигаторы Билла.На дневном они стирают влияние новостей и это очень полезно.
  • Himno a la paz
    16 января 2021, 00:44
    Делать тебе нече=))

  • сергей в ч
    16 января 2021, 00:44
    МА с ОС это адаптивная скользящая средняя (AMA)?
  • Антон Б
    16 января 2021, 00:54
     Y(t) = a0*(X(t) + Kos*delta) +b1*Y(t-1).
    ->
     Y(t) = a0*(X(t)) +b1*Y(t-1) + a0*Kos*delta

    где a0*Kos*delta
    delta = x(t) — Y(t-1).

     Y(t) = a0*(X(t) + x(t) — Y(t-1).) +b1*Y(t-1).
     Y(t) = a0*(2*X(t)) — a0*Y(t-1) +b1*Y(t-1).         
    где b1= 100-a0

     Y(t) = a0*(2*X(t)) — a0*Y(t-1) +(100-a0)*Y(t-1).         
     Y(t) = a0*(2*X(t)) + ((100)-(2*a0))*Y(t-1).        
     Y(t) = 2*(a0*(X(t)) + ((50)-(a0))*Y(t-1))
    У тебя будет на простой линии ГОРИЗОНТАЛЬНО график выше всегда.
    за счет коэффициента 2.

    EMA = (CLOSE (i) * P) + (EMA (i — 1) * (100 — P), где:

    CLOSE (i) — показатель цены закрытия периода,
    EMA (i — 1) — значение скользящего среднего предыдущего периода,
    P — доля использования значения цены.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн