Ehlers MESA Stratégie de négociation des moyennes mobiles adaptatives

Auteur:ChaoZhang est là., Date: le 28 septembre 2023 à 15:37:13
Les étiquettes:

Résumé

Cette stratégie est basée sur la moyenne mobile adaptative Ehlers MESA et a conçu une stratégie de trading de tendance qui suit les croisements entre deux moyennes mobiles.

La logique de la stratégie

Le noyau de cette stratégie est de calculer deux moyennes mobiles adaptatives: la ligne MAMA et la ligne FAMA.

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

où fl est la limite rapide, sl est la limite lente et dphase est la différence de phase.

La ligne FAMA est calculée comme suit:

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

La ligne FAMA est un lissage filtré à faible passe de la ligne MAMA.

La stratégie compare la relation de magnitude entre les lignes MAMA et FAMA pour déterminer si le marché est actuellement en tendance haussière ou en tendance baissière, et génère des signaux de négociation basés sur cela.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. Utilise des moyennes mobiles adaptatives où les paramètres s'ajustent automatiquement en fonction des changements du marché, sans avoir besoin de paramètres fixes définis manuellement.

  2. La ligne FAMA du filtre à faible débit peut filtrer les fausses éruptions.

  3. L'utilisation d'une moyenne mobile double permet de suivre les tendances à moyen et à long terme.

  4. Une logique de stratégie simple et claire, facile à comprendre et à modifier.

  5. Indicateurs visuels qui montrent clairement les signaux de négociation.

Analyse des risques

La stratégie comporte également certains risques:

  1. Les stratégies de croisement à deux lignes peuvent générer des signaux de négociation excessifs, il est donc recommandé de contrôler correctement le retrait et l'intervalle.

  2. Les calculs MAMA et FAMA complexes, les paramètres mal réglés peuvent provoquer des distorsions de courbe.

  3. Les paramètres d'adaptation peuvent entraîner un surmonté, il est nécessaire de vérifier avec d'autres indicateurs techniques.

  4. Les croisements à double ligne ont des délais, peuvent manquer les points tournants de tendance.

  5. Il faut faire attention aux risques d'arrêt de perte de fausses fuites.

Directions d'optimisation

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

  1. Optimiser les paramètres pour trouver les meilleures combinaisons de limite rapide et de limite lente.

  2. Ajoutez des stratégies de stop loss pour un contrôle strict par stop loss de transaction.

  3. Ajouter d'autres indicateurs à filtrer les signaux, tels que le MACD, le RSI, etc. pour éviter de fausses ruptures.

  4. Ajouter des indicateurs de jugement de tendance pour éviter les transactions contre tendance.

  5. Optimiser le rythme d'entrée en ajustant les exigences de croisement pour réduire les échanges trop fréquents.

  6. Optimiser les stratégies de prise de profit en fonction de la force de la tendance.

  7. Éprouver les différences de paramètres entre différents produits afin de trouver des combinaisons optimales de paramètres.

Résumé

Dans l'ensemble, il s'agit d'une tendance typique suivant la stratégie, en utilisant les moyennes mobiles adaptatives d'Ehlers MESA pour construire un indicateur visualisé et générer des signaux de trading par le biais de croisements de lignes doubles.


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


Plus de