Estratégia de saída do candelabro

Autora:ChaoZhang, Data: 2024-01-05 15:57:51
Tags:

img

Resumo

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.

Estratégia lógica

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.

Análise das vantagens

  • Utiliza linhas de stop loss dinâmicas da saída do candelabro para controlar eficazmente os riscos
  • Combina as variações de preços para capturar os movimentos de tendência
  • Implementa uma estratégia que evita reversões ascendentes/descendentes apenas comprando
  • Condições de alerta acionam notificações para monitorizar o estado da estratégia

Análise de riscos

  • A saída do candelabro é sensível à expansão da volatilidade que pode causar falsos sinais.
  • Não existem medidas de stop loss após a compra para limitar a perda
  • Nenhum mecanismo de obtenção de lucros para bloquear os ganhos

Mitigação de riscos:

  1. Adicionar filtro com outros indicadores para evitar sinais falsos
  2. Implementar stop loss para limitar a perda máxima %
  3. Incorporar paradas de lucro, tais como ajustamento dinâmico da linha de venda ou saídas parciais

Oportunidades de melhoria

  1. Teste diferentes conjuntos de parâmetros para otimizar entradas e saídas
  2. Adicionar filtros de indicadores para confirmar sinais e evitar sinais falsos
  3. Considerar permitir operações de compra e venda
  4. Introduzir mecanismos de stop loss e take profit

Conclusão

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")


Mais.