Strategi Pelbagai Tempoh Saluran Gaussian Adaptif Momentum

ATR RSI HLC3 TR
Tarikh penciptaan: 2025-02-08 14:49:15 Akhirnya diubah suai: 2025-02-08 14:49:15
Salin: 1 Bilangan klik: 360
1
fokus pada
1617
Pengikut

Strategi Pelbagai Tempoh Saluran Gaussian Adaptif Momentum

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan dinamik berdasarkan Gaussian Channel dan RSI acak, yang menggabungkan penapisan bermusim dan pengurusan kadar turun naik. Strategi ini mengenal pasti trend pasaran dengan menyesuaikan diri dengan Gaussian Channel, menggunakan RSI acak untuk pengesahan dinamik, dan melakukan perdagangan dalam tingkap bermusim tertentu. Sistem ini juga mengintegrasikan pengurusan kedudukan berasaskan ATR untuk mengawal risiko setiap perdagangan.

Prinsip Strategi

Pusat strategi adalah saluran harga yang dibina berdasarkan penyaring Gaussian multipolar. Saluran ini membentuk orbit naik turun yang dinamik dengan mengira nilai Gaussian harga HLC3 dan menggabungkan hasil penyaring dengan amplitudo turun naik sebenar (TR).

  1. Harga melepasi tren dan gelombang utama naik
  2. Indeks RSI rawak menunjukkan keadaan overbought
  3. Masa semasa dalam tetingkap bermusim yang telah ditetapkan
  4. Saiz kedudukan berdasarkan pengiraan ATR dinamik

Sinyal kedudukan rendah dipicu oleh penurunan harga. Sistem ini meningkatkan kestabilan perdagangan melalui pelbagai mekanisme penapisan.

Kelebihan Strategik

  1. Penapis Gaussian mempunyai kebolehan penapisan bunyi yang sangat baik untuk menangkap trend pasaran yang sebenar
  2. Reka bentuk multipolar memberikan sempadan saluran harga yang lebih tepat
  3. Mengintegrasikan momentum dan indikator trend untuk meningkatkan kebolehpercayaan isyarat
  4. Penapisan bermusim membantu mengelakkan keadaan pasaran yang tidak baik
  5. Pengurusan kedudukan dinamik memastikan keserasian risiko
  6. Parameter sistem boleh dioptimumkan mengikut keadaan pasaran yang berbeza

Risiko Strategik

  1. Kalkulator Gaussian rumit dan boleh menyebabkan kelewatan pelaksanaan
  2. Syarat penapisan berganda mungkin terlepas peluang dagangan penting
  3. Sistem ini sensitif kepada parameter yang ditetapkan dan memerlukan pengoptimuman yang berhati-hati
  4. Tetapan tetap tetingkap bermusim mungkin tidak sesuai dengan perubahan keadaan pasaran
  5. Pengendalian kedudukan ATR mungkin terlalu konservatif semasa turun naik yang tinggi

Arah pengoptimuman strategi

  1. Memperkenalkan tetingkap bermusim yang menyesuaikan diri untuk menyesuaikan masa dagangan secara dinamik mengikut keadaan pasaran
  2. Mengoptimumkan kecekapan pengiraan penapis Gaussian, mengurangkan kelewatan pelaksanaan
  3. Menyertai mekanisme penyesuaian kadar turun naik pasaran untuk menyesuaikan syarat penapisan dalam keadaan pasaran yang berbeza
  4. Membangunkan sistem pengurusan kedudukan yang lebih fleksibel, mengimbangi risiko dan keuntungan
  5. Menambah analisis pelbagai kerangka masa untuk meningkatkan kebolehpercayaan isyarat

ringkaskan

Ini adalah sistem pengesanan trend yang dibina dengan baik, meningkatkan kestabilan perdagangan melalui pelbagai lapisan penapisan dan mekanisme pengurusan risiko. Walaupun terdapat beberapa ruang untuk pengoptimuman, konsep reka bentuk keseluruhan memenuhi keperluan perdagangan kuantitatif moden.

Kod 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")