Estratégia multiperíodo de canal gaussiano adaptável de momentum

ATR RSI HLC3 TR
Data de criação: 2025-02-08 14:49:15 última modificação: 2025-02-08 14:49:15
cópia: 1 Cliques: 360
1
focar em
1617
Seguidores

Estratégia multiperíodo de canal gaussiano adaptável de momentum

Visão geral

A estratégia é um sistema de negociação dinâmico baseado no Gauss Channel e no indicador RSI aleatório, combinando filtragem sazonal e gerenciamento de volatilidade. A estratégia identifica tendências de mercado adaptando-se ao Gauss Channel, faz confirmação de dinâmica usando o RSI aleatório e executa negociações dentro de uma determinada janela sazonal. O sistema também integra gerenciamento de posição baseado no ATR para controlar a abertura de risco de cada transação.

Princípio da estratégia

O núcleo da estratégia é um canal de preços construído com base em filtros de Gauss de múltiplos pólos. O canal forma uma trajectória ascendente e descendente através do cálculo do valor de Gauss do preço do HLC3 e do resultado da onda de Gauss, combinado com a amplitude de oscilação real (TR). A geração de sinais de negociação requer que os seguintes requisitos sejam cumpridos:

  1. Preços ultrapassam a barreira e os principais movimentos são para cima
  2. Indicador de RSI aleatório mostrando sobrecompra
  3. A hora atual dentro da janela sazonal predefinida
  4. Dimensão da posição com base no cálculo dinâmico ATR

Os sinais de equilíbrio são desencadeados pela queda do preço. Todo o sistema aumenta a estabilidade da negociação por meio de múltiplos mecanismos de filtragem.

Vantagens estratégicas

  1. Os filtros de Gauss têm uma excelente capacidade de filtragem de ruído, captando eficazmente as tendências reais do mercado
  2. O projeto de múltiplos pólos oferece limites mais precisos de canais de preços
  3. Integração de indicadores de dinâmica e tendência para aumentar a confiabilidade do sinal
  4. A filtragem sazonal ajuda a evitar um mercado desfavorável
  5. Gerenciamento de posições dinâmico garante a consistência do risco
  6. Os parâmetros do sistema podem ser otimizados para diferentes condições de mercado

Risco estratégico

  1. Filtros de Gauss são complexos e podem causar atrasos na execução
  2. As condições de filtragem múltipla podem ter perdido importantes oportunidades de transação.
  3. O sistema é sensível a configurações de parâmetros e precisa de uma otimização cuidadosa
  4. A configuração fixa da janela sazonal pode não se adaptar às mudanças no ambiente do mercado
  5. Durante períodos de alta volatilidade, o controle de posição baseado no ATR pode ser muito conservador.

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

  1. Introdução de janelas sazonais adaptáveis para ajustar os horários de negociação de forma dinâmica com base nas condições de mercado
  2. Otimizar a eficiência de cálculo do filtro de Gauss e reduzir a latência de execução
  3. Adicionar um mecanismo de regulação de taxa de flutuação do mercado para ajustar as condições de filtragem em diferentes cenários de mercado
  4. Desenvolver um sistema de gestão de posições mais flexível, equilibrando riscos e ganhos
  5. Aumentar a análise de múltiplos quadros temporais e aumentar a confiabilidade do sinal

Resumir

Trata-se de um sistema de rastreamento de tendências bem construído, que aumenta a estabilidade das negociações por meio de filtros em várias camadas e mecanismos de gerenciamento de risco. Embora haja algum espaço para otimização, a concepção geral corresponde aos requisitos da negociação quantitativa moderna. O sucesso da estratégia depende do ajuste preciso dos parâmetros e da adaptabilidade ao ambiente de mercado.

Código-fonte da estratégia
/*backtest
start: 2024-02-08 00:00:00
end: 2025-02-06 08:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"DIA_USDT"}]
*/

//@version=6
strategy("Demo GPT - Gold Gaussian Strategy", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1)

// ====== INPUTS ======
// Gaussian Channel
lengthGC = input.int(144, "Gaussian Period", minval=20)
poles = input.int(4, "Poles", minval=1, maxval=9)
multiplier = input.float(1.414, "Volatility Multiplier", minval=1)

// Stochastic RSI
smoothK = input.int(3, "Stoch K", minval=1)
lengthRSI = input.int(14, "RSI Length", minval=1)
lengthStoch = input.int(14, "Stoch Length", minval=1)
overbought = input.int(80, "Overbought Level", minval=50)

// Seasonal Filter (corrected)
startMonth = input.int(9, "Start Month (1-12)", minval=1, maxval=12)
endMonth = input.int(2, "End Month (1-12)", minval=1, maxval=12)

// Volatility Management
atrLength = input.int(22, "ATR Length", minval=5)
riskPercent = input.float(0.5, "Risk per Trade (%)", minval=0.1, step=0.1)

