Estratégia de Momentum de Rebote de Fundo Triplo

EMA ATR MA SMA
Data de criação: 2025-01-10 15:49:30 última modificação: 2025-01-10 15:49:30
cópia: 0 Cliques: 401
1
focar em
1617
Seguidores

Estratégia de Momentum de Rebote de Fundo Triplo

Visão geral

Esta estratégia é um sistema de negociação quantitativa baseado em análise técnica, que negocia principalmente identificando padrões de fundo triplo e sinais de rompimento de momentum no mercado. A estratégia combina vários indicadores técnicos, como cruzamento de média móvel (MA), intervalo verdadeiro (ATR), canal de preço, etc. para construir um sistema de negociação completo. Esta estratégia realiza a identificação automática e a execução de transações do padrão de recuperação de fundo triplo de forma programada.

Princípio da estratégia

A lógica central da estratégia inclui os seguintes elementos-chave:

  1. Use o cruzamento das médias móveis rápidas (5 períodos) e lentas (20 períodos) para confirmar a direção da tendência do mercado
  2. O programa identifica automaticamente três pontos baixos consecutivos (baixo1, baixo2, baixo3) para formar um padrão de fundo triplo
  3. Use o indicador ATR para calcular a volatilidade e definir níveis dinâmicos de stop loss e take profit
  4. Após o terceiro fundo, quando o preço rompe a máxima de recuperação anterior, combinado com o sinal de cruzamento da média móvel, confirma o momento de ir muito longe
  5. Crie canais paralelos para visualizar faixas de movimento de preços e fornecer referências de mercado adicionais
  6. Defina condições dinâmicas de stop loss e take profit com base no ATR no momento da execução da negociação

Vantagens estratégicas

  1. Combine vários indicadores técnicos para melhorar a confiabilidade dos sinais de negociação
  2. Use o ATR para ajustar dinamicamente as posições de stop loss e take profit para se adaptar às mudanças na volatilidade do mercado
  3. Identifique automaticamente padrões de fundo triplo para reduzir o impacto do julgamento subjetivo
  4. Defina limites de intervalo de negociação para evitar negociações excessivas
  5. Fornece referência clara à estrutura do mercado por meio de ferramentas de visualização (canais paralelos e rótulos)
  6. A lógica da estratégia é clara, fácil de manter e otimizar

Risco estratégico

  1. Sinais falsos podem ocorrer em mercados voláteis
  2. O processo de identificação do padrão de fundo triplo pode ser afetado pelo ruído do mercado
  3. Os múltiplos de ATR fixos podem não ser adequados para todas as condições de mercado
  4. Perdas contínuas podem ocorrer durante períodos de mudanças drásticas de tendência
  5. A configuração do intervalo de negociação pode perder alguns sinais válidos

Direção de otimização da estratégia

  1. Introdução de indicadores de volume para confirmar a validade do rebote
  2. Ajuste dinamicamente os múltiplos de ATR de acordo com diferentes ambientes de mercado
  3. Adicione um filtro de força de tendência para melhorar a qualidade do sinal de negociação
  4. Otimize o algoritmo de reconhecimento do fundo triplo para melhorar a precisão
  5. Introduzir análise de ciclo de flutuação de mercado e otimizar configurações de intervalo de negociação
  6. Considere adicionar análise de simetria aos padrões de preços

Resumir

Esta estratégia implementa a estratégia de negociação de recuperação de fundo triplo de forma programática, combina vários indicadores técnicos e métodos de gerenciamento de risco e tem boa praticidade. Por meio de otimização e melhoria contínuas, espera-se que essa estratégia alcance melhor desempenho nas negociações reais. É recomendável realizar verificações de backtesting suficientes antes da negociação real e ajustar as configurações dos parâmetros de acordo com as condições específicas do mercado.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
strategy("反彈三次突破策略", overlay=true, initial_capital=100000, commission_value=0.001425, slippage=1)

// === 參數設定 ===
fast_length = input.int(5, title="快速均線週期")
slow_length = input.int(20, title="慢速均線週期")
atr_period = input.int(14, title="ATR 週期")
atr_factor = input.float(2.0, title="ATR 因子")
profit_factor = input.float(2.0, title="止盈因子")

