Stratégie de SuperTrend

Auteur:ChaoZhang est là., Date: 2023-10-13 17h03 et 55 min
Les étiquettes:

Résumé

La stratégie SuperTrend est une stratégie de suivi de tendance basée sur le calcul de la plage moyenne vraie.

La logique de la stratégie

La stratégie calcule d'abord la plage moyenne vraie (ATR) sur une certaine période. Puis elle utilise la valeur ATR multipliée par un facteur de mise à l'échelle pour calculer la ligne de stop loss longue et la ligne de stop loss courte. Le calcul spécifique est le suivant:

atr = mult * atr(length)

longStop = hl2 - atr 

shortStop = hl2 + atr

où longueur est la période à calculer pour l'ATR et mult est le facteur d'échelle pour l'ATR.

Après avoir calculé les lignes de stop loss, la stratégie continue de juger si le prix franchit la ligne de stop loss de la barre précédente pour déterminer la direction de la tendance:

dir := dir == -1 and close > shortStopPrev ? 1 :  
         dir == 1 and close < longStopPrev ? -1 : dir

Lorsque la ligne de stop-loss longue est brisée, la tendance est considérée comme haussière.

Selon le changement de direction de la tendance, des signaux d'achat et de vente sont générés:

buySignal = dir == 1 and dir[1] == -1

sellSignal = dir == -1 and dir[1] == 1 

Enfin, les actions correspondantes sont effectuées lorsque des signaux d'achat ou de vente apparaissent.

Les avantages

  1. L'utilisation de l'ATR pour calculer les lignes de stop loss peut filtrer efficacement le bruit du marché et capturer des signaux de tendance plus fiables.

  2. La stratégie comporte peu de paramètres faciles à comprendre et à utiliser. La période ATR et le multiplicateur peuvent être ajustés pour s'adapter aux différentes conditions du marché.

  3. L'utilisation d'une rupture de la ligne de stop-loss pour déterminer le changement de direction de la tendance peut contrôler efficacement les risques et arrêter la perte à temps.

  4. Configurable pour le trading long uniquement ou bidirectionnel en fonction de différents styles de trading.

  5. Il peut être utilisé sur n'importe quelle période et pour différents instruments de négociation.

Les risques

  1. Dans les marchés à fourchette, l'ATR peut être tiré plus haut, ce qui entraîne un stop loss plus large et plus de faux signaux.

  2. La combinaison optimale de paramètres est incertaine. La période ATR et le multiplicateur doivent être optimisés en fonction des conditions du marché.

  3. Le délai optimal pour chaque instrument de négociation est inconnu et doit être testé.

  4. Le meilleur moment d'entrée n'est pas clair et un certain retard existe.

  5. Il y a des risques de ne pas être sur le marché lorsque la tendance est faible.

  6. Il existe des risques d'arrêt de perte. Un arrêt plus large peut être envisagé.

Amélioration

  1. D'autres indicateurs tels que le MACD, le RSI peuvent être incorporés pour la filtration afin d'éviter les mauvais signaux sur les marchés à courants.

  2. L'apprentissage automatique ou les algorithmes génétiques peuvent être utilisés pour trouver les ensembles de paramètres optimaux.

  3. L'optimisation des paramètres peut être effectuée pour chaque instrument afin de trouver la meilleure période ATR et le meilleur multiplicateur.

  4. Les indicateurs de volume peuvent être utilisés pour déterminer un meilleur calendrier d'entrée et éviter une entrée prématurée.

  5. Considérez l'utilisation de stratégies de verrouillage pour maintenir des positions lorsque vous n'êtes pas sur le marché.

  6. La largeur du stop loss peut être assouplie et optimisée avec des indicateurs de force de tendance.

Conclusion

La stratégie SuperTrend utilise des lignes de stop loss dynamiques calculées à partir de l'ATR pour détecter les changements de tendance lorsque la rupture de prix se produit. C'est un système de suivi de tendance relativement fiable et contrôlé par le risque. La stratégie est simple à utiliser et applicable à divers instruments, mais les paramètres et les règles doivent être optimisés pour une meilleure performance sur différents marchés.


/*backtest
start: 2023-09-12 00:00:00
end: 2023-10-12 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000)

LongOnly = input(title="Long Only ?", type=input.bool, defval=true)
length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2019, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2020, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

////////////////////////////////////////////////////////////////////////////////


atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 : 
   dir == 1 and close < longStopPrev ? -1 : dir

longColor = color.green
shortColor = color.red


plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

if LongOnly
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    
    if(sellSignal and time_cond)
        strategy.close("Long")
else
    if buySignal and time_cond
        strategy.entry("Long", strategy.long, comment="Long")
    else
        strategy.cancel("Long")
    
    
    if sellSignal and time_cond
        strategy.entry("Short", strategy.short, comment="Short")
    else
        strategy.cancel("Short")

if not time_cond
    strategy.close_all()


Plus de