// ====== GAUSSIAN CHANNEL ======
f_filt9x(alpha, source, iterations) =>
    float f = 0.0
    float x = 1 - alpha
    int m2 = iterations == 9 ? 36 : iterations == 8 ? 28 : iterations == 7 ? 21 : 
           iterations == 6 ? 15 : iterations == 5 ? 10 : iterations == 4 ? 6 : 
           iterations == 3 ? 3 : iterations == 2 ? 1 : 0
    
    int m3 = iterations == 9 ? 84 : iterations == 8 ? 56 : iterations == 7 ? 35 : 
           iterations == 6 ? 20 : iterations == 5 ? 10 : iterations == 4 ? 4 : 
           iterations == 3 ? 1 : 0
    
    int m4 = iterations == 9 ? 126 : iterations == 8 ? 70 : iterations == 7 ? 35 : 
           iterations == 6 ? 15 : iterations == 5 ? 5 : iterations == 4 ? 1 : 0
    
    int m5 = iterations == 9 ? 126 : iterations == 8 ? 56 : iterations == 7 ? 21 : 
           iterations == 6 ? 6 : iterations == 5 ? 1 : 0
    
    int m6 = iterations == 9 ? 84 : iterations == 8 ? 28 : iterations == 7 ? 7 : 
           iterations == 6 ? 1 : 0
    
    int m7 = iterations == 9 ? 36 : iterations == 8 ? 8 : iterations == 7 ? 1 : 0
    
    int m8 = iterations == 9 ? 9 : iterations == 8 ? 1 : 0
    int m9 = iterations == 9 ? 1 : 0
    
    f := math.pow(alpha, iterations) * nz(source) +
      iterations * x * nz(f[1]) -
      (iterations >= 2 ? m2 * math.pow(x, 2) * nz(f[2]) : 0) +
      (iterations >= 3 ? m3 * math.pow(x, 3) * nz(f[3]) : 0) -
      (iterations >= 4 ? m4 * math.pow(x, 4) * nz(f[4]) : 0) +
      (iterations >= 5 ? m5 * math.pow(x, 5) * nz(f[5]) : 0) -
      (iterations >= 6 ? m6 * math.pow(x, 6) * nz(f[6]) : 0) +
      (iterations >= 7 ? m7 * math.pow(x, 7) * nz(f[7]) : 0) -
      (iterations >= 8 ? m8 * math.pow(x, 8) * nz(f[8]) : 0) +
      (iterations == 9 ? m9 * math.pow(x, 9) * nz(f[9]) : 0)
    f

f_pole(alpha, source, iterations) =>
    float fn = na
    float f1 = f_filt9x(alpha, source, 1)
    float f2 = iterations >= 2 ? f_filt9x(alpha, source, 2) : na
    float f3 = iterations >= 3 ? f_filt9x(alpha, source, 3) : na
    float f4 = iterations >= 4 ? f_filt9x(alpha, source, 4) : na
    float f5 = iterations >= 5 ? f_filt9x(alpha, source, 5) : na
    float f6 = iterations >= 6 ? f_filt9x(alpha, source, 6) : na
    float f7 = iterations >= 7 ? f_filt9x(alpha, source, 7) : na
    float f8 = iterations >= 8 ? f_filt9x(alpha, source, 8) : na
    float f9 = iterations == 9 ? f_filt9x(alpha, source, 9) : na
    
    fn := iterations == 1 ? f1 : 
         iterations == 2 ? f2 : 
         iterations == 3 ? f3 : 
         iterations == 4 ? f4 : 
         iterations == 5 ? f5 : 
         iterations == 6 ? f6 : 
         iterations == 7 ? f7 : 
         iterations == 8 ? f8 : 
         iterations == 9 ? f9 : na
    [fn, f1]

beta = (1 - math.cos(4 * math.asin(1) / lengthGC)) / (math.pow(1.414, 2 / poles) - 1)
alpha = -beta + math.sqrt(math.pow(beta, 2) + 2 * beta)
lag = int((lengthGC - 1) / (2 * poles))

srcAdjusted = hlc3 + (hlc3 - hlc3[lag])
[mainFilter, filt1] = f_pole(alpha, srcAdjusted, poles)
[trFilter, tr1] = f_pole(alpha, ta.tr(true), poles)

upperBand = mainFilter + trFilter * multiplier
lowerBand = mainFilter - trFilter * multiplier

// ====== STOCHASTIC RSI ======
rsiValue = ta.rsi(close, lengthRSI)
k = ta.sma(ta.stoch(rsiValue, rsiValue, rsiValue, lengthStoch), smoothK)
stochSignal = k >= overbought

// ====== SEASONAL FILTER (FIXED) ======
currentMonth = month(time)
inSeason = (currentMonth >= startMonth and currentMonth <= 12) or 
         (currentMonth >= 1 and currentMonth <= endMonth)

// ====== VOLATILITY MANAGEMENT ======
atr = ta.atr(atrLength)
positionSize = math.min((strategy.equity * riskPercent/100) / atr, strategy.equity * 0.5 / close)

// ====== TRADING LOGIC ======
trendUp = mainFilter > mainFilter[1]
priceAbove = close > upperBand
longCondition = trendUp and priceAbove and stochSignal and inSeason

exitCondition = ta.crossunder(close, lowerBand)

// ====== EXECUTION ======
if longCondition
    strategy.entry("Long", strategy.long, qty=positionSize)
    
if exitCondition
    strategy.close("Long")

// ====== VISUALIZATION ======
plot(upperBand, "Upper Band", color=color.new(#00FF00, 0))
plot(lowerBand, "Lower Band", color=color.new(#FF0000, 0))
bgcolor(inSeason ? color.new(color.blue, 90) : na, title="Season Filter")