Estratégia dinâmica de média móvel de stop-loss

Autora:ChaoZhang, Data: 2024-01-29
Tags:

img

Resumo

Esta estratégia adota a idéia de parada de tração dinâmica baseada em ATR e extremos de preço para calcular linhas de stop-loss longas e curtas. Combinada com a idéia de Chandelier Exit, ela julga a direção longa / curta com base no rompimento da linha de stop-loss. Quando a linha de stop-loss rompe para cima, ela é julgada como alta e longa entrada. Quando a linha de stop-loss rompe para baixo, ela é julgada como baixa e curta entrada.

A estratégia tem funções de gestão de stop-loss e de julgamento de sinais de entrada.

Estratégia lógica

A estratégia consiste nas seguintes partes principais:

  1. Calcular linhas de stop-loss longas/cortas com base no ATR

    Com base na duração do período ATR definida pelo utilizador e no múltiplo do multiplicador, o ATR em tempo real é calculado.

     longStop = Highest - ATR  
     shortStop = Lowest + ATR
    
  2. Julgar a direcção da negociação por ruptura

    Comparar as linhas de stop-loss entre a barra anterior e a barra atual.

     Long stop-loss line breakout upwards, long entry  
     Short stop-loss line breakout downwards, short entry   
    
  3. Estabelecer um stop loss e um take profit com base no rácio risco/recompensa

    Com base na relação risco/recompensa definida pelo utilizador, o riskRewardRatio, a distância de stop loss e a distância de take profit são calculadas a partir do ATR. A ordem de stop loss e a ordem de take profit são definidas ao abrir posições.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. Perda de retenção dinâmica

    A adoção de linhas de stop loss dinâmicas de trailing ajuda a impedir a perda em tempo hábil e controlar o risco de queda.

  2. Funções duplas

    A linha de stop loss serve tanto como ferramenta de gerenciamento de stop loss quanto como juiz de condições de entrada, reduzindo a complexidade da estratégia.

  3. Relatório risco/recompensa personalizável

    Procurar lucros mais elevados com uma relação risco-recompensa pré-definida.

  4. Fácil de compreender e de estender

    Estrutura simples, fácil de compreender e otimizar para extensão.

Análise de riscos

Pode existir algum risco para esta estratégia:

  1. Riscos bidireccionais

    Como uma estratégia de negociação bidireccional, assume riscos tanto longos como curtos.

  2. Dependência do parâmetro ATR

    Os parâmetros ATR afetam diretamente as linhas de stop loss e a frequência de negociação.

  3. Adaptação às tendências

    A estratégia é mais adequada para cenários de variação com rupturas súbitas, não é adequada para cenários de tendência forte.

As optimizações para enfrentar os riscos acima são:

  1. Incorporar indicadores de tendência

    Incorporar MA e outros indicadores de tendência para determinar a tendência do mercado, evitar negociações contra tendências.

  2. Optimização de parâmetros

    Otimizar as combinações dos parâmetros ATR e da relação risco/recompensa para obter um stop loss e um take profit mais razoáveis.

  3. Filtros adicionais

    Adicionar filtros de condições de volume de negociação ou de volatilidade para garantir a qualidade das negociações.

Orientações de otimização

Ainda há espaço para otimizar ainda mais a estratégia:

  1. Incorporar aprendizado de máquina

    Adotar modelos de aprendizagem de máquina para prever a tendência dos preços para uma maior precisão de entrada.

  2. Construir uma carteira livre de risco com opções

    Utilize opções para cobrir a flutuação dos preços dos ativos subjacentes e construir carteiras de arbitragem sem risco.

  3. Arbitragem de múltiplos ativos entre mercados

    Realizar arbitragem estatística entre diferentes mercados e classes de ativos para obter alfa estável.

  4. Negociação por algoritmos

    Aproveitar mecanismos de negociação de algoritmos para efetivamente testar estratégias e negociações.

Conclusão

Este artigo analisa minuciosamente uma estratégia quantitativa de negociação baseada em stop loss dinâmico. A estratégia tem simultaneamente funcionalidade de gerenciamento de stop loss e determinação de sinal de negociação, que controla efetivamente os riscos. Também discutimos as vantagens, riscos potenciais e otimizações futuras da estratégia. É uma estratégia de negociação muito prática que vale a pena pesquisa e aplicação adicionais.


/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true)

// Chandelier Exit Logic
length = input.int(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
useClose = input.bool(title='Use Close Price for Extremums', 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

// Risk-Reward Ratio
riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1)

// Calculate Take Profit and Stop Loss Levels
takeProfitLevel = atr * riskRewardRatio
stopLossLevel = atr

// Entry Conditions
longCondition = dir == 1 and dir[1] == -1
shortCondition = dir == -1 and dir[1] == 1

// Entry Signals
if (longCondition)
    strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel)
if (shortCondition)
    strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel)

longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green)
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red)

midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)

fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling')
fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling')

// Alerts
if (dir != dir[1])
    strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!")
if (longCondition)
    strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!")
if (shortCondition)
    strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")


Mais.