Esta estratégia utiliza o indicador Chandelier Exit para determinar a direção e o ímpeto das rupturas de preços e gerar sinais de compra e venda.
Esta estratégia é baseada no indicador Chandelier Exit, que define linhas de stop-loss com base no máximo máximo, no mínimo mínimo e na faixa média verdadeira. Especificamente, ele calcula um ATR de 22 dias e o multiplica por um coeficiente (padrão 3) para derivar valores para linhas de stop longas e curtas. A estratégia gera um sinal de venda quando o preço quebra abaixo da parada longa quando longo e um sinal de compra quando o preço quebra acima da parada curta quando curto.
A estratégia só executa operações de compra. Ela aciona uma entrada longa quando o preço quebra acima da linha de parada longa anterior e cria um sinal de saída quando o preço cai abaixo da linha de parada curta, fechando a posição longa.
Mitigação de riscos:
Esta estratégia identifica oportunidades de reversão usando as linhas de stop dinâmicas do indicador de saída do candelabro. Ela compra em quebras ascendentes da linha de stop longa e vende quando os preços caem abaixo da linha de stop curta, implementando uma estratégia unilateral simples que evita reversões ascendentes/descendentes. Ela controla efetivamente o risco, mas não possui provisões de stop loss e take profit. As oportunidades de otimização incluem a adição de filtros e mecanismos de stop loss/take profit para tornar a estratégia mais 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")