Cette stratégie est basée sur les indicateurs EMA (Exponential Moving Average) et MAMA (MESA Adaptive Moving Average) pour déterminer la direction de la tendance et générer des signaux de trading en fonction de leurs croisements.
Calculer les EMA rapides et lentes, qui reflètent respectivement les tendances à court et à long terme du marché.
Calculer les lignes MAMA et FAMA, qui sont des moyennes mobiles adaptatives.
Lorsque l'EMA rapide franchit l'EMA lente, un signal d'achat est généré.
Lorsque l'EMA rapide traverse le niveau inférieur à l'EMA lente, un signal de vente est généré.
Lorsque MAMA passe au-dessus de FAMA, un signal d'achat est généré.
Lorsque MAMA passe sous FAMA, un signal de vente est généré.
Les croisements de MAMA et de FAMA peuvent être utilisés pour confirmer les signaux EMA ou pour détecter tôt les virages de tendance.
Plus précisément, la stratégie calcule d'abord l'EMA rapide (fl) et l'EMA lente (sl), reflétant respectivement les tendances à court et à long terme.
Ensuite, il calcule MAMA et FAMA en fonction de la formule de John Ehlers:
Calculer la transformation de Hilbert du prix et extraire les informations de phase du signal.
Calculer la fréquence instantanée p sur la base des informations de phase.
Calculer le facteur de pondération α sur la base de la valeur p.
Calculer MAMA et FAMA sur la base de α.
Enfin, les signaux de négociation sont générés sur la base des croisements EMA et MAMA/FAMA:
Cette stratégie combine les avantages des indicateurs EMA et MAMA pour améliorer la précision des signaux de négociation.
Les avantages de l'EMA:
Les avantages de MAMA:
Avantages de les combiner:
Les principaux risques de cette stratégie:
Les solutions:
La stratégie peut être optimisée dans les aspects suivants:
Cette stratégie intègre les forces des indicateurs EMA et MAMA pour suivre la tendance et capturer les virages en temps opportun. Avec l'optimisation des paramètres et le contrôle des risques, elle peut améliorer le taux de gain et la rentabilité. Mais les utilisateurs doivent toujours faire preuve de prudence en fonction de leurs préférences personnelles en matière de risque.
/*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)