모멘텀 적응 가우시안 채널 다중 기간 전략

ATR RSI HLC3 TR
생성 날짜: 2025-02-08 14:49:15 마지막으로 수정됨: 2025-02-08 14:49:15
복사: 1 클릭수: 360
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

모멘텀 적응 가우시안 채널 다중 기간 전략

개요

이 전략은 고스 채널과 무작위 RSI 지표를 기반으로 한 동적 거래 시스템으로, 계절적 필터링과 변동률 관리를 결합합니다. 이 전략은 고스 채널에 적응하여 시장 추세를 식별하고, 무작위 RSI를 사용하여 동력을 확인하고, 특정 계절적 창 내에서 거래를 수행합니다. 이 시스템은 또한 ATR 기반의 포지션 관리를 통합하여 각 거래의 리스크 을 제어합니다.

전략 원칙

전략의 핵심은 다극점 고스피 필터를 기반으로 만들어진 가격 채널이다. 이 채널은 HLC3 가격의 고스피 파동 값을 계산하고 실제 파동의 폭 ((TR) 의 파동 결과와 결합하여 동적인 상하 궤도를 형성한다. 거래 신호의 생성은 다음과 같은 조건을 충족해야합니다.

  1. 가격 부진과 주파수 상승
  2. 무작위 RSI 지표가 과매매를 나타냅니다.
  3. 현재 시간은 기본 설정된 계절 창에서
  4. 포지션 규모는 ATR의 동적 계산에 기반합니다.

평지 신호는 가격 하락으로 촉발된다. 전체 시스템은 다중 필터링 메커니즘을 통해 거래의 안정성을 높인다.

전략적 이점

  1. 고스 필터는 실제 시장 추세를 효과적으로 포착할 수 있는 뛰어난 노이즈 필터링 능력을 가지고 있습니다.
  2. 다중극 디자인은 가격 채널 경계를 더 정확하게 제공합니다.
  3. 동력과 트렌드 지표를 통합하여 신호의 신뢰도를 높여줍니다.
  4. 계절적 필터링은 불리한 시장 환경을 방지하는 데 도움이 됩니다.
  5. 동적 포지션 관리로 위험 일관성을 보장합니다.
  6. 시스템 매개 변수는 다른 시장 조건에 따라 최적화 할 수 있습니다.

전략적 위험

  1. 고스 필러 계산이 복잡하여 실행이 지연될 수 있습니다.
  2. 다중 필터링 조건으로 중요한 거래 기회를 놓칠 수 있습니다.
  3. 시스템 파라미터 설정에 민감하고, 신중한 최적화가 필요합니다.
  4. 계절 창의 고정 설정은 시장 환경의 변화에 적응하지 않을 수 있습니다.
  5. ATR 기반의 포지션 통제는 높은 변동성 기간 동안 너무 보수적일 수 있습니다.

전략 최적화 방향

  1. 시장 조건에 따라 거래 시간을 동적으로 조정하는 적응 가능한 계절 창을 도입합니다.
  2. 고스 필터의 계산 효율을 최적화하고 실행 지연을 줄여줍니다.
  3. 시장 변동률 조절 장치에 가입하여 다른 시장 환경에 따라 필터링 조건을 조정합니다.
  4. 더 유연한 포지션 관리 시스템을 개발하여 위험과 수익의 균형을 맞추는 것
  5. 다중 시간 프레임 분석을 추가하여 신호의 신뢰성을 향상시킵니다.

요약하다

이것은 다층의 필터링과 위험 관리 메커니즘을 통해 거래의 안정성을 향상시키는 완벽한 트렌드 추적 시스템을 구축했습니다. 약간의 최적화 공간이 있지만 전체적인 디자인 아이디어는 현대적인 양적 거래의 요구 사항에 부합합니다. 전략의 성공은 매개 변수의 정밀한 조정과 시장 환경에 대한 적응에 달려 있습니다.

전략 소스 코드
/*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")