Эта стратегия основана на адаптивной скользящей средней 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, чтобы определить, находится ли рынок в настоящее время в восходящем или нисходящем тренде, и генерирует торговые сигналы на основе этого.
Стратегия имеет следующие преимущества:
Использует адаптивные скользящие средние, где параметры автоматически корректируются на основе изменений рынка, без необходимости фиксированных ручных параметров.
Фильтр низкого пропуска FAMA может отфильтровать ложные прорывы.
Использование двойной скользящей средней модели позволяет отслеживать средне- и долгосрочные тенденции.
Простая и ясная логика стратегии, которую легко понять и изменить.
Визуальные индикаторы, которые ясно показывают торговые сигналы.
Стратегия также сопряжена с некоторыми рисками:
Стратегии перекрестного использования двойных линий могут генерировать чрезмерные торговые сигналы, поэтому рекомендуется надлежащее регулирование вывода и интервала.
Сложные расчеты MAMA и FAMA, неправильное настройка параметров могут вызвать искажения кривой.
Адаптационные параметры могут привести к переустановке, необходимо проверить с использованием других технических показателей.
Двухлинейные перекрестки имеют временные задержки, могут пропустить поворотные моменты.
Необходимо следить за рисками остановки потерь от ложных прорывов.
Стратегия может быть оптимизирована в следующих областях:
Оптимизируйте параметры, чтобы найти наилучшие комбинации быстрого и медленного ограничения.
Добавьте стратегии стоп-лосса для строгого контроля стоп-лосса на торговую сделку.
Добавить другие индикаторы для фильтрации сигналов, таких как MACD, RSI и т. д., чтобы избежать ложных прорывов.
Добавить индикаторы оценки тренда, чтобы избежать контратендерных сделок.
Оптимизировать темпы входа путем корректировки требований к кроссоверу, чтобы уменьшить чрезмерную частоту торговли.
Оптимизируйте стратегии получения прибыли в соответствии с силой тренда.
Испытать различия параметров между различными продуктами для поиска оптимальных комбинаций параметров.
В целом это типичный тренд, следующий за стратегией, используя адаптивные скользящие средние 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)