Stratégie de négociation de tendance basée sur le croisement EMA

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

img

Résumé

L'idée de base de cette stratégie est d'utiliser les signaux de croix dorée et de croix morte de l'indicateur EMA pour prendre des décisions d'achat et de vente.

La logique de la stratégie

La stratégie définit d'abord plusieurs lignes EMA, y compris les EMA rapides ema1 à ema6 et les EMA lentes ema7 à ema12. Elle définit ensuite le signal d'achat buy_signal et le signal de vente sell_signal:

  • Le signal d'achat buy_signal est généré lorsque ema1 traverse au-dessus d'ema3.

  • Le signal de vente sell_signal est généré lorsque ema1 passe sous ema3.

Ainsi, lorsque l'EMA à court terme dépasse l'EMA à long terme, cela indique une tendance à la hausse sur le marché et un signal d'achat est déclenché.

La stratégie surveille le croisement des lignes EMA afin de déterminer la direction de la tendance et de prendre des décisions d'achat/de vente en conséquence.

Analyse des avantages

Les avantages de cette stratégie sont les suivants:

  1. L'utilisation de lignes EMA pour déterminer la tendance peut filtrer le bruit de marché à court terme et rendre les signaux de trading plus fiables.

  2. Les croisements entre les EMA rapides et lents aident à capturer les points de basculement importants de la tendance.

  3. La stratégie est simple et claire. Les signaux de trading sont générés par des croisements EMA, ce qui les rend faciles à comprendre et à mettre en œuvre pour le trading quantitatif.

  4. Les paramètres de la période EMA sont personnalisables pour s'adapter à différents produits et marchés.

Analyse des risques

Les risques de cette stratégie comprennent:

  1. Les lignes EMA ont des effets de retard qui peuvent retarder les signaux de négociation.

  2. Une mauvaise sélection des paramètres EMA peut générer des signaux incorrects.

  3. Les croisements de l'EMA ne parviennent pas à filtrer efficacement les faux signaux sur les marchés de gamme.

  4. Il existe des risques de surajustement en raison de l'espace limité d'optimisation des paramètres de l'EMA.

Les solutions:

  1. Ajoutez des filtres avec d'autres indicateurs pour éviter de mauvais signaux sur les marchés à fourchette.

  2. Stabilité d'essai des différents paramètres de période pour éviter le surmontage.

  3. Ajuster les paramètres ou ajouter des mécanismes de sortie pour contrôler les risques.

Directions d'optimisation

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

  1. Ajouter un stop loss aux positions de sortie lorsque les pertes atteignent un seuil.

  2. Mettre en œuvre une logique de réentrée avec des signaux d'achat/vente supplémentaires.

  3. Optimiser les paramètres de la période de croisement EMA pour obtenir les meilleurs résultats.

  4. Incorporer d'autres indicateurs pour la validation multifactorielle afin d'améliorer la qualité du signal.

  5. Test de réglage des paramètres sur différents produits afin de trouver une applicabilité optimale.

  6. Considérez le glissement dans le trading en direct et optimisez via le backtesting.

Résumé

Il s'agit d'une stratégie simple de suivi de tendance basée sur le croisement EMA. Il peut identifier les changements de tendance, mais comporte également des risques tels que les effets de retard et les coupes de fouet.


/*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=3
//Companion Strategy script to my Cloud Study. Enjoy! -MP
// study("MP's Cloud Study", overlay=true)
strategy(title="MP's Cloud Strat'", shorttitle="MP's Cloud Strat", overlay=true, precision=6, pyramiding=0, initial_capital=10000, currency="USD", default_qty_type=strategy.percent_of_equity,calc_on_order_fills= false, calc_on_every_tick=false, default_qty_value=100.0, commission_type=strategy.commission.percent, commission_value=0.05)

//bgcolor ( color=black, transp=20, title='Blackground', editable=true)

src = close, len1 = input(2, minval=1, title="Short EMA")
src2 = close, len3 = input(7, minval=1, title="Long EMA")
emaShort = ema(src, len1)
emaLong = ema(src2, len3)


StartYear = input(2018, "Start Year")
StartMonth = input(01, "Start Month")
StartDay = input(18, "Start Day")

 
StopYear = input(2018, "Stop Year")
StopMonth = input(12, "Stop Month")
StopDay = input(26, "Stop Day")
tradeStop = timestamp(StopYear,StopMonth,StopDay,0,0)

//src = close, 
//len1 = input(3, minval=1, title="Fast EMA 1")
len2 = input(3, minval=1, title="Fast EMA 2")
//len3 = input(8, minval=1, title="Fast EMA 3")
len4 = input(5, minval=1, title="Fast EMA 4")
len5 = input(8, minval=1, title="Fast EMA 5")
len6 = input(10, minval=1, title="Fast EMA 6")
//Slow EMA
len7 = input(30, minval=1, title="Slow EMA 7")
len8 = input(35, minval=1, title="Slow EMA 8")
len9 = input(40, minval=1, title="Slow EMA 9")
len10 = input(45, minval=1, title="Slow EMA 10")
len11 = input(50, minval=1, title="Slow EMA 11")
len12 = input(60, minval=1, title="Slow EMA 12")

//Fast EMA
ema1 = ema(src, len1)
ema2 = ema(src, len2)
ema3 = ema(src, len3)
ema4 = ema(src, len4)
ema5 = ema(src, len5)
ema6 = ema(src, len6)
//Slow EMA
ema7 = ema(src, len7)
ema8 = ema(src, len8)
ema9 = ema(src, len9)
ema10 = ema(src, len10)
ema11 = ema(src, len11)
ema12 = ema(src, len12)

//Fast EMA Color Rules
//colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6)
colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6)
//Slow EMA Color Rules
//colslowL = ema7 > ema8 and ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12 
//colslowS = ema7 < ema8 and ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12 
//Fast EMA Final Color Rules
//colFinal = colfastL and colslowL? aqua : colfastS and colslowS? orange : gray
//Slow EMA Final Color Rules
//colFinal2 = colslowL  ? lime : colslowS ? red : gray
//Fast EMA Plots
p1=plot(ema1, title="Fast EMA 1", style=line, linewidth=2, color=silver)
plot(ema2, title="Fast EMA 2", style=line, linewidth=1, color=silver)
plot(ema3, title="Fast EMA 3", style=line, linewidth=1, color=silver)
plot(ema4, title="Fast EMA 4", style=line, linewidth=1, color=silver)
plot(ema5, title="Fast EMA 5", style=line, linewidth=1, color=silver)
p2=plot(ema6, title="Fast EMA 6", style=line, linewidth=2, color=silver)
fill(p1,p2,color=silver, transp=60)
//Slow EMA Plots
//p3=plot(ema7, title="Slow EMA 7", style=line, linewidth=4, color=colFinal2)
//plot(ema8, title="Slow EMA 8", style=line, linewidth=3, color=colFinal2)
//plot(ema9, title="Slow EMA 9", style=line, linewidth=3, color=colFinal2)
//plot(ema10, title="Slow EMA 10", style=line, linewidth=3, color=colFinal2)
//plot(ema11, title="Slow EMA 11", style=line, linewidth=3, color=colFinal2)
//p4=plot(ema12, title="Slow EMA 12", style=line, linewidth=4, color=colFinal2)
//fill(p3,p4, color=silver, transp=60)



//Plot the Ribbon
ma1=plot( emaShort,color=rising(emaShort,2)?green:red,linewidth=1,join=true,transp=20,title="Short")
ma2=plot( emaLong,color=rising(emaLong,2)?green:red,linewidth=1,join=true,transp=20,title="Long")
fcolor = emaShort>emaLong?green:red
fill(ma1,ma2,color=fcolor,transp=80,title="Ribbon Fill")


//fast = 4, slow = 16
//fastMA = ema(close, fast)
//slowMA = ema(close, slow)
//plot(fastMA, color=green, title = "buy/sell")
//plot(slowMA, color=red, title = "base")


//Conditions
buy_signal = crossover(ema1,ema3)
sell_signal = crossunder(ema1,ema3)

plotshape(sell_signal, style=shape.triangleup, color = red, text="Start Short")
plotshape(buy_signal, style=shape.triangledown, color = green, text="Start Long")

alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01')
alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01')

//alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency')
//alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency')


testStartYear = input(2018, "From Year") 
testStartMonth = input(1, "From Month")
testStartDay = input(1, "From Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "To Year")
testStopMonth = input(1, "To Month")
testStopDay = input(1, "To Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

if testPeriod()
    if buy_signal
        strategy.entry("Long", true)
    

    if sell_signal
        strategy.close("Long")

Plus de