Блог им. 3Qu

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

    • 16 января 2021, 00:04
    • |
    • 3Qu
  • Еще
На днях написал топик с описанием своей старой стратегии - Ретростратегия ретро ТС., снятой с эксплуатации в далеком 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 могут быть совсем другими, и, соответственно, и графики будут иметь несколько иной вид.
Сорри, но для тестов я использовал не ЕМА, а свои ФНЧ, но на ЕМА тоже должно получится, когда-то давно я пробовал.
Вот и все.
Удачи.
★18
24 комментария
А связь ФНЧ  обратная положительная или отрицательная? Я в Метастоке изобретал средние от противного как в ББ.Чем быстрее цена идет тем более отставание средней… чтобы защититься от ложных проколов.Вот коридор \ошибки\ работает против ББ (болинжера). Зачем это ему? Мне это было не понятно .
Кстати люблю аллигаторы Билла.На дневном они стирают влияние новостей и это очень полезно.
avatar
Делать тебе нече=))

Жирный трейдер из Лондона, типа того.)
avatar
МА с ОС это адаптивная скользящая средняя (AMA)?
avatar
SergMsk, без понятия, я не использую стандартные индикаторы ТА.
avatar
 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 — доля использования значения цены.

avatar
Антон Б, какой еще 2? на горизонтальной линии дельта =0. Графике в топике смотрите.
avatar
3Qu, это дельта от ema будет равна 0.
а у тебя уже функция ema' от нее не будет равна 0.
avatar
Это все вариации МАСD на EMA, DMA,TEMA.  Они менее волатильные, но по сути это нахождение 1 и 2 производной от цены. Новых преимуществ не дает.
avatar
SergMsk, не вопрос. Не дает — не используем. Не нравится — не ешь.
avatar
SergMsk, производную от цены взять не так легко.
цена это не линия.
а точки(сделки) с разрывами! между ними.
либо точки закрытия периодов.
а значит производную от цены, как есть, не взять.

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

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

Честная производная от цены будет  не определена.
Там везде разрывы во всех точках.
avatar
Осталось сделать период расчета переменным и получится система аг.
avatar
Все операции со случайной величиной на выходе дают случайную величину. Но
avatar
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%.
avatar
Kot_Begemot, естественно, обратная связь всегда изменяет частотные характеристики объекта в целом по сравнению с исходным…
avatar
с ма с этими проблема только одна, при этих подгонах. Если заработала — выскочить до того как начала лосить.
Опираясь на чутье…
avatar
Уважаемый автор! Возможно у вас в формулы вкралась опечатка? 
     Классически подразумевается, что коэффициенты (в вашей формуле a0 и b1) связаны соотношением:     b1 = 1 — a0.
     И если вы хотите сделать обратную связь в формуле, то константу delta корректнее записать так (в ваших обозначениях): 
                      delta = x(t-1) — Y(t-1)
    (          у вас в формуле стоит x(t)       )
   
Владимиров Владимир, там нет опечатки. Обычно в системах регулирования сравниваются текущий входной сигнал с выходным сигналом системы, но и ваше выражение для каких-то применений вполне может иметь место. Возможно, что именно для ЕМА это будет даже интересней.
avatar
Владимиров Владимир, он получается тянет две функции
ema
и
ema'
и дельту из ema!!! запихивает в ema'


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


avatar
Спорить не буду. Но отмечу, что в вашем варианте вы обратную связь делаете пропорционально разнице текущего значения цены и значения ЕМА на предыдущем баре. И плюсуете эту разницу (пусть с понижающим коэффициентом) в текущее значение ЕМА. Такая обратная связь что сглаживает то? В моем варианте, она будет уменьшать расхождение значений ЕМА и факта. Дальше можно сделать управление коэффициентом этого уточнения. Но основные проблемы сглаживающих средних от всех этих мероприятий никуда не исчезнут. Клад зарыт в другом месте )))
Владимиров Владимир, о кладах речь и не шла.)
Речь шла о примере применении линейной и нелинейной обратной связи. В данном случае к ЕМА.
avatar
Скользячку юрика изобрели заново

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

теги блога 3Qu

....все тэги



UPDONW
Новый дизайн