Handelsstrategie auf Basis von EMA- und MAMA-Indikatoren

Schriftsteller:ChaoZhang, Datum: 31.10.2023
Tags:

img

Übersicht

Diese Strategie basiert auf den Indikatoren EMA (Exponential Moving Average) und MAMA (MESA Adaptive Moving Average), um die Trendrichtung zu bestimmen und Handelssignale entsprechend ihren Crossovers zu generieren.

Strategie Logik

  1. Berechnen Sie die schnelle und die langsame EMA, die die kurz- bzw. langfristigen Markttrends widerspiegeln.

  2. Berechnen Sie die MAMA- und FAMA-Linien, die adaptive gleitende Durchschnitte sind.

  3. Wenn die schnelle EMA über die langsame EMA geht, wird ein Kaufsignal generiert.

  4. Wenn die schnelle EMA unter die langsame EMA überschreitet, wird ein Verkaufssignal generiert.

  5. Wenn MAMA über FAMA kreuzt, wird ein Kaufsignal erzeugt.

  6. Wenn MAMA unter FAMA liegt, wird ein Verkaufssignal erzeugt.

  7. Crossovers von MAMA und FAMA können verwendet werden, um EMA-Signale zu bestätigen oder Trendwende frühzeitig zu erkennen.

Insbesondere berechnet die Strategie zunächst die schnelle EMA (fl) und die langsame EMA (sl), die kurzfristige bzw. langfristige Trends widerspiegeln.

Dann berechnet es MAMA und FAMA basierend auf der Formel von John Ehlers:

  1. Berechnen Sie die Hilbert-Transformation des Preises und extrahieren Sie Phaseninformationen des Signals.

  2. Berechnen Sie die sofortige Frequenz p anhand der Phaseninformationen.

  3. Der Gewichtungsfaktor α wird anhand des p-Wertes berechnet.

  4. Berechnen Sie MAMA und FAMA anhand von α.

Schließlich werden Handelssignale auf der Grundlage von EMA- und MAMA/FAMA-Kreuzungen erzeugt:

  • Lang, wenn die EMA überschreitet
  • Kurz, wenn die EMA unterhalb dieser Marke überschreitet
  • Lange, wenn MAMA über FAMA kreuzt
  • Kurz, wenn MAMA unter FAMA überschreitet

Analyse der Vorteile

Diese Strategie kombiniert die Vorteile der EMA- und MAMA-Indikatoren, um die Genauigkeit der Handelssignale zu verbessern.

Vorteile der EMA:

  • Effiziente Vergleiche bei den Preisdaten und Reduzierung von Lärm
  • Trends mit etwas Verzögerung gut verfolgen
  • Flexible Parameter zur Anpassung der Empfindlichkeit

Vorteile von MAMA:

  • Anpassungsparameter, keine manuelle Periodeinstellung erforderlich
  • Eine schnelle Reaktion auf eine frühzeitige Trendwende
  • Genaue Identifizierung von Unterstützung und Widerstand

Vorteile der Kombination:

  • Die EMA bestimmt die allgemeine Entwicklung
  • MAMA überprüft Signale und erkennt Kurven frühzeitig
  • Verbesserte Genauigkeit und Gewinnrate der Signale

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  • EMA und MAMA sind nachlassende Indikatoren, Eintrittssignale können einige Verzögerungen und Verschiebungen aufweisen
  • Häufige Kreuzungen auf verschiedenen Märkten, die zu Problemen führen
  • Falsche Einstellungen führen zu fehlenden Trends oder gefälschten Signalen

Lösungen:

  • Verwenden Sie Stop-Loss, um Verluste zu kontrollieren
  • Wählen Sie vernünftige Parameter, vermeiden Sie, zu empfindlich zu sein
  • Kombination mit anderen Indikatoren zur Bestätigung von Signalen

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  • Optimierung von EMA-Perioden auf der Grundlage von Symbolmerkmalen
  • Feinstimmung MAMA-Alpha-Empfindlichkeit zur besseren Erfassung von Kurven
  • Hinzufügen anderer Filter wie MACD, RSI um gefälschte Signale zu vermeiden
  • Hinzufügen von Stop-Loss zur Risikokontrolle
  • Backtest zur Ermittlung der optimalen Parameter
  • Automatische Gewinnnahme für maximale Gewinne

Zusammenfassung

Diese Strategie integriert die Stärken der EMA- und MAMA-Indikatoren, um dem Trend zu folgen und Wende zeitnah zu erfassen. Mit Parameteroptimierung und Risikokontrolle kann eine verbesserte Gewinnrate und Rentabilität erreicht werden.


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

//@version=2
strategy("EMAMA strategy", overlay=true)
//This entire strategy is courtesy of LazyBear for programming the original EMAMA system, I simply added a strategy element to everything to round things out. 

src=input(hl2, title="Source")
fl=input(.5, title="Fast Limit")
sl=input(.05, title="Slow Limit")
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]))
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)
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)

longCondition = crossover(mama, fama)
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(mama, fama)
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

Mehr