// === 計算均線 ===
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.ema(close, slow_length)

// === 均線交叉訊號 ===
long_signal = ta.crossover(fast_ma, slow_ma)
short_signal = ta.crossunder(fast_ma, slow_ma)

// === 計算 ATR ===
atr = ta.atr(atr_period)

// === 反彈三次突破策略 ===
var float low1 = na
var float low2 = na
var float low3 = na
var bool trend_down = false
var bool long_breakout = false
var line lower_line = na
var line upper_line = na

if (na(low1) or na(low2) or na(low3))
    // 初始化低點
    low1 := na
    low2 := na
    low3 := na

if (close < low3 or na(low3))
    // 更新低點
    low1 := low2
    low2 := low3
    low3 := close
    trend_down := true

if (trend_down and close > low2 and close > low1)
    // 確認反轉且第三次反彈比第二次高
    trend_down := false
    long_breakout := true

// 清除前一個反彈通道
if (not na(lower_line))
    line.delete(lower_line)
if (not na(upper_line))
    line.delete(upper_line)

// 繪製新的反彈通道
if (not na(low1) and not na(low3))    
    lower_line := line.new(x1=bar_index[2], y1=low1, x2=bar_index, y2=low3, color=color.yellow, width=2)
    upper_line := line.new(x1=bar_index[2], y1=low1 + (low3 - low1), x2=bar_index, y2=low3 + (low3 - low1), color=color.yellow, width=2)

// === 進出場條件 ===
var float last_long_exit = na
var float last_short_exit = na
var float stop_loss_long = na
var float take_profit_long = na
var float stop_loss_short = na
var float take_profit_short = na

var label stop_loss_label_long = na
var label take_profit_label_long = na
var label stop_loss_label_short = na
var label take_profit_label_short = na

if (long_signal or long_breakout)
    if na(last_short_exit) or (time - last_short_exit) > 2 * 60 * 60 * 1000  // 確保多頭出場後有一段時間間隔
        // 做多
        strategy.entry("做多", strategy.long)
        // 止損設置為最近低點下方
        stop_loss_long := low3 - atr_factor * atr
        take_profit_long := close + profit_factor * atr  // 設定止盈位置
        strategy.exit("止盈/止損", "做多", stop=stop_loss_long, limit=take_profit_long)
        last_long_exit := time  // 記錄多頭出場時間

        // 刪除之前的止盈止損標籤
        if (not na(stop_loss_label_long))
            label.delete(stop_loss_label_long)
        if (not na(take_profit_label_long))
            label.delete(take_profit_label_long)

        // 繪製新的止盈止損標籤
        stop_loss_label_long := label.new(x=bar_index, y=stop_loss_long, text=str.tostring(math.round(stop_loss_long * 10) / 10), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)
        take_profit_label_long := label.new(x=bar_index, y=take_profit_long, text=str.tostring(math.round(take_profit_long * 10) / 10), color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)

if (short_signal)
    if na(last_long_exit) or (time - last_long_exit) > 2 * 60 * 60 * 1000  // 確保空頭出場後有一段時間間隔
        // 做空
        strategy.entry("做空", strategy.short)
        // 止損設置為最近高點上方
        stop_loss_short := high + atr_factor * atr
        take_profit_short := close - profit_factor * atr  // 設定止盈位置
        strategy.exit("止盈/止損", "做空", stop=stop_loss_short, limit=take_profit_short)
        last_short_exit := time  // 記錄空頭出場時間

        // 刪除之前的止盈止損標籤
        if (not na(stop_loss_label_short))
            label.delete(stop_loss_label_short)
        if (not na(take_profit_label_short))
            label.delete(take_profit_label_short)

        // 繪製新的止盈止損標籤
        stop_loss_label_short := label.new(x=bar_index, y=stop_loss_short, text=str.tostring(math.round(stop_loss_short * 10) / 10), color=color.red, style=label.style_label_down, textcolor=color.white, size=size.small)
        take_profit_label_short := label.new(x=bar_index, y=take_profit_short, text=str.tostring(math.round(take_profit_short * 10) / 10), color=color.green, style=label.style_label_up, textcolor=color.white, size=size.small)