Ehlers MESA адаптивная стратегия торговли скользящими средними

Автор:Чао Чжан, Дата: 2023-09-28 15:37:13
Тэги:

Обзор

Эта стратегия основана на адаптивной скользящей средней Ehlers MESA и разработана как стратегия трендовой торговли, которая отслеживает перекрестки между двумя скользящими средними. Она длится, когда быстрая линия пересекает над медленной линией, и становится короткой, когда быстрая линия пересекает ниже медленной линии.

Логика стратегии

Ядром этой стратегии является вычисление двух адаптивных скользящих средних: линии MAMA и линии FAMA.

alpha = fl / dphase
alpha = iff(alpha < sl, sl, iff(alpha > fl, fl, alpha))  
mama = alpha*src + (1 - alpha)*nz(mama[1])

где fl - это быстрый предел, sl - медленный предел, а dphase - разница фаз.

Линия FAMA рассчитывается как:

fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])

Линия FAMA представляет собой низкопроходное фильтрованное сглаживание линии MAMA.

Стратегия сравнивает величину связи между линиями MAMA и FAMA, чтобы определить, находится ли рынок в настоящее время в восходящем или нисходящем тренде, и генерирует торговые сигналы на основе этого.

Анализ преимуществ

Стратегия имеет следующие преимущества:

  1. Использует адаптивные скользящие средние, где параметры автоматически корректируются на основе изменений рынка, без необходимости фиксированных ручных параметров.

  2. Фильтр низкого пропуска FAMA может отфильтровать ложные прорывы.

  3. Использование двойной скользящей средней модели позволяет отслеживать средне- и долгосрочные тенденции.

  4. Простая и ясная логика стратегии, которую легко понять и изменить.

  5. Визуальные индикаторы, которые ясно показывают торговые сигналы.

Анализ рисков

Стратегия также сопряжена с некоторыми рисками:

  1. Стратегии перекрестного использования двойных линий могут генерировать чрезмерные торговые сигналы, поэтому рекомендуется надлежащее регулирование вывода и интервала.

  2. Сложные расчеты MAMA и FAMA, неправильное настройка параметров могут вызвать искажения кривой.

  3. Адаптационные параметры могут привести к переустановке, необходимо проверить с использованием других технических показателей.

  4. Двухлинейные перекрестки имеют временные задержки, могут пропустить поворотные моменты.

  5. Необходимо следить за рисками остановки потерь от ложных прорывов.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих областях:

  1. Оптимизируйте параметры, чтобы найти наилучшие комбинации быстрого и медленного ограничения.

  2. Добавьте стратегии стоп-лосса для строгого контроля стоп-лосса на торговую сделку.

  3. Добавить другие индикаторы для фильтрации сигналов, таких как MACD, RSI и т. д., чтобы избежать ложных прорывов.

  4. Добавить индикаторы оценки тренда, чтобы избежать контратендерных сделок.

  5. Оптимизировать темпы входа путем корректировки требований к кроссоверу, чтобы уменьшить чрезмерную частоту торговли.

  6. Оптимизируйте стратегии получения прибыли в соответствии с силой тренда.

  7. Испытать различия параметров между различными продуктами для поиска оптимальных комбинаций параметров.

Резюме

В целом это типичный тренд, следующий за стратегией, используя адаптивные скользящие средние Ehlers MESA для построения визуализированного индикатора и генерации торговых сигналов через двойные перекрестки линий. Стратегия имеет такие преимущества, как адаптивные параметры, фильтрация ложных прорывов и визуализация, но также и риски, такие как задержки и чрезмерная торговля. Будущие улучшения могут быть сделаны с помощью оптимизации параметров, стратегий остановки потерь, фильтрации сигналов и т. Д., Чтобы сделать стратегию более надежной.


/*backtest
start: 2023-09-20 00:00:00
end: 2023-09-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// @author LazyBear 
// 
// List of my public indicators: http://bit.ly/1LQaPK8 
// List of my app-store indicators: http://blog.tradingview.com/?p=970 
//
strategy("Ehlers MESA Adaptive Moving Average [LazyBear with ekoronin fix]", shorttitle="EMAMA_LB (ekoronin fix)", overlay=false, calc_on_every_tick=true, precision=0)
src=input(close, title="Source")
fl=input(.4, title="Fast Limit")
sl=input(.04, title="Slow Limit")
pi = 3.1415926
sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0
dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54)
q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54)
i1 = nz(dt[3])
jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54)
jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54)
i2_ = i1 - jq
q2_ = q1 + jI
i2 = .2*i2_ + .8*nz(i2[1])
q2 = .2*q2_ + .8*nz(q2[1])
re_ = i2*nz(i2[1]) + q2*nz(q2[1])
im_ = i2*nz(q2[1]) - q2*nz(i2[1])
re = .2*re_ + .8*nz(re[1])
im = .2*im_ + .8*nz(im[1])
//p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1]))
p1 = iff(im!=0 and re!=0, 2*pi/atan(im/re), nz(p[1]))
p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1))
p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2))
p = .2*p3 + .8*nz(p3[1])
spp = .33*p + .67*nz(spp[1])
//phase = atan(q1 / i1)
phase = 180/pi * atan(q1 / i1) 
dphase_ = nz(phase[1]) - phase
dphase = iff(dphase_< 1, 1, dphase_)
alpha_ = fl / dphase
alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_))
mama = alpha*src + (1 - alpha)*nz(mama[1])
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
//pa=input(false, title="Mark crossover points")
//plotarrow(pa?(cross(mama, fama)?mama<fama?-1:1:na):na, title="Crossover Markers")
//fr=input(false, title="Fill MAMA/FAMA Region")
//duml=plot(fr?(mama>fama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL")
//mamal=plot(mama, title="MAMA", color=red, linewidth=2)
//famal=plot(fama, title="FAMA", color=green, linewidth=2)
//fill(duml, mamal, red, transp=70, title="NegativeFill")
//fill(duml, famal, green, transp=70, title="PositiveFill")
//ebc=input(false, title="Enable Bar colors")
//bc=mama>fama?lime:red
//barcolor(ebc?bc:na)

longSpike=mama>fama? 1:0
shortSpike=mama<fama? 1:0

plot(longSpike, title = "Mama Long", style=line, linewidth=1, color=yellow)
plot(shortSpike, title = "Mama Short", style=line, linewidth=1, color=red)

//possig = iff(reverse and pos == 1, -1,
//          iff(reverse and pos == -1, 1, pos))	   
if (longSpike) 
    strategy.entry("Long", strategy.long)
if (shortSpike)
    strategy.entry("Short", strategy.short)	


Больше