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.
Berechnen Sie die schnelle und die langsame EMA, die die kurz- bzw. langfristigen Markttrends widerspiegeln.
Berechnen Sie die MAMA- und FAMA-Linien, die adaptive gleitende Durchschnitte sind.
Wenn die schnelle EMA über die langsame EMA geht, wird ein Kaufsignal generiert.
Wenn die schnelle EMA unter die langsame EMA überschreitet, wird ein Verkaufssignal generiert.
Wenn MAMA über FAMA kreuzt, wird ein Kaufsignal erzeugt.
Wenn MAMA unter FAMA liegt, wird ein Verkaufssignal erzeugt.
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:
Berechnen Sie die Hilbert-Transformation des Preises und extrahieren Sie Phaseninformationen des Signals.
Berechnen Sie die sofortige Frequenz p anhand der Phaseninformationen.
Der Gewichtungsfaktor α wird anhand des p-Wertes berechnet.
Berechnen Sie MAMA und FAMA anhand von α.
Schließlich werden Handelssignale auf der Grundlage von EMA- und MAMA/FAMA-Kreuzungen erzeugt:
Diese Strategie kombiniert die Vorteile der EMA- und MAMA-Indikatoren, um die Genauigkeit der Handelssignale zu verbessern.
Vorteile der EMA:
Vorteile von MAMA:
Vorteile der Kombination:
Die wichtigsten Risiken dieser Strategie sind:
Lösungen:
Die Strategie kann in folgenden Aspekten optimiert werden:
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)