Momentum-adaptive Mehrperiodenstrategie mit Gaussian Channel

ATR RSI HLC3 TR
Erstellungsdatum: 2025-02-08 14:49:15 zuletzt geändert: 2025-02-08 14:49:15
Kopie: 1 Klicks: 360
1
konzentrieren Sie sich auf
1617
Anhänger

Momentum-adaptive Mehrperiodenstrategie mit Gaussian Channel

Überblick

Die Strategie ist ein dynamisches Handelssystem, das auf Gauss-Kanal und Random RSI-Indikatoren basiert, kombiniert mit saisonaler Filterung und Volatilitätsmanagement. Die Strategie identifiziert Markttrends durch Anpassung an den Gauss-Kanal, verwendet die Random RSI zur Dynamikbestätigung und führt Geschäfte innerhalb bestimmter saisonaler Fenster aus. Das System integriert auch eine ATR-basierte Positionsmanagement, um die Risikothek für jeden Handel zu kontrollieren.

Strategieprinzip

Im Mittelpunkt der Strategie steht ein Preiskanal, der auf einem multipolaren Gaussfilter aufgebaut ist. Dieser Kanal bildet eine dynamische Auf- und Abwärtsbahn, indem er den Gausswert des HLC3-Preises berechnet und die Ergebnisse der Wave mit der tatsächlichen Schwankungsbreite (TR) kombiniert. Die Erzeugung eines Handelssignals erfordert folgende Bedingungen:

  1. Die Preise brechen durch und die Hauptwellen bewegen sich nach oben
  2. Der RSI zeigt überkauft
  3. Die aktuelle Zeit innerhalb des vorgegebenen saisonalen Fensters
  4. Positionsgröße basiert auf ATR-Dynamik

Die Plain-Position-Signal wird durch einen Kursrückgang ausgelöst. Das gesamte System erhöht die Stabilität des Handels durch mehrere Filtermechanismen.

Strategische Vorteile

  1. Die Gauss-Filter haben eine hervorragende Geräuschfilterfähigkeit und sind in der Lage, echte Markttrends zu erfassen
  2. Mehrpolar-Design bietet präzisere Grenzen für Preiskanäle
  3. Integration von Dynamik- und Trendindikatoren zur Erhöhung der Signalsicherheit
  4. Saisonale Filterung hilft bei der Vermeidung ungünstiger Marktumstände
  5. Dynamisches Positionsmanagement sorgt für Risikokonsistenz
  6. Systemparameter können je nach Marktbedingungen optimiert werden

Strategisches Risiko

  1. Goss filter ist kompliziert und kann die Ausführung verzögern
  2. Mehrfache Filterbedingungen könnten wichtige Handelschancen verpassen
  3. Das System ist sehr sensibel für Parameter, die sorgfältig optimiert werden müssen.
  4. Die festgelegte Einstellung des saisonalen Fensters kann sich nicht an veränderte Marktbedingungen anpassen
  5. Während der hohen Volatilität kann die ATR-basierte Positionskontrolle zu konservativ sein

Richtung der Strategieoptimierung

  1. Einführung einer anpassungsfähigen saisonalen Fenster, um die Handelszeiten dynamisch an die Marktbedingungen anzupassen
  2. Optimierung der Rechenleistung des Gauss-Filters und Verringerung der Ausführungsverzögerung
  3. Eintritt in die Marktschwankungsregelung, um die Filterbedingungen für unterschiedliche Marktbedingungen anzupassen
  4. Entwicklung eines flexibleren Positionsmanagementsystems, das Risiken und Erträge ausgleicht
  5. Mehrzeit-Analysen zur Erhöhung der Signalsicherheit

Zusammenfassen

Es handelt sich um ein gut aufgebautes Trend-Tracking-System, das die Stabilität des Handels durch mehrschichtige Filterung und Risikomanagement verbessert. Obwohl einige Optimierungsmöglichkeiten vorhanden sind, entspricht die Gesamtkonzeption den Anforderungen des modernen quantitativen Handels. Der Schlüssel zum Erfolg der Strategie liegt in der präzisen Anpassung der Parameter und der Anpassung an die Marktumgebung.

Strategiequellcode
/*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")