Estratégia de negociação de ruptura com escalabilidade

Autora:ChaoZhang, Data: 2023-10-30 17:25:17
Tags:

img

Resumo

A estratégia de negociação de breakout escalável gera sinais de negociação quando o preço atravessa os principais níveis de suporte e resistência identificados pelas oscilações de preço. É uma estratégia de breakout altamente flexível e extensível. A estratégia pode ser adaptada a diferentes prazos ajustando parâmetros e pode facilmente integrar filtros adicionais e mecanismos de gerenciamento de risco para otimização.

Como funciona

A estratégia utiliza, em primeiro lugar, oswings()A função para calcular os altos e baixos do balanço com base no período de retrospecção.swingLookbackOs sinais longos são acionados quando o preço quebra acima da alta do swing, e os sinais curtos são acionados quando o preço quebra abaixo da baixa do swing.

Especificamente, um sinal longo é acionado quando o preço de fechamento é maior ou igual ao preço alto do swing. Um sinal curto é acionado quando o preço de fechamento é menor ou igual ao preço baixo do swing.

A estratégia estabelece igualmente um objectivo de cessação baseado nastopTargetPercentParâmetro para definir o nível de stop loss. Por exemplo, a stop loss longa pode ser definida em 5% abaixo do swing high, e a stop loss curta pode ser definida em 5% acima do swing low.

A vantagem desta estratégia é a flexibilidade para ajustar o período de retrospecção para controlar a frequência do comércio. Um período de retrospecção mais curto torna mais sensível a breakouts e aumenta a frequência do comércio. Um período de retrospecção mais longo diminui a sensibilidade e a frequência do comércio, mas pode perder oportunidades. Encontrar o período de retrospecção ideal é crucial para otimizar a estratégia.

Vantagens

  • Lógica de fuga simples, fácil de entender e implementar
  • Período de revisão permite otimizar parâmetros e controlar a frequência do comércio
  • Integra facilmente o stop loss, o trailing stop e outros sistemas de gestão de riscos
  • Muito extensivel para adicionar filtros e melhorar a rentabilidade
  • Aplicável a qualquer período de tempo para negociação intradiária ou swing

Riscos e atenuações

  • Período de revisão demasiado curto pode causar excesso de negociação
  • Período de reflexão demasiado longo pode perder oportunidades de negociação
  • Stop loss demasiado largo reduz o potencial de lucro
  • Stop loss muito apertado pode ser parado com frequência

Atenuantes:

  • Teste diferentes períodos de retrospecção para encontrar parâmetros ideais
  • Otimizar o nível de stop loss para equilibrar o lucro contra o controlo do risco
  • Adicione o trailing stop ou a saída do lustre para bloquear os lucros
  • Adicionar filtros para melhorar a qualidade dos sinais comerciais
  • Otimizar parâmetros através de backtesting

Oportunidades de melhoria

A estratégia pode ser reforçada de várias formas:

  1. Teste diferentes valores do período de observação para encontrar parâmetros ideais.

  2. Teste diferentes prazos, tais como 5m, 15m, 1h para determinar o melhor prazo.

  3. Otimizar a percentagem de stop loss para equilibrar o potencial de lucro versus a gestão de riscos.

  4. Adicionar filtros como volume, volatilidade para reduzir configurações inferiores.

  5. Integrar mais mecanismos de gestão de riscos como trailing stop, aproveitamento de lucros.

  6. Optimização de parâmetros através de análise de avanço e aprendizagem de máquina.

  7. Introduzir a IA/aprendizagem de máquina para otimização automática de parâmetros.

Conclusão

A estratégia de negociação de breakout escalável é um sistema de breakout robusto e personalizável. É simples de usar e altamente adaptável ajustando lookback e adicionando filtros. Pode facilmente integrar o gerenciamento de risco para controle de risco. Com otimização de parâmetros e integração de aprendizado de máquina, a estratégia pode evoluir ao longo do tempo para se adaptar aos mercados em mudança.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © deperp

//@version=5
// strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

// Backtest Time Period

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2020"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingLookback = input.int(20, title="Swing Lookback", minval=3)
stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1)

// Calculate lockback swings
swings(len) =>
    var highIndex = bar_index
    var lowIndex = bar_index
    var swingHigh = float(na)
    var swingLow = float(na)
    
    upper = ta.highest(len)
    lower = ta.lowest(len)
    
    if high[len] > upper
        highIndex := bar_index[len]
        swingHigh := high[len]

    if low[len] < lower
        lowIndex := bar_index[len]
        swingLow := low[len]

    [swingHigh, swingLow, highIndex, lowIndex]


// Strategy logic
[swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback)
longCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortCondition = inTradeWindow and (ta.crossunder(close, swingLow))

if longCondition
    strategy.entry("Long", strategy.long)
if shortCondition
    strategy.entry("Short", strategy.short)

longStopTarget = close * (1 + stopTargetPercent / 100)
shortStopTarget = close * (1 - stopTargetPercent / 100)

strategy.exit("Long Stop Target", "Long", limit=longStopTarget)
strategy.exit("Short Stop Target", "Short", limit=shortStopTarget)

// Plot break lines
// line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right)
// line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right)


// Alert conditions for entry and exit
longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow))

longExitCondition = close >= longStopTarget
shortExitCondition = close <= shortStopTarget

alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position")
alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position")
alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position")
alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")

Mais.