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
    А связь ФНЧ  обратная положительная или отрицательная? Я в Метастоке изобретал средние от противного как в ББ.Чем быстрее цена идет тем более отставание средней… чтобы защититься от ложных проколов.Вот коридор \ошибки\ работает против ББ (болинжера). Зачем это ему? Мне это было не понятно .
    Кстати люблю аллигаторы Билла.На дневном они стирают влияние новостей и это очень полезно.
  • Делать тебе нече=))

  • SergMsk
    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 — доля использования значения цены.

      • Антон Б
        16 января 2021, 11:52
        3Qu, это дельта от ema будет равна 0.
        а у тебя уже функция ema' от нее не будет равна 0.
  • SergMsk
    16 января 2021, 01:04
    Это все вариации МАСD на EMA, DMA,TEMA.  Они менее волатильные, но по сути это нахождение 1 и 2 производной от цены. Новых преимуществ не дает.
    • Антон Б
      16 января 2021, 11:48
      SergMsk, производную от цены взять не так легко.
      цена это не линия.
      а точки(сделки) с разрывами! между ними.
      либо точки закрытия периодов.
      а значит производную от цены, как есть, не взять.

      а только из АППРОКСИМИРУЮЩЕЙ функции.
      А производная от Аппроксимации например из n точек степени n будет гарантированно функция со степенью n-1 c другими коэффициентами.

      В первую очередь производная опишет качество аппроксимации.
      А не качество линии.

      Честная производная от цены будет  не определена.
      Там везде разрывы во всех точках.
  • Susanin
    16 января 2021, 12:17
    Осталось сделать период расчета переменным и получится система аг.
  • Valday
    16 января 2021, 14:00
    Все операции со случайной величиной на выходе дают случайную величину. Но
  • Kot_Begemot
    16 января 2021, 14:08
    y(+1) =a*(x+k*x-k*y)+(1-a)*y = x*(1+k)*a + y*(1-a-a*k) =>

    при z=a*(1+k) 

    y(+1) = z*x+(1-z)*y

    легко видеть, что это уравнение EWMA c коэффициентом а+аk, то есть с меньшим периодом и меньшей памятью. Если k=0.3, то это равносильно уменьшению периода на 30%.
  • baron_samedi
    16 января 2021, 14:57
    с ма с этими проблема только одна, при этих подгонах. Если заработала — выскочить до того как начала лосить.
    Опираясь на чутье…
  • Владимиров Владимир
    16 января 2021, 16:22
    Уважаемый автор! Возможно у вас в формулы вкралась опечатка? 
         Классически подразумевается, что коэффициенты (в вашей формуле a0 и b1) связаны соотношением:     b1 = 1 — a0.
         И если вы хотите сделать обратную связь в формуле, то константу delta корректнее записать так (в ваших обозначениях): 
                          delta = x(t-1) — Y(t-1)
        (          у вас в формуле стоит x(t)       )
       
    • Антон Б
      16 января 2021, 21:53
      Владимиров Владимир, он получается тянет две функции
      ema
      и
      ema'
      и дельту из ema!!! запихивает в ema'


      • Владимиров Владимир
        16 января 2021, 22:45
        Антон Б, Вы про DMA? Вообще то похоже на то… Но тогда мне вообще не понятен практический смысл — DMA это сглаживание ЕМА. Или народ тут чисто математические приколы пишет?! 
        • Антон Б
          16 января 2021, 22:59
          Владимиров Владимир,
          народ, в основном, не понимает.
          тут 90% народу sma формулу не вспомнят.


  • Владимиров Владимир
    16 января 2021, 17:26
    Спорить не буду. Но отмечу, что в вашем варианте вы обратную связь делаете пропорционально разнице текущего значения цены и значения ЕМА на предыдущем баре. И плюсуете эту разницу (пусть с понижающим коэффициентом) в текущее значение ЕМА. Такая обратная связь что сглаживает то? В моем варианте, она будет уменьшать расхождение значений ЕМА и факта. Дальше можно сделать управление коэффициентом этого уточнения. Но основные проблемы сглаживающих средних от всех этих мероприятий никуда не исчезнут. Клад зарыт в другом месте )))
  • Alexey Rondine
    17 января 2021, 00:43
    Скользячку юрика изобрели заново

    http://www.jurikres.com/catalog1/ms_ama.htm#top

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

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