Il s'agit d'une stratégie de trading de rupture combinant l'indicateur SAR parabolique et les lignes SMMA triples avec des périodes différentes. Il va long lorsque les trois lignes SMMA sont en hausse et court lorsque toutes sont en baisse, tout en utilisant l'indicateur SAR pour déterminer la direction de la tendance et en prenant des entrées de contre-tendance lorsque le SAR retourne les directions.
La stratégie repose sur les points clés suivants:
L'utilisation de l'indicateur SAR parabolique pour déterminer la direction de la tendance actuelle.
La mise en place de trois lignes SMMA avec des périodes différentes (ligne rapide 21, ligne moyenne 50, ligne lente 200). Lorsque les trois lignes sont en hausse, cela indique une tendance haussière. Lorsque toutes sont en baisse, cela indique une tendance baissière.
En long lorsque SAR se retourne vers le bas tandis que les trois lignes SMMA sont en hausse.
On court quand le SAR monte alors que les trois lignes SMMA tombent.
Incorporer un stop loss basé sur SAR et un profit à un certain pourcentage du prix d'entrée.
Plus précisément, la stratégie vérifie d'abord si SAR retourne les directions sur la barre actuelle. Si SAR retourne de haut en bas pendant que les SMMA sont en hausse, il va long. Si SAR retourne de bas en haut pendant que les SMMA sont en baisse, il va court.
Après l'entrée, le stop loss est réglé au prix SAR sur la barre suivante, en utilisant SAR comme stop loss dynamique.
Cette stratégie combine l'avantage d'un indicateur qui suit la tendance et des moyennes mobiles sur plusieurs délais, permettant des entrées en temps opportun lors d'inversions de tendance tout en filtrant les fausses ruptures avec les SMMA.
Le SAR peut détecter rapidement les changements de tendance et saisir les opportunités d'inversion.
Les SMMA triples filtrent efficacement le bruit du marché et évitent les fausses ruptures.
L'utilisation de SMMA se traduit par des courbes plus lisses et moins d'interférences de la part des fléchettes MA.
L'intégration d'un stop loss et d'un take profit aide à contrôler les pertes d'une seule transaction et à verrouiller les bénéfices partiels.
Des paramètres flexibles permettent une optimisation pour différents marchés.
Il y a aussi quelques risques à prendre en considération:
Le SAR peut souvent basculer pendant les tendances instables, ce qui augmente les coûts de l'excès de négociation.
Les paramètres SMMA peuvent ne pas convenir à tous les instruments, ce qui nécessite une optimisation individuelle.
L'arrêt SAR a un décalage de temps, ce qui augmente potentiellement les pertes.
Les SAR peuvent inverser les fausses ruptures dans les tendances stables.
Un mauvais réglage SMMA peut entraîner des tendances manquées ou de mauvais signaux.
Pour faire face aux risques, les optimisations peuvent se concentrer sur:
Ajustement des paramètres SAR en fonction de la volatilité pour réduire les sauts.
Adaptation des périodes SMMA aux caractéristiques de l'instrument.
Amélioration du stop loss, par exemple avec des ordres de retard ou de limite.
Utilisation d'ordres limite pour le stop loss dans le trading actif.
Des essais approfondis et des réglages de paramètres.
Sur la base de l'analyse ci-dessus, les optimisations peuvent impliquer:
Optimisation des paramètres SAR pour des courbes plus lisses et moins de retours.
Adaptation des longueurs de la SMMA en fonction des instruments de négociation.
Utilisation de stop loss dynamiques comme les trailing stops ou les ordres limités.
Utilisation d'ordres limite pour le stop loss dans le trading à haute fréquence.
Ajout de filtres comme RSI, KD pour améliorer la qualité du signal.
Améliorer les conditions d'entrée, par exemple en vérifiant les motifs des bougies avec des lancers SAR.
Ajout de conditions de réentrée après le déclenchement de l'arrêt des pertes.
Amélioration des profits en retard, fermeture partielle, niveaux surprenants.
La régulation des paramètres est basée sur les résultats des tests antérieurs et l'analyse de la sensibilité.
En résumé, il s'agit d'une stratégie de rupture simple et pratique combinant la sensibilité du SAR dans la capture des changements de tendance et l'effet de filtrage des moyennes mobiles. Il peut identifier rapidement les points d'inversion de tendance. L'utilisation du stop loss et du take profit aide à contrôler les risques et à verrouiller les bénéfices.
/*backtest start: 2023-10-08 00:00:00 end: 2023-11-07 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="SAR + 3SMMA with SL & TP", overlay=true, calc_on_order_fills=false, calc_on_every_tick=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD, commission_type= strategy.commission.percent, commission_value=0.03) start = input.float(0.02, step=0.01, group="SAR") increment = input.float(0.02, step=0.01, group="SAR") maximum = input.float(0.2, step=0.01, group="SAR") //Take Profit Inputs take_profit = input.float(title="Take Profit (%)", minval=0.0, step=0.1, defval = 0.1, group="Stop Loss and Take Profit", inline="TP") * 0.01 //Stop Loss Inputs stop_loss = input.float(title="StopLoss (%)", minval=0.0, step=0.1, defval=1, group="Stop Loss and Take Profit", inline="SL") * 0.01 // Smooth Moving Average fastSmmaLen = input.int(21, minval=1, title="Fast Length", group = "Smooth Moving Average") midSmmaLen = input.int(50, minval=1, title="Mid Length", group = "Smooth Moving Average") slowSmmaLen = input.int(200, minval=1, title="Slow Length", group = "Smooth Moving Average") src = input(close, title="Source", group = "Smooth Moving Average") smma(ma, src, len) => smma = 0.0 smma := na(smma[1]) ? ma : (smma[1] * (len - 1) + src) / len smma fastSma = ta.sma(src, fastSmmaLen) midSma = ta.sma(src, midSmmaLen) slowSma = ta.sma(src, slowSmmaLen) fastSmma = smma(fastSma, src, fastSmmaLen) midSmma = smma(midSma, src, midSmmaLen) slowSmma = smma(slowSma, src, slowSmmaLen) isSmmaUpward = ta.rising(fastSmma, 1) and ta.rising(midSmma, 1) and ta.rising(slowSmma, 1) var bool uptrend = na var float EP = na var float SAR = na var float AF = start var float nextBarSAR = na if bar_index > 0 firstTrendBar = false SAR := nextBarSAR if bar_index == 1 float prevSAR = na float prevEP = na lowPrev = low[1] highPrev = high[1] closeCur = close closePrev = close[1] if closeCur > closePrev uptrend := true EP := high prevSAR := lowPrev prevEP := high else uptrend := false EP := low prevSAR := highPrev prevEP := low firstTrendBar := true SAR := prevSAR + start * (prevEP - prevSAR) if uptrend if SAR > low firstTrendBar := true uptrend := false SAR := math.max(EP, high) EP := low AF := start else if SAR < high firstTrendBar := true uptrend := true SAR := math.min(EP, low) EP := high AF := start if not firstTrendBar if uptrend if high > EP EP := high AF := math.min(AF + increment, maximum) else if low < EP EP := low AF := math.min(AF + increment, maximum) if uptrend SAR := math.min(SAR, low[1]) if bar_index > 1 SAR := math.min(SAR, low[2]) else SAR := math.max(SAR, high[1]) if bar_index > 1 SAR := math.max(SAR, high[2]) nextBarSAR := SAR + AF * (EP - SAR) sarIsUpTrend = uptrend ? true : false sarFlippedDown = sarIsUpTrend and not sarIsUpTrend[1] ? true : false sarFlippedUp = not sarIsUpTrend and sarIsUpTrend[1] ? true : false longEntryCondition = isSmmaUpward and sarFlippedDown shortEntryCondition = not isSmmaUpward and sarFlippedUp if(longEntryCondition) strategy.entry("L", strategy.long, stop=nextBarSAR, comment="L") if(shortEntryCondition) strategy.entry("S", strategy.short, stop=nextBarSAR, comment="S") strategy.exit("CL", when=strategy.position_size > 0, limit=strategy.position_avg_price * (1+take_profit), stop=strategy.position_avg_price*(1-stop_loss)) strategy.exit("CS", when=strategy.position_size < 0, limit=strategy.position_avg_price * (1-take_profit), stop=strategy.position_avg_price*(1+stop_loss)) plot(SAR, style=plot.style_cross, linewidth=1, color=color.orange) plot(nextBarSAR, style=plot.style_cross, linewidth=1, color=color.aqua) plot(series = fastSmma, title="fastSmma", linewidth=1) plot(series = midSmma, title="midSmma", linewidth=2) plot(series = slowSmma, title="slowSmma", linewidth=3) plotchar(series = isSmmaUpward, title="isSmmaUpward", char='') plotchar(series=sarIsUpTrend, title="sarIsUpTrend", char='') plotchar(series=sarFlippedUp, title="sarFlippedUp", char='') plotchar(series=sarFlippedDown, title="sarFlippedDown", char='') plotchar(series=longEntryCondition, title="longEntryCondition", char='') plotchar(series=shortEntryCondition, title="shortEntryCondition", char='') plotchar(series=strategy.position_size > 0, title="inLong", char='') plotchar(series=strategy.position_size < 0, title="inShort", char='') //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)