
L’idée principale de cette stratégie est d’utiliser les signaux de fourchette dorée et de fourchette morte de l’indicateur EMA pour effectuer des opérations d’achat et de vente. Il trace simultanément plusieurs groupes d’EMAs rapides et lents et utilise leurs croisements pour juger des signaux de négociation.
Cette stratégie définit d’abord un ensemble de lignes moyennes EMA comprenant les lignes moyennes EMA rapides de l’ema1 à l’ema6 et les lignes moyennes EMA lentes de l’ema7 à l’ema12. Elle définit ensuite les signaux d’achat buy_signal et de vente sell_signal:
Ainsi, lorsque la courte courbe EMA est passée au-dessus de la courbe EMA à long terme, le marché est en tendance à la hausse et l’on achète; lorsque la courbe EMA est passée au-dessous de la courbe EMA à long terme, le marché est en tendance à la baisse et l’on vend.
Les stratégies permettent de déterminer la direction de la tendance en surveillant les croisements de la ligne moyenne EMA afin de prendre des décisions d’achat et de vente.
Cette stratégie présente les avantages suivants:
En utilisant l’indicateur de courbe moyenne EMA pour déterminer la tendance, l’EMA est plus lisse pour les variations de prix et peut filtrer le bruit du marché à court terme, ce qui rend les signaux de négociation plus fiables.
En traçant simultanément plusieurs ensembles de lignes moyennes EMA, il est possible de juger plus précisément les variations de tendance. Le croisement des lignes EMA rapides et lentes permet d’éviter de manquer des points d’inversion de tendance importants.
Les stratégies sont simples et claires, émettent des signaux de transaction via des croisements EMA, sont faciles à comprendre et à mettre en œuvre, et conviennent aux transactions quantitatives.
Les paramètres du cycle EMA sont personnalisables et peuvent être ajustés en fonction des variétés et des marchés, afin de répondre de manière flexible aux changements du marché.
La stratégie présente également les risques suivants:
Les EMA sont en retard et peuvent retarder le signal de négociation.
Le choix d’une mauvaise combinaison de paramètres EMA peut générer un mauvais signal de négociation.
L’intersection de l’EMA ne peut pas filtrer efficacement les fausses signaux causés par la zone de choc.
Il existe un risque de suradaptation, et l’espace d’optimisation des paramètres EMA est limité.
La réponse:
Le filtrage est effectué en combinaison avec d’autres indicateurs afin d’éviter les signaux erronés dans la zone de choc.
Tester la stabilité des paramètres de différentes périodes pour éviter une suradaptation.
Adapter la combinaison de paramètres stratégiques ou ajouter un mécanisme d’exit pour contrôler les risques.
Cette stratégie peut également être optimisée dans les domaines suivants:
Augmentation de la stratégie de stop loss et sortie de stop loss après un certain niveau de perte.
L’ajout d’un mécanisme de réentrée sur le marché, c’est-à-dire la mise en place d’un signal de réachat/vente.
Optimiser les combinaisons de paramètres de cycle croisé EMA achetés et vendus pour trouver les paramètres optimaux.
Ajouter d’autres indicateurs de jugement, effectuer une vérification multifactorielle, améliorer la qualité du signal.
Tester l’optimisation des paramètres de différentes variétés pour trouver la meilleure portée.
Les données de l’analyse de l’effet de levier sont utilisées pour calculer les variations de l’effet de levier.
Cette stratégie utilise la direction de la tendance croisée rapide et lente de la moyenne EMA pour acheter et vendre en fonction de signaux croisés. C’est une stratégie de suivi de tendance plus simple. Elle a l’avantage de juger des changements de tendance, mais il existe également des risques de retard et de zone de choc.
/*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")