Stratégie de suivi dynamique SAR révolutionnaire à trois moyennes mobiles


Date de création: 2023-11-08 11:53:09 Dernière modification: 2023-11-08 11:53:09
Copier: 0 Nombre de clics: 776
1
Suivre
1617
Abonnés

Stratégie de suivi dynamique SAR révolutionnaire à trois moyennes mobiles

Aperçu

Il s’agit d’une stratégie de rupture combinant le SAR parallèle à la moyenne SMMA de trois périodes différentes. Il fait plus lorsque les trois courbes sont globalement en hausse et fait moins lorsque les trois courbes sont globalement en baisse, tout en combinant le SAR pour déterminer la direction de la tendance et ouvrir une position inversée lorsque le SAR se déplace.

Principe de stratégie

La stratégie est basée sur les points suivants:

  1. L’indicateur SAR parallèle permet de déterminer la direction de la tendance actuelle. L’indicateur SAR permet de suivre dynamiquement les variations de prix et de déterminer les tendances à plusieurs têtes et les tendances à vide.

  2. Mettre en place une moyenne SMMA de trois périodes différentes (quick 21, medium 50 et slow 200). Quand les trois moyennes sont toutes à la hausse, c’est une tendance à plusieurs têtes; quand elles sont toutes à la baisse, c’est une tendance à la tête nue.

  3. Si les trois lignes sont totalement en hausse, faites une entrée supplémentaire lorsque l’indicateur SAR est en baisse.

  4. Si les trois courbes sont complètement en baisse, alors le short est lancé.

  5. Le stop loss et le stop stop sont définis. Le stop loss est utilisé comme point de stop dynamique dans l’indicateur SAR, et le stop stop est défini comme un certain pourcentage du prix d’entrée.

Plus précisément, la stratégie commence par déterminer si le SAR de la BAR actuelle est en train de basculer. Si le SAR est en train de basculer de haut en bas et que les trois lignes sont globalement en hausse, faites plus; si le SAR est en train de basculer de haut en haut et que les trois lignes sont globalement en baisse, faites moins.

Après la tenue d’une position, la ligne d’arrêt est définie comme le prochain prix de l’indicateur SAR de BAR, avec SAR comme traceur dynamique de l’arrêt. La ligne d’arrêt est définie comme 10% du prix d’entrée.

Analyse des avantages

Cette stratégie, combinant les avantages d’un indicateur de jugement de tendance et d’une ligne moyenne à plusieurs périodes, permet d’entrer en jeu en temps opportun lors d’un renversement de tendance, tout en effectuant une fausse rupture par filtrage de la ligne moyenne. Les principaux avantages sont:

  1. Les SAR permettent de déterminer de manière dynamique les courants de tendance et de saisir rapidement les occasions de changement de tendance.

  2. Les trois lignes uniformes permettent de filtrer efficacement le bruit du marché et d’éviter les faux-bénéfices.

  3. La courbe est plus lisse et les fluctuations de la courbe réduisent l’interférence avec les transactions.

  4. En combinaison avec le paramètre Stop Loss Stop, vous pouvez contrôler les pertes ponctuelles tout en bloquant une partie des bénéfices.

  5. Les paramètres de la stratégie sont flexibles et peuvent être ajustés pour différents marchés afin d’optimiser l’effet de la stratégie.

Analyse des risques

Cette stratégie comporte également des risques, principalement:

  1. Dans une tendance oscillante, l’indicateur SAR peut avoir plusieurs virages fréquents, entraînant des frais de transaction supplémentaires en raison de transactions trop fréquentes.

  2. Les réglages triangulaires ne sont pas forcément adaptés à toutes les variétés et doivent être adaptés en fonction de la situation de chaque variété.

  3. Le stop loss est défini comme le prix SAR du prochain BAR avec un décalage temporel pouvant augmenter les pertes.

  4. Le problème de la fausse rupture dans une tendance stable qui fait pivoter le SAR peut être atténué en ajustant les paramètres pour lisser la courbe SAR.

  5. Les réglages de moyenne inappropriés peuvent également manquer une tendance ou générer de faux signaux, ce qui nécessite un test et une optimisation minutieux.

Les risques peuvent être optimisés en fonction des points suivants:

  1. Ajustez les paramètres SAR en fonction de la volatilité des variétés pour réduire la probabilité de virages fréquents.

  2. Adapter les paramètres des trois lignes pour les rendre plus proches des caractéristiques des différentes variétés.

  3. Optimiser les stratégies de stop loss, par exemple en utilisant des stop loss plus petits ou des stop loss mobiles.

  4. Le stop loss est utilisé dans les marchés où les transactions sont fréquentes, afin d’éviter que les points de glissement n’augmentent les pertes.

  5. Effectuez des tests d’optimisation des paramètres pour évaluer l’impact de la moyenne et des paramètres SAR sur l’efficacité de la stratégie.

Direction d’optimisation

D’après l’analyse ci-dessus, la stratégie peut être optimisée dans les domaines suivants:

  1. Optimiser les paramètres SAR, aplanir la courbe SAR, réduire la fréquence de virage de la courbe et éviter les transactions excessives.

  2. Adapter la longueur des trois lignes d’équilibre afin qu’elles correspondent mieux aux caractéristiques des variétés de transactions spécifiques et jouent un meilleur rôle de filtrage des tendances.

  3. Les stratégies d’arrêt dynamiques, telles que les arrêts mobiles, les arrêts de petite taille, etc., sont utilisées pour réduire les pertes causées par les arrêts.

  4. Le stop loss est utilisé pour limiter la perte de points de perte dans les marchés à haute fréquence.

  5. Ajout d’autres indicateurs pour filtrer, tels que RSI, KD, etc., pour améliorer la qualité du signal et réduire la probabilité de fausse percée.

  6. Optimiser les conditions d’entrée, en examinant simultanément la forme de la ligne K lors du virage SAR, pour éviter un signal de mauvaise qualité.

  7. Ajout d’une condition de réentrée si le cours continue à marcher dans la bonne direction après le stop loss.

  8. Améliorer les stratégies de freinage, telles que le freinage mobile, le freinage partiel, le freinage par décalage, etc., pour améliorer la rentabilité.

  9. Optimisation des paramètres sur la base des résultats des retours et évaluation de l’impact des paramètres sur l’efficacité de la stratégie globale.

Résumer

Dans l’ensemble, il s’agit d’une stratégie de rupture simple et pratique combinant un indicateur de suivi de tendance SAR et une ligne de parité. Elle utilise la sensibilité du SAR pour déterminer le virage de la tendance, ainsi que l’effet d’entraînement de la ligne de parité, pour entrer rapidement dans la tendance.

Code source de la stratégie
/*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)