
La stratégie utilise le croisement de la pente de deux moyennes mobiles indicielles de différentes longueurs (EMA) pour générer un signal de suivi de tendance. La combinaison de ces deux paramètres fonctionne bien en utilisant par défaut les longueurs EMA de 130 et 400.
Faire plus lorsque la courbe rapide traverse la courbe lente et que le prix est supérieur à 200 cycles; faire moins lorsque la courbe rapide traverse la courbe lente et que le prix est inférieur à 200 cycles.
La pente de l’inclinaison est inverse à la pente de la croix.
La stratégie fonctionne mieux avec le Bitcoin et les altcoins à forte liquidité et forte valeur marchande, mais elle fonctionne aussi bien avec les actifs plus volatiles, en particulier lorsque ces actifs sont souvent tendance.
La meilleure période est de 4 heures.
Il est également équipé d’un filtre de volatilité optionnel, qui permet d’ouvrir des positions uniquement lorsque la différence entre les deux pentes est supérieure à une certaine limite, afin d’éviter que le bruit des fluctuations horizontales des prix ne soit supérieur au signal.
Le résultat est incroyable, profitez-en !
Le cœur de la stratégie est la comparaison de la courbe entre les moyennes mobiles des EMA de deux longueurs différentes.
On calcule d’abord les EMA de longueur 130 et 400, puis l’inclinaison de chacune d’elles, puis on obtient la courbe d’inclinaison après lissage de l’EMA de longueur 3 des inclinations respectives.
Un signal d’achat est généré lorsque la ligne rapide traverse l’inclinaison EMA sur l’inclinaison EMA lente; un signal de vente est généré lorsque la ligne rapide traverse l’inclinaison EMA lente sous l’inclinaison EMA lente.
Pour filtrer les oscillations, il est possible de choisir une EMA de 200 cycles comme filtre de tendance, en prenant en compte les signaux plus élevés uniquement lorsque le prix est supérieur à cette EMA et les signaux négatifs en prenant en compte les signaux plus bas.
En outre, il est possible de choisir un filtre de fluctuation qui ne génère un signal que lorsque la différence entre les deux pentes est supérieure à la valeur de seuil prédéfinie, afin de filtrer les situations où les pentes se croisent mais où la fluctuation est insuffisante.
Lorsque la pente est inversée, les positions sont liquidées et les pertes cessent.
Le croisement de la pente est utilisé pour générer des signaux permettant de suivre efficacement les tendances.
Adaptation de la palette de paramètres du cycle EMA pour s’adapter à différents environnements de marché
Les filtres de tendance évitent d’être induits en erreur par les chocs
Le filtre de fréquence d’oscillation peut filtrer les faux signaux
Les règles sont simples, claires et faciles à comprendre
Utilisable sur plusieurs périodes
Les événements d’ouverture et de fermeture peuvent se produire fréquemment en cas de forte secousse.
Les paramètres de l’EMA cyclique inappropriés peuvent manquer le tournant de la tendance
Les combinaisons de paramètres doivent être adaptées aux changements de l’environnement du marché.
Comme dans le système MA, les pertes peuvent être inversées à la fin d’une tendance majeure
Essayez différents paramètres de combinaison de cycles EMA pour trouver le meilleur paramètre
Paramètres de sélection en fonction des caractéristiques des différentes monnaies et de l’environnement du marché
Les stratégies de contrôle des risques de stop loss peuvent être envisagées.
Les paramètres cycliques de l’EMA peuvent être ajustés dynamiquement
Essayez différents paramètres de marge de fluctuation
Test sur différentes périodes
L’idée générale de la stratégie est claire et compréhensible. Elle utilise la croix de la courbe EMA pour générer des signaux permettant de suivre efficacement la tendance. La combinaison de filtres de tendance et de filtres de taux d’oscillation réduit le bruit des transactions.
/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy(title="Slopes",initial_capital=1000, default_qty_type=strategy.percent_of_equity, commission_type=strategy.commission.percent, commission_value=0.06, slippage = 2, default_qty_value=30, overlay=false)
//definizione input
start = timestamp(input(2018, "start year"), input(1, "start month"), input(1, "start day"), 00, 00)
end = timestamp(input(2020, "end year"), input(1, "end month"), input(1, "end day"), 00, 00)
average = input (title="Source MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
len1=input(130,title="Fast MA Length")
len2=input(400,title="Slow MA Length")
smoothingavg = input (title="Smoothing MAs Type", type=input.string, defval="EMA",options=["EMA","SMA"])
smoothingavglen = input (3,title="Smoothing MAs Length")
trendfilter=input(true,title="Trend Filter")
trendfilterperiod=input(200,title="Trend Filter MA Period")
trendfiltertype=input (title="Trend Filter MA Type", type=input.string, defval="EMA",options=["EMA","SMA"])
volatilityfilter=input(false,title="Volatility Filter")
volatilitydelta=input(0.0003,step=0.0001,title="Delta Slopes EMA")
//variabili
m1 = if average == "EMA"
ema(close,len1)
else
sma(close,len1)
m2=if average == "EMA"
ema(close,len2)
else
sma(close,len2)
slp1=(m1-m1[1])/m1
slp2=(m2-m2[1])/m2
e1=if smoothingavg == "EMA"
ema(slp1,smoothingavglen)
else
sma(slp1,smoothingavglen)
e2=if smoothingavg == "EMA"
ema(slp2,smoothingavglen)
else
sma(slp2,smoothingavglen)
plot(e1,color=color.yellow)
plot(e2,color=color.red)
//plot (abs(e1-e2),color=color.white)
//plot (ema(e1-e2,9),color=color.yellow)
//variabili accessorie e condizioni
TrendConditionL=if trendfiltertype =="EMA"
close>ema(close,trendfilterperiod)
else
close>sma(close,trendfilterperiod)
TrendConditionS=if trendfiltertype =="EMA"
close<ema(close,trendfilterperiod)
else
close<sma(close,trendfilterperiod)
VolatilityCondition = abs(e1-e2) > volatilitydelta
ConditionEntryL= if trendfilter == true
if volatilityfilter == true
e1>e2 and TrendConditionL and VolatilityCondition
else
e1>e2 and TrendConditionL
else
if volatilityfilter == true
e1>e2 and VolatilityCondition
else
e1>e2
ConditionEntryS= if trendfilter == true
if volatilityfilter == true
e1<e2 and TrendConditionS and VolatilityCondition
else
e1<e2 and TrendConditionS
else
if volatilityfilter == true
e1<e2 and VolatilityCondition
else
e1<e2
ConditionExitL=crossunder(e1,e2)
ConditionExitS=crossover(e1,e2)
if true
if ConditionExitS
if strategy.position_size < 0
strategy.close("SLPShort")
if true
if ConditionExitL
if strategy.position_size > 0
strategy.close("SLPLong")
if true
if ConditionEntryL
strategy.entry ("SLPLong",long=true)
if true
if ConditionEntryS
strategy.entry("SLPShort",long=false)