
La stratégie est basée sur l’indicateur de super-tendance, combiné à l’ATR pour définir dynamiquement une ligne de stop-loss afin de profiter de la forte tendance de l’Ethereum. Il peut être exécuté sur la paire de négociation ETH/USD de l’échange Coinbase.
La stratégie utilise un indicateur de suivi de tendance classique et un indicateur de tendance super pour juger de la direction de la tendance. L’indicateur de tendance super est composé de deux courbes, respectivement:
Il y a une position à vide lorsque le prix passe d’une tendance à la hausse à une tendance à la baisse; une position à plusieurs têtes lorsque le prix passe d’une tendance à la baisse à une tendance à la hausse.
En outre, la stratégie utilise également l’indicateur ATR pour ajuster dynamiquement la position de la ligne de stop. Plus précisément, la position de la ligne de stop à la hausse est la moyenne des prix les plus élevés et les plus bas moins ATR multiplié par un facteur; la position de la ligne de stop à la baisse est la moyenne des prix les plus élevés et les plus bas plus ATR multiplié par un facteur.
Si le prix revient à la ligne de rupture de la perte après l’émission du signal d’entrée, un arrêt de perte est effectué.
Il s’agit d’une stratégie de suivi de tendances plus mature qui présente les avantages suivants:
Cette stratégie comporte aussi des risques:
Pour réduire les risques mentionnés ci-dessus, il est possible d’ajuster le coefficient ATR de manière appropriée ou de filtrer les signaux de transaction en combinaison avec d’autres indicateurs. La position de stop-loss peut également être considérée comme un certain niveau de protection.
Il y a encore de la place pour optimiser cette stratégie:
Cette stratégie est une stratégie de suivi de tendance éprouvée et fiable dans son ensemble. Elle utilise des indicateurs de super-tendance pour déterminer la direction de la tendance et utilise l’ATR pour ajuster la position de stop-loss pour contrôler le risque tout en profitant.
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("SuperTrend Strategy",
overlay=true,
initial_capital=2e3,
process_orders_on_close=true,
commission_type=strategy.commission.percent,
commission_value=0.1
)
length = input(title="ATR Period", type=input.integer, defval=21)
mult = input(title="ATR Multiplier", type=input.float, step=.25, defval=6.2)
wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=false)
useDate = input(title="Start from Specific Date ?", defval=false)
yearStart = input(title="Start Year", defval=2019)
monthStart = input(title="Start Month", minval=1, maxval=12, defval=1)
dayStart = input(title="Start Day", minval=1, maxval=31, defval=1)
startTime = timestamp(yearStart, monthStart, dayStart, 0, 0)
startFrom = useDate ? time(timeframe.period) >= startTime : true
atr = mult * ta.atr(length)
longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? low[1] : close[1]) > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : 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)
plotshape(dir == 1 and dir[1] == -1 ? longStop : na, title="Long Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
plotshape(dir == -1 and dir[1] == 1 ? shortStop : na, title="Short Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
longCondition = dir[1] == -1 and dir == 1
if longCondition and startFrom
strategy.entry("Long", strategy.long, stop=longStop)
else
strategy.cancel("Long")
shortCondition = dir[1] == 1 and dir == -1
if shortCondition and startFrom
strategy.entry("Short", strategy.short, stop=shortStop)
else
strategy.cancel("Short")