Estrategia multiperiodo de canal gaussiano adaptativo de momentum

ATR RSI HLC3 TR
Fecha de creación: 2025-02-08 14:49:15 Última modificación: 2025-02-08 14:49:15
Copiar: 1 Número de Visitas: 360
1
Seguir
1617
Seguidores

Estrategia multiperiodo de canal gaussiano adaptativo de momentum

Descripción general

La estrategia es un sistema de trading dinámico basado en Gauss Channel y el indicador RSI aleatorio, que combina filtración estacional y gestión de la volatilidad. La estrategia identifica tendencias en el mercado adaptándose a Gauss Channel, utiliza el RSI aleatorio para confirmar la dinámica y ejecutar operaciones dentro de una ventana estacional específica.

Principio de estrategia

El núcleo de la estrategia es un canal de precios basado en un filtro de Gauss multipolar. El canal forma una trayectoria ascendente y descendente mediante el cálculo de los valores de Gauss del precio de HLC3 y los resultados de las fluctuaciones de la amplitud de fluctuación real (TR). La generación de señales de negociación requiere que se cumplan los siguientes requisitos:

  1. Los precios rompen el carril y las principales ondas suben
  2. El indicador RSI aleatorio muestra un estado de sobrecompra
  3. La hora actual dentro de la ventana estacional predeterminada
  4. El tamaño de la posición se basa en el cálculo dinámico de ATR

Las señales de equilibrio se activan cuando el precio cae hacia abajo. El sistema entero utiliza múltiples mecanismos de filtración para mejorar la estabilidad de la operación.

Ventajas estratégicas

  1. Los filtros de Gauss tienen una excelente capacidad de filtración de ruido y son capaces de capturar las tendencias reales del mercado.
  2. El diseño de múltiples puntos ofrece un límite más preciso de los canales de precios
  3. Integración de indicadores de dinámica y tendencia para mejorar la fiabilidad de la señal
  4. El filtro estacional ayuda a evitar un mercado desfavorable
  5. La gestión dinámica de las posiciones garantiza la coherencia de los riesgos
  6. Los parámetros del sistema se pueden optimizar en función de las diferentes condiciones del mercado

Riesgo estratégico

  1. Los filtros de Gauss son complejos y pueden causar retrasos en la ejecución.
  2. Las condiciones de filtración múltiple pueden perder oportunidades de negocio importantes
  3. El sistema es sensible a la configuración de parámetros y requiere una optimización cuidadosa
  4. La configuración fija de la ventana estacional puede no adaptarse a los cambios en el entorno del mercado
  5. El control de posiciones basado en ATR puede ser demasiado conservador durante la alta volatilidad

Dirección de optimización de la estrategia

  1. Introducción de ventanas estacionales adaptadas para ajustar dinámicamente las horas de negociación según las condiciones del mercado
  2. Optimización de la eficiencia de cálculo de los filtros de Gauss y reducción de la latencia de ejecución
  3. Participar en el mecanismo de regulación de la volatilidad del mercado para ajustar las condiciones de filtración en diferentes entornos de mercado
  4. Desarrollar un sistema de gestión de posiciones más flexible, que equilibre riesgos y beneficios
  5. Aumentar el análisis de múltiples marcos de tiempo para mejorar la fiabilidad de la señal

Resumir

Se trata de un sistema de seguimiento de tendencias bien construido, que mejora la estabilidad de las transacciones a través de múltiples capas de filtración y mecanismos de gestión de riesgos. Si bien hay algo de espacio para la optimización, la idea de diseño general cumple con los requisitos de las transacciones modernas y cuantitativas. La clave para el éxito de la estrategia es el ajuste preciso de los parámetros y la adaptabilidad al entorno del mercado.

Código Fuente de la Estrategia
/*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")