Esta estrategia utiliza el indicador Chandelier Exit para determinar la dirección y el impulso de las rupturas de precios y generar señales de compra y venta.
Esta estrategia se basa en el indicador Chandelier Exit, que establece líneas de stop-loss basadas en el máximo máximo, el mínimo mínimo y el rango verdadero promedio. Específicamente, calcula un ATR de 22 días y lo multiplica por un coeficiente (por defecto 3) para derivar valores para líneas de stop largas y cortas. La estrategia genera una señal de venta cuando el precio se rompe por debajo de la parada larga cuando es larga, y una señal de compra cuando el precio se rompe por encima de la parada corta cuando es corta.
La estrategia solo realiza operaciones de compra, desencadena una entrada larga cuando el precio se rompe por encima de la línea de parada larga anterior y crea una señal de salida cuando el precio cae por debajo de la línea de parada corta, cerrando la posición larga.
Mitigación de riesgos:
Esta estrategia identifica oportunidades de reversión utilizando las líneas de stop dinámicas del indicador de salida de la candela. Compra en las rupturas al alza de la línea de stop larga y vende cuando los precios caen por debajo de la línea de stop corta, implementando una estrategia unilateral simple que evita inversiones al alza / a la baja. Controla eficazmente el riesgo pero carece de disposiciones de stop loss y take profit. Las oportunidades de optimización incluyen la adición de filtros y mecanismos de stop loss / take profit para hacer que la estrategia sea más robusta.
/*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")