
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.
La stratégie est basée sur les points suivants:
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.
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.
Si les trois lignes sont totalement en hausse, faites une entrée supplémentaire lorsque l’indicateur SAR est en baisse.
Si les trois courbes sont complètement en baisse, alors le short est lancé.
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.
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:
Les SAR permettent de déterminer de manière dynamique les courants de tendance et de saisir rapidement les occasions de changement de tendance.
Les trois lignes uniformes permettent de filtrer efficacement le bruit du marché et d’éviter les faux-bénéfices.
La courbe est plus lisse et les fluctuations de la courbe réduisent l’interférence avec les transactions.
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.
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.
Cette stratégie comporte également des risques, principalement:
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.
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é.
Le stop loss est défini comme le prix SAR du prochain BAR avec un décalage temporel pouvant augmenter les pertes.
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.
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:
Ajustez les paramètres SAR en fonction de la volatilité des variétés pour réduire la probabilité de virages fréquents.
Adapter les paramètres des trois lignes pour les rendre plus proches des caractéristiques des différentes variétés.
Optimiser les stratégies de stop loss, par exemple en utilisant des stop loss plus petits ou des stop loss mobiles.
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.
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.
D’après l’analyse ci-dessus, la stratégie peut être optimisée dans les domaines suivants:
Optimiser les paramètres SAR, aplanir la courbe SAR, réduire la fréquence de virage de la courbe et éviter les transactions excessives.
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.
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.
Le stop loss est utilisé pour limiter la perte de points de perte dans les marchés à haute fréquence.
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.
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é.
Ajout d’une condition de réentrée si le cours continue à marcher dans la bonne direction après le stop loss.
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é.
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.
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.
/*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)