Stratégie de rupture dynamique SAR parabolique triple SMMA

Auteur:ChaoZhang est là., Date: 2023-11-08 11:53:09 Je vous en prie.
Les étiquettes:

img

Résumé

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 logique de la stratégie

La stratégie repose sur les points clés suivants:

  1. L'utilisation de l'indicateur SAR parabolique pour déterminer la direction de la tendance actuelle.

  2. 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.

  3. En long lorsque SAR se retourne vers le bas tandis que les trois lignes SMMA sont en hausse.

  4. On court quand le SAR monte alors que les trois lignes SMMA tombent.

  5. 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.

Analyse des avantages

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.

  1. Le SAR peut détecter rapidement les changements de tendance et saisir les opportunités d'inversion.

  2. Les SMMA triples filtrent efficacement le bruit du marché et évitent les fausses ruptures.

  3. L'utilisation de SMMA se traduit par des courbes plus lisses et moins d'interférences de la part des fléchettes MA.

  4. 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.

  5. Des paramètres flexibles permettent une optimisation pour différents marchés.

Analyse des risques

Il y a aussi quelques risques à prendre en considération:

  1. Le SAR peut souvent basculer pendant les tendances instables, ce qui augmente les coûts de l'excès de négociation.

  2. Les paramètres SMMA peuvent ne pas convenir à tous les instruments, ce qui nécessite une optimisation individuelle.

  3. L'arrêt SAR a un décalage de temps, ce qui augmente potentiellement les pertes.

  4. Les SAR peuvent inverser les fausses ruptures dans les tendances stables.

  5. 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:

  1. Ajustement des paramètres SAR en fonction de la volatilité pour réduire les sauts.

  2. Adaptation des périodes SMMA aux caractéristiques de l'instrument.

  3. Amélioration du stop loss, par exemple avec des ordres de retard ou de limite.

  4. Utilisation d'ordres limite pour le stop loss dans le trading actif.

  5. Des essais approfondis et des réglages de paramètres.

Directions d'optimisation

Sur la base de l'analyse ci-dessus, les optimisations peuvent impliquer:

  1. Optimisation des paramètres SAR pour des courbes plus lisses et moins de retours.

  2. Adaptation des longueurs de la SMMA en fonction des instruments de négociation.

  3. Utilisation de stop loss dynamiques comme les trailing stops ou les ordres limités.

  4. Utilisation d'ordres limite pour le stop loss dans le trading à haute fréquence.

  5. Ajout de filtres comme RSI, KD pour améliorer la qualité du signal.

  6. Améliorer les conditions d'entrée, par exemple en vérifiant les motifs des bougies avec des lancers SAR.

  7. Ajout de conditions de réentrée après le déclenchement de l'arrêt des pertes.

  8. Amélioration des profits en retard, fermeture partielle, niveaux surprenants.

  9. La régulation des paramètres est basée sur les résultats des tests antérieurs et l'analyse de la sensibilité.

Résumé

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)



Plus de