Cette stratégie est construite sur la base de l'indicateur Average True Range (ATR) pour construire une ligne SuperTrend pour juger de la direction de la tendance du marché et générer des signaux de trading.
La stratégie calcule l'ATR sur une certaine période et la compare au prix pour déterminer si le prix est dans un canal de tendance haussière. Plus précisément, elle calcule d'abord l'ATR, puis utilise la valeur de l'ATR multipliée par un facteur pour tracer les bandes supérieure et inférieure. Lorsque le prix est supérieur à la bande supérieure, une tendance haussière est identifiée. Lorsque le prix est inférieur à la bande inférieure, une tendance baissière est identifiée. Dans une tendance haussière, si le prix change de tendance haussière à tendance haussière, un signal d'achat est généré. Dans une tendance baissière, si le prix change de tendance haussière à tendance baissière, un signal de vente est déclenché.
La clé réside dans la construction de la référence de jugement de tendance - la ligne SuperTrend. La ligne SuperTrend est basée sur l'ATR en évolution dynamique, qui peut filtrer efficacement le bruit du marché et déterminer la direction de la tendance principale.
Le plus grand avantage de cette stratégie réside dans la combinaison des capacités d'identification et de suivi des tendances:
Les principaux risques de cette stratégie sont les suivants:
Les solutions possibles incluent l'optimisation de paramètres tels que la période ATR et le facteur SuperTrend, la combinaison avec d'autres indicateurs pour la vérification et la réduction des probabilités de signaux incorrects.
Des possibilités d'optimisation supplémentaires existent dans des domaines tels que:
L'optimisation approfondie promet d'améliorer encore la stabilité, l'adaptabilité et la rentabilité de la stratégie.
La stratégie démontre une grande stabilité, fiabilité et rentabilité dans l'ensemble. La construction de la ligne SuperTrend pour les principaux jugements de tendance et les signaux de trading est son plus grand point fort. Mais un certain degré d'effet de retard et de risques d'erreur de jugement existe.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Supertrend Strategy", overlay = true) Periods = input(10, title="ATR Period") src = input(hl2, title="Source") Multiplier = input(3.0, title="ATR Multiplier", step=0.1) changeATR = input(true, title="Change ATR Calculation Method?") showsignals = input(true, title="Show Buy/Sell Signals?") highlighting = input(true, title="Highlighter On/Off?") atr2 = sma(tr, Periods) atr = changeATR ? atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = nz(up[1], up) up := close[1] > up1 ? max(up, up1) : up dn = src + (Multiplier * atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor) strategy.entry("Buy", strategy.long, when=buySignal) strategy.entry("Sell", strategy.short, when=sellSignal) alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!") alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!") changeCond = trend != trend[1] alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")