Cette stratégie utilise le croisement des pentes de deux EMA de longueurs différentes pour générer une tendance suivant les signaux.
Les conditions qui font entrer la stratégie sur le marché sont les suivantes:
Quand les pentes simples se croisent dans la direction opposée, il ferme la position.
La stratégie fonctionne mieux sur Bitcoin et les altcoins les plus liquides et capitalisés, mais fonctionne également bien sur les actifs volatils, en particulier s'ils sont souvent tendance. Ça fonctionne mieux sur une période de 4 heures.
Il existe également un filtre de volatilité en option, qui n'ouvre la position que si la différence entre les deux pistes est supérieure à une valeur spécifique.
Ça va être sympa!
Le noyau de cette stratégie est de comparer les pentes de deux EMA de longueurs différentes.
Tout d'abord, on calcule des EMA de longueur de 130 et 400, puis on calcule les pentes de chacune, puis on calcule des EMA de longueur 3 sur chaque pente pour obtenir des courbes de pente lissées.
Lorsque la pente rapide de l'EMA traverse au-dessus de la pente lente de l'EMA, un signal d'achat est généré.
Pour filtrer le bruit, une EMA de 200 périodes peut être utilisée comme filtre de tendance, en tenant compte des signaux longs uniquement lorsque le prix est au-dessus de la EMA et des signaux courts uniquement lorsque celui-ci est en dessous.
En outre, un filtre de volatilité peut être utilisé, générant des signaux uniquement lorsque la différence entre les deux pentes est supérieure à un seuil, afin d'éviter les cas où les pentes se croisent mais où la volatilité est insuffisante.
Lorsque les pentes rapides et lentes se croisent inversement, les positions sont fermées pour arrêter les profits/pertes.
L'utilisation de croix de pente pour générer des signaux peut effectivement suivre les tendances
La modification des combinaisons de périodes EMA peut s'adapter aux différentes conditions du marché
Le filtre de tendance évite d'être induit en erreur par l'action de prix houleuse
Le filtre de volatilité filtre les faux signaux
Logie simple et claire, facile à comprendre et à mettre en œuvre
Peut être utilisé sur plusieurs délais
Des ouvertures et des fermetures fréquentes peuvent se produire sur des marchés à large éventail
Les périodes de mise en marché EMA inappropriées pourraient manquer les points tournants de la tendance
Les paramètres doivent être adaptés à l'évolution des conditions du marché
Comme pour les systèmes d'AM, les grandes tendances peuvent s'inverser à des extrêmes
Essayez différentes combinaisons de périodes EMA pour trouver les paramètres optimaux
Choisir des paramètres en fonction des caractéristiques des actifs et des conditions du marché
Envisager d'ajouter des stratégies de stop loss pour contrôler le risque
Considérer l'ajustement dynamique des périodes EMA
Tester différentes valeurs de seuil de volatilité
Efficacité des essais dans les délais
La stratégie a une logique claire et facile à comprendre, utilisant des croix de pente EMA pour générer des signaux et suivre efficacement les tendances. Les filtres de tendance et de volatilité réduisent les transactions bruyantes.
/*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)