Cette stratégie utilise l'indicateur Chandelier Exit pour déterminer la direction et l'élan des écarts de prix et générer des signaux d'achat et de vente.
Cette stratégie est basée sur l'indicateur Chandelier Exit qui définit des lignes de stop-loss basées sur le plus haut, le plus bas et la plage moyenne vraie. Plus précisément, il calcule un ATR de 22 jours et le multiplie par un coefficient (défaut 3) pour dériver des valeurs pour les lignes de stop longues et courtes.
La stratégie n'effectue que des opérations d'achat. Elle déclenche une entrée longue lorsque le prix dépasse la ligne d'arrêt longue précédente et crée un signal de sortie lorsque le prix tombe en dessous de la ligne d'arrêt courte, fermant la position longue.
Réduction des risques:
Cette stratégie identifie les opportunités d'inversion en utilisant les lignes d'arrêt dynamiques de l'indicateur de sortie de l'échandelier. Elle achète sur les ruptures à la hausse de la ligne d'arrêt longue et vend lorsque les prix tombent en dessous de la ligne d'arrêt courte, en mettant en œuvre une stratégie unilatérale simple qui évite les inversions à la hausse / à la baisse. Elle contrôle efficacement le risque mais manque de dispositions de stop loss et de profit. Les opportunités d'optimisation comprennent l'ajout de filtres et de mécanismes de prise de stop loss / profit pour rendre la stratégie plus robuste.
/*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")