Cette stratégie utilise l'indicateur Supertrend pour capturer les tendances du marché. L'indicateur Supertrend combine prix et volatilité, avec une ligne verte indiquant une tendance haussière et une ligne rouge indiquant une tendance baissière.
La stratégie de suivi dynamique de tendance utilise l'indicateur Supertrend pour capturer les tendances du marché, contrôler le risque grâce à un stop-loss dynamique et à un stop-loss de suivi, tout en bloquant les bénéfices avec un take-profit fixe. La stratégie est adaptable, a des signaux clairs et est facile à utiliser. Cependant, dans l'application pratique, l'attention doit être portée à l'optimisation des paramètres, au risque de marché houleux et au risque de changement soudain de tendance. En introduisant une analyse multi-temps, en optimisant la logique de stop-loss et de take-profit, en effectuant des tests de robustesse des paramètres et en mettant en œuvre d'autres mesures, les performances et la stabilité de la stratégie peuvent être encore améliorées.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Supertrend Strategy', overlay=true, format=format.price, precision=2) Periods = input.int(title='ATR Period', defval=10) src = input.source(hl2, title='Source') Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0) changeATR = input.bool(title='Change ATR Calculation Method ?', defval=true) showsignals = input.bool(title='Show Buy/Sell Signals ?', defval=true) highlighting = input.bool(title='Highlighter On/Off ?', defval=true) // ATR calculation atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 // Supertrend calculations up = src - Multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + Multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn // Trend direction trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend // Plotting upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0)) 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.new(color.green, 0)) plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0)) dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0)) 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.new(color.red, 0)) plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0)) // Highlighting 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 Highligter', color=longFillColor, transp=90) fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor, transp=90) // Alerts 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!') // Pip and trailing stop calculation pips = 50 pipValue = syminfo.mintick * pips trailingPips = 10 trailingValue = syminfo.mintick * trailingPips // Strategy if (buySignal) strategy.entry("Long", strategy.long, stop=dn, comment="SuperTrend Buy") if (sellSignal) strategy.entry("Short", strategy.short, stop=up, comment="SuperTrend Sell") // Take profit on trend change if (changeCond and trend == -1) strategy.close("Long", comment="SuperTrend Direction Change") if (changeCond and trend == 1) strategy.close("Short", comment="SuperTrend Direction Change") // Initial Stop Loss longStopLevel = up - pipValue shortStopLevel = dn + pipValue // Trailing Stop Loss var float longTrailStop = na var float shortTrailStop = na if (strategy.opentrades > 0) if (strategy.position_size > 0) // Long position if (longTrailStop == na or close > strategy.position_avg_price + trailingValue) longTrailStop := high - trailingValue strategy.exit("Stop Loss Long", from_entry="Long", stop=longTrailStop) if (strategy.position_size < 0) // Short position if (shortTrailStop == na or close < strategy.position_avg_price - trailingValue) shortTrailStop := low + trailingValue strategy.exit("Stop Loss Short", from_entry="Short", stop=shortTrailStop) // Initial Exit strategy.exit("Initial Stop Loss Long", from_entry="Long", stop=longStopLevel) strategy.exit("Initial Stop Loss Short", from_entry="Short", stop=shortStopLevel)