
Cette stratégie utilise les indicateurs de la lampe suspendue pour déterminer la direction et la force de la rupture de prix, générant ainsi des signaux d’achat et de vente. Elle ne fait que des opérations d’achat et de vente.
Cette stratégie est basée sur l’indicateur de la lampe suspendue, qui consiste à définir une ligne de stop en fonction du prix le plus élevé, du prix le plus bas et de l’amplitude réelle moyenne des fluctuations. Plus précisément, la stratégie calcule l’amplitude réelle moyenne des fluctuations du 22e jour et la multiplie par un facteur (défaut 3). Ensuite, en fonction de cette valeur, elle définit une ligne de stop longue et une ligne de stop courte.
Cette stratégie ne fait que faire des opérations d’achat et de vente. Plus précisément, elle génère un signal d’achat lorsque le prix franchit la dernière ligne de rupture de la longue ligne de rupture.
Comment gérer les risques:
Cette stratégie utilise les paramètres dynamiques des stop-loss pour identifier les opportunités de reprise des prix. Elle n’achète que lorsque les prix franchissent la longue ligne de stop-loss vers le haut et ne vend que lorsque les prix franchissent la courte ligne de stop-loss.
/*backtest
start: 2023-12-28 00:00:00
end: 2024-01-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Chandelier Exit Strategy", overlay=true)
length = input(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
showLabels = input(title='Show Buy/Sell Labels ?', defval=true)
useClose = input(title='Use Close Price for Extremums ?', defval=true)
highlightState = input(title='Highlight State ?', defval=true)
atr = mult * ta.atr(length)
longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir
var color longColor = color.green
var color shortColor = color.red
longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.new(longColor, 0))
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=color.new(longColor, 0))
plotshape(buySignal and showLabels ? longStop : na, title='Buy Label', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(longColor, 0), textcolor=color.new(color.white, 0))
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.new(shortColor, 0))
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=color.new(shortColor, 0))
plotshape(sellSignal and showLabels ? shortStop : na, title='Sell Label', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(shortColor, 0), textcolor=color.new(color.white, 0))
changeCond = dir != dir[1]
alertcondition(changeCond, title='Alert: CE Direction Change', message='Chandelier Exit has changed direction!')
alertcondition(buySignal, title='Alert: CE Buy', message='Chandelier Exit Buy!')
alertcondition(sellSignal, title='Alert: CE Sell', message='Chandelier Exit Sell!')
// Define initial capital
initial_capital =25
// Trigger buy order and close buy order on sell signal
if buySignal
strategy.entry("Buy", strategy.long, qty = initial_capital / close)
if sellSignal
strategy.close("Buy")