Estratégia de negociação de breakout escalável


Data de criação: 2023-10-30 17:25:17 última modificação: 2023-10-30 17:25:17
cópia: 0 Cliques: 630
1
focar em
1617
Seguidores

Estratégia de negociação de breakout escalável

Visão geral

A estratégia de ruptura escalável é uma estratégia de ruptura muito flexível e escalável, que identifica as principais áreas de resistência de suporte do preço e gera sinais de negociação quando o preço atravessa essas áreas. A estratégia pode ser aplicada a diferentes períodos de tempo, ajustando os parâmetros, e também pode ser facilmente integrada em vários tipos de condições de filtragem adicionais e mecanismos de gerenciamento de risco, o que permite a otimização de determinados ativos.

Princípio da estratégia

A estratégia começou com a utilizaçãoswings()A função calcula os pontos altos e baixos de flutuação dos preços atuais com base no período de retrospectiva.swingLookbackConfiguração de parâmetros, 20 linhas K ≠ por defeito, depois, quando o preço quebra o ponto alto de flutuação, faça mais; quando o preço cai o ponto baixo de flutuação, faça zero ≠

A lógica específica de fazer mais sinais é fazer mais quando o preço de fechamento é maior do que igual ao preço de alta de flutuação. A lógica específica de um sinal de fechamento é fazer menos quando o preço de fechamento é menor do que igual ao preço de baixa de flutuação.

A estratégia também estabelece um limite de perda, através dostopTargetPercentParâmetros para definir a amplitude de stop loss. Por exemplo, se o preço de stop loss é inferior a 5% do preço máximo, o preço de stop loss é superior a 5% do preço mínimo.

A vantagem da estratégia é que a frequência de negociação pode ser controlada ajustando o período de retorno. Quanto menor o período de retorno, mais sensível ao rompimento, maior a frequência de negociação. Por outro lado, o período de retorno é muito longo, a frequência de negociação diminui, mas pode perder oportunidades.

Vantagens estratégicas

  • Uma solução simples, inovadora e fácil de entender
  • A frequência de negociação pode ser controlada ajustando os parâmetros de otimização do período de retrospectiva
  • Mecanismos de gestão de risco como stop loss e stop loss móvel podem ser facilmente integrados
  • Escalável, pode ser adicionado a uma variedade de condições de filtragem para aumentar a taxa de ganho
  • Aplicável em qualquer período de tempo, adequado para transações diárias e de longa distância

Riscos e soluções

  • A definição de um período de retrospectiva muito curto pode levar a excesso de negociação.
  • O excesso de tempo de revisão pode ter deixado passar uma oportunidade de negócio
  • A largura excessiva do Stop Loss pode reduzir a margem de lucro
  • A paragem é muito estreita e pode causar uma frequente ação de paragem

Resposta:

  • Teste diferentes períodos de revisão para encontrar a melhor combinação de parâmetros
  • Optimizar a margem de parada e equilibrar o espaço de lucro e o controle de risco
  • Pode ser adicionado um stop loss móvel ou um stop loss circular para bloquear o lucro
  • Aumentar as condições de filtragem para aumentar a probabilidade de transações lucrativas

Direção de otimização

A estratégia pode ser melhorada em vários aspectos:

  1. Teste diferentes parâmetros de revisão para encontrar a combinação ideal;

  2. Testar diferentes ciclos de negociação, como 5 minutos, 15 minutos, 1 hora, etc., para escolher o melhor ciclo;

  3. Otimizar o limiar de perdas e equilibrar a margem de lucro e o controle de risco;

  4. Aumentar as condições de filtragem, como filtragem de volume de transação, filtragem de queda e queda, etc., para reduzir os sinais de baixa qualidade;

  5. Integrar mais mecanismos de gestão de riscos, como o stop loss móvel e o lock-in de lucros;

  6. Optimização de parâmetros, uso de otimização por etapas, pesquisa aleatória, etc. para encontrar o melhor parâmetro;

  7. Integração de tecnologia de aprendizagem de máquina para otimização automática de parâmetros usando IA.

Resumir

A estratégia de ruptura escalonável é um sistema de ruptura muito prático. É simples e fácil de usar, personalizável e pode ser otimizada para diferentes ativos, ajustando o período de retorno e integrando várias condições de filtragem. Ao mesmo tempo, pode ser facilmente integrado em vários tipos de mecanismos de gerenciamento de risco para controlar o risco de negociação.

Código-fonte da estratégia
/*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")