La stratégie SuperTrend est une stratégie de suivi de tendance basée sur le calcul de la plage moyenne vraie.
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.
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.
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é.
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.
Configurable pour le trading long uniquement ou bidirectionnel en fonction de différents styles de trading.
Il peut être utilisé sur n'importe quelle période et pour différents instruments de négociation.
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.
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é.
Le délai optimal pour chaque instrument de négociation est inconnu et doit être testé.
Le meilleur moment d'entrée n'est pas clair et un certain retard existe.
Il y a des risques de ne pas être sur le marché lorsque la tendance est faible.
Il existe des risques d'arrêt de perte. Un arrêt plus large peut être envisagé.
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.
L'apprentissage automatique ou les algorithmes génétiques peuvent être utilisés pour trouver les ensembles de paramètres optimaux.
L'optimisation des paramètres peut être effectuée pour chaque instrument afin de trouver la meilleure période ATR et le meilleur multiplicateur.
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.
Considérez l'utilisation de stratégies de verrouillage pour maintenir des positions lorsque vous n'êtes pas sur le marché.
La largeur du stop loss peut être assouplie et optimisée avec des indicateurs de force de tendance.
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()