Stratégie de négociation basée sur les indicateurs EMA et MAMA

Auteur:ChaoZhang est là., Date: le 31 octobre 2023 à 14h20:56
Les étiquettes:

img

Résumé

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.

La logique de la stratégie

  1. Calculer les EMA rapides et lentes, qui reflètent respectivement les tendances à court et à long terme du marché.

  2. Calculer les lignes MAMA et FAMA, qui sont des moyennes mobiles adaptatives.

  3. Lorsque l'EMA rapide franchit l'EMA lente, un signal d'achat est généré.

  4. Lorsque l'EMA rapide traverse le niveau inférieur à l'EMA lente, un signal de vente est généré.

  5. Lorsque MAMA passe au-dessus de FAMA, un signal d'achat est généré.

  6. Lorsque MAMA passe sous FAMA, un signal de vente est généré.

  7. 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:

  1. Calculer la transformation de Hilbert du prix et extraire les informations de phase du signal.

  2. Calculer la fréquence instantanée p sur la base des informations de phase.

  3. Calculer le facteur de pondération α sur la base de la valeur p.

  4. 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:

  • Longue lorsque l'EMA dépasse
  • Cours lorsque la EMA dépasse le seuil
  • Longue lorsque MAMA traverse au-dessus de FAMA
  • Courte lorsque MAMA passe sous FAMA

Analyse des avantages

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:

  • Efficacité des données sur les prix et réduction du bruit
  • Suivre les tendances avec un certain retard
  • Paramètres flexibles pour ajuster la sensibilité

Les avantages de MAMA:

  • Paramètres adaptatifs, pas besoin de réglage manuel de la période
  • Réaction rapide à la capture de tendance se transforme tôt
  • Identifier avec précision le support et la résistance

Avantages de les combiner:

  • L' EMA détermine l' évolution générale
  • MAMA vérifie les signaux et détecte les virages tôt
  • Amélioration de la précision et du taux de réussite des signaux

Analyse des risques

Les principaux risques de cette stratégie:

  • L'EMA et le MAMA sont des indicateurs en retard, les signaux d'entrée peuvent avoir un certain retard et un glissement
  • Des croisements fréquents sur des marchés variés provoquant des problèmes
  • Des paramètres incorrects entraînent des tendances manquantes ou de faux signaux

Les solutions:

  • Utiliser le stop loss pour contrôler la perte
  • Choisissez des paramètres raisonnables, évitez d'être trop sensible
  • Combiner avec d'autres indicateurs pour confirmer les signaux

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  • Optimiser les périodes EMA en fonction des caractéristiques du symbole
  • Sensitivité fine MAMA alpha pour une meilleure capture des virages
  • Ajoutez d'autres filtres comme MACD, RSI pour éviter de faux signaux
  • Ajouter un stop loss au contrôle des risques
  • Test de retour pour trouver les paramètres optimaux
  • Automatiser la prise de profit pour maximiser le profit

Résumé

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)

Plus de