Strategi Multi-Periode Saluran Gaussian Adaptif Momentum

ATR RSI HLC3 TR
Tanggal Pembuatan: 2025-02-08 14:49:15 Akhirnya memodifikasi: 2025-02-08 14:49:15
menyalin: 1 Jumlah klik: 360
1
fokus pada
1617
Pengikut

Strategi Multi-Periode Saluran Gaussian Adaptif Momentum

Ringkasan

Strategi ini adalah sistem perdagangan dinamis berdasarkan Gaussian Channel dan RSI acak, yang menggabungkan penyaringan musiman dan manajemen volatilitas. Strategi ini mengidentifikasi tren pasar dengan menyesuaikan diri dengan Gaussian Channel, menggunakan RSI acak untuk mengkonfirmasi dinamika, dan melakukan perdagangan dalam jendela musiman tertentu. Sistem ini juga mengintegrasikan manajemen posisi berbasis ATR untuk mengendalikan risiko setiap perdagangan.

Prinsip Strategi

Inti dari strategi ini adalah saluran harga yang dibangun berdasarkan filter Gaussian multipolar. Saluran ini membentuk orbit naik turun yang dinamis dengan menghitung nilai Gaussian harga HLC3 dan menggabungkan hasil gelombang dengan amplitudo fluktuasi nyata (TR).

  1. Harga naik dan gelombang utama naik
  2. Indikator RSI acak menunjukkan kondisi overbought
  3. Waktu saat ini dalam jendela musiman default
  4. Ukuran posisi berdasarkan perhitungan ATR dinamis

Sinyal posisi rendah dipicu oleh penurunan harga. Seluruh sistem meningkatkan stabilitas perdagangan melalui banyak mekanisme penyaringan.

Keunggulan Strategis

  1. Filter Gaussian memiliki kemampuan penyaringan kebisingan yang luar biasa, sehingga dapat secara efektif menangkap tren pasar yang sebenarnya
  2. Desain multipolar memberikan batas saluran harga yang lebih tepat
  3. Mengintegrasikan momentum dan indikator tren untuk meningkatkan keandalan sinyal
  4. Filter musiman membantu menghindari kondisi pasar yang tidak menguntungkan
  5. Manajemen posisi dinamis memastikan konsistensi risiko
  6. Parameter sistem dapat dioptimalkan sesuai dengan kondisi pasar yang berbeda

Risiko Strategis

  1. Filter Gaussian rumit dan dapat menyebabkan penundaan eksekusi
  2. Kondisi multi-filter mungkin melewatkan beberapa peluang perdagangan penting
  3. Sistem yang lebih sensitif terhadap parameter pengaturan, yang memerlukan optimasi hati-hati
  4. Pengaturan tetap untuk jendela musiman mungkin tidak sesuai dengan perubahan lingkungan pasar
  5. Kontrol posisi berbasis ATR mungkin terlalu konservatif selama periode fluktuasi tinggi

Arah optimasi strategi

  1. Memperkenalkan jendela musiman yang dapat disesuaikan untuk menyesuaikan waktu perdagangan secara dinamis dengan kondisi pasar
  2. Mengoptimalkan efisiensi perhitungan filter Gaussian, mengurangi execution delay
  3. Bergabung dengan mekanisme regulasi volatilitas pasar untuk menyesuaikan kondisi penyaringan dalam lingkungan pasar yang berbeda
  4. Mengembangkan sistem manajemen posisi yang lebih fleksibel, menyeimbangkan risiko dan keuntungan
  5. Menambahkan analisis multi-frame waktu untuk meningkatkan keandalan sinyal

Meringkaskan

Ini adalah sistem pelacakan tren yang dibangun dengan baik, meningkatkan stabilitas perdagangan melalui beberapa lapisan penyaringan dan mekanisme manajemen risiko. Meskipun ada beberapa ruang untuk pengoptimalan, konsep desain keseluruhan sesuai dengan persyaratan perdagangan kuantitatif modern. Kunci keberhasilan strategi adalah penyesuaian parameter yang tepat dan adaptasi terhadap lingkungan pasar.

Kode Sumber Strategi
/*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")