Ehlers MESA Adaptive Moving Average Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-09-28 15:37:13
Tags:

Übersicht

Diese Strategie basiert auf dem Ehlers MESA Adaptive Moving Average und entwickelt eine Trend-Handelsstrategie, die Crossovers zwischen zwei gleitenden Durchschnitten verfolgt.

Strategie Logik

Der Kern dieser Strategie besteht darin, zwei adaptive gleitende Durchschnitte zu berechnen: die MAMA-Linie und die FAMA-Linie.

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

Alpha passt sich anhand des Phasenunterschieds anpassungsfähig an, um eine anpassungsfähige Glättung zu erreichen.

Die FAMA-Linie wird wie folgt berechnet:

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

Die FAMA-Linie ist eine niedrigpassfilterte Glättung der MAMA-Linie.

Die Strategie vergleicht die Größenverhältnisse zwischen den Linien MAMA und FAMA, um festzustellen, ob sich der Markt derzeit in einem Aufwärtstrend oder einem Abwärtstrend befindet, und erzeugt darauf basierende Handelssignale.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Verwendet adaptive gleitende Durchschnitte, bei denen sich die Parameter automatisch anhand von Marktänderungen anpassen, ohne dass manuell festgelegte Parameter erforderlich sind.

  2. Die FAMA-Linie mit dem Tiefpassfilter kann falsche Ausbrüche filtern.

  3. Die Verwendung eines Doppel-Durchschnitts kann mittelfristige bis langfristige Trends verfolgen.

  4. Einfache und klare Strategielogik, die leicht zu verstehen und zu ändern ist.

  5. Visuelle Indikatoren, die die Handelssignale deutlich zeigen.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Bei Dual-Line-Crossover-Strategien können übermäßige Handelssignale erzeugt werden, daher sind eine angemessene Abzugs- und Intervallkontrolle zu empfehlen.

  2. Komplexe MAMA- und FAMA-Berechnungen, unsachgemäße Parametereinstellungen können zu Kurvenverzerrungen führen.

  3. Anpassungsparameter können zu einer Überanpassung führen; eine Überprüfung mit anderen technischen Indikatoren ist erforderlich.

  4. Bei Doppellinienkreuzungen gibt es Zeitverzögerungen, die Trendwendepunkte verpassen können.

  5. Sie müssen auf Stopp-Loss-Risiken von falschen Ausbrüchen achten.

Optimierungsrichtlinien

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimieren Sie die Parameter-Einstellungen, um die besten Kombinationen von schnellen und langsamen Grenzen zu finden.

  2. Hinzufügen von Stop-Loss-Strategien zur strikten Kontrolle pro Stop-Loss-Handel.

  3. Für die Ermittlung der Auswirkung von Marktanteilen auf den Markt werden die in den einzelnen Ländern angewandten Methoden verwendet, um zu gewährleisten, dass die Marktanteile des Marktes und der Marktanteile des Marktes in einem angemessenen Umfang berücksichtigt werden.

  4. Hinzufügen von Trendbeurteilungsindikatoren, um Gegentrendgeschäfte zu vermeiden.

  5. Optimierung des Eintrittsrhythmus durch Anpassung der Crossover-Anforderungen zur Verringerung des zu häufigen Handels.

  6. Optimieren Sie die Gewinnstrategie entsprechend der Trendstärke.

  7. Versuche Parameterunterschiede zwischen verschiedenen Produkten, um optimale Parameterkombinationen zu finden.

Zusammenfassung

Insgesamt ist dies ein typischer Trend nach der Strategie, mit dem Ehlers MESA adaptiven gleitenden Durchschnitten zu konstruieren, ein visualisierter Indikator und zu generieren Handelssignale durch doppelte Linie Crossovers. Die Strategie hat Vorteile wie adaptive Parameter, Filterung von falschen Breakouts und Visualisierung, aber auch Risiken wie Zeitverzögerungen und übermäßigen Handel.


/*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)	


Mehr