동적 채널 및 이동 평균 거래 시스템과 결합된 다중 지표 추세 추종 전략

EMA ATR
생성 날짜: 2024-12-12 15:58:57 마지막으로 수정됨: 2024-12-12 15:58:57
복사: 0 클릭수: 376
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 채널 및 이동 평균 거래 시스템과 결합된 다중 지표 추세 추종 전략

개요

이 전략은 G 채널 (G-Channel), 지수 이동 평균 (EMA) 및 실제 변동의 폭 (ATR) 을 결합한 다중 지표 거래 시스템이다. 그것은 동적 지원/저항 지점과 트렌드 확인을 통해 거래 신호를 식별하고 ATR 기반의 스톱과 스톱을 사용하여 위험을 관리한다. 시스템 설계는 신뢰성과 위험 제어에 중점을 두고 있으며, 안정적인 거래 방법을 찾는 거래자에게 적합하다.

전략 원칙

이 전략의 핵심 논리는 다음과 같은 몇 가지 핵심 요소에 기반합니다.

  1. G 채널은 역동적인 지원 및 저항 수준을 계산하고, 수학적 공식을 통해 지속적으로 궤도에 오르내립니다.
  2. EMA는 전체적인 트렌드 방향을 확인하는 데 사용되며, 가격과 EMA의 상대적인 위치가 거래 방향을 결정합니다.
  3. 입시 신호는 G 채널의 돌파와 EMA의 위치를 확인
  4. ATR의 배수를 사용하여 중지 및 중지 설정, 중지 손실은 2 배 ATR, 중지 중지 4 배 ATR
  5. 상태 추적을 통해 연속적으로 반복되는 신호를 피합니다.

전략적 이점

  1. 다단계 신호 확인 메커니즘이 거래의 신뢰성을 높인다.
  2. 동적으로 조정된 통로 경계는 다양한 시장 환경에 적응합니다.
  3. 유동성 기반의 리스크 관리가 더 적응력입니다.
  4. 반복되는 신호를 피하면 과다 거래의 위험이 낮아집니다.
  5. 시각적으로 명확한 매매표는 분석과 재검토를 용이하게 합니다.

전략적 위험

  1. 위축 시장에서 너무 많은 가짜 브레이크 신호가 발생할 수 있습니다.
  2. EMA는 지연된 지표로서 입시 시기를 지연시킬 수 있습니다.
  3. 고정 배수의 ATR 상쇄는 높은 변동기간에 충분히 유연하지 않을 수 있습니다.
  4. 더 긴 역사 데이터를 필요로 하는 지표 계산
  5. 매개변수 최적화로 인해 과적합이 발생할 수 있습니다.

전략 최적화 방향

  1. 트래픽 확인 신호를 도입하여 돌파의 신뢰성을 높여줍니다.
  2. 다양한 시장 변동에 맞춰 ATR 배수를 동적으로 조정합니다.
  3. 시장 환경 필터를 추가하여 불리한 조건에서 거래를 피하십시오.
  4. 신호 필터링 논리를 최적화하여 가짜 신호를 더 줄입니다.
  5. 동적인 포지션 관리 시스템을 고려하십시오.

요약하다

이 전략은 여러 정교한 기술 지표를 조합하여 하나의 완전한 거래 시스템을 구축한다. 시스템의 장점은 다층적인 신호 확인 메커니즘과 변동률 기반의 위험 관리에 있다. 그러나 실제 응용에서는 특정 시장 특성에 따라 최적화가 필요하다. 제안된 최적화 방향은 전략의 안정성과 적응성을 더욱 높일 수 있다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("G-Channel with EMA Strategy and ATR SL/TP", shorttitle="G-EMA-ATR", overlay=true)

// Input parameters
length = input.int(100, title="G-Channel Length")
src = input.source(close, title="Source")
ema_length = input.int(50, title="EMA Length")  // EMA length
atr_length = input.int(14, title="ATR Length")  // ATR length

// G-Channel calculation
var float a = na
var float b = na
a := math.max(src, nz(a[1])) - nz(a[1] - b[1]) / length
b := math.min(src, nz(b[1])) + nz(a[1] - b[1]) / length
avg = (a + b) / 2

// G-Channel cross conditions
crossup = b[1] < close[1] and b > close
crossdn = a[1] < close[1] and a > close
bullish = ta.barssince(crossdn) <= ta.barssince(crossup)
c = bullish ? color.lime : color.red

// EMA calculation
ema_value = ta.ema(src, ema_length)

// ATR calculation
atr_value = ta.atr(atr_length)

// Plot G-Channel average and Close price
p1 = plot(avg, "G-Channel Average", color=c, linewidth=1, transp=90)
p2 = plot(close, "Close Price", color=c, linewidth=1, transp=100)
fill(p1, p2, color=c, transp=90)

// Plot EMA
plot(ema_value, color=color.blue, linewidth=2, title="EMA")

// Buy and Sell conditions
buy_condition = bullish and close < ema_value
sell_condition = not bullish and close > ema_value

// Track the last signal state
var bool last_was_buy = false
var bool last_was_sell = false

// ATR-based SL and TP calculations
long_sl = close - 2 * atr_value  // 2 ATR below the entry for SL
long_tp = close + 4 * atr_value  // 4 ATR above the entry for TP
short_sl = close + 2 * atr_value // 2 ATR above the entry for SL (short)
short_tp = close - 4 * atr_value // 4 ATR below the entry for TP (short)

// Generate Buy signal only if the last signal was not Buy
if (buy_condition and not last_was_buy)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Exit Buy", from_entry="Buy", stop=long_sl, limit=long_tp)
    last_was_buy := true
    last_was_sell := false

// Generate Sell signal only if the last signal was not Sell
if (sell_condition and not last_was_sell)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Exit Sell", from_entry="Sell", stop=short_sl, limit=short_tp)
    last_was_sell := true
    last_was_buy := false

// Plot shapes for Buy and Sell signals
plotshape(series=buy_condition and not last_was_buy, location=location.belowbar, style=shape.labelup, color=color.lime, size=size.small, text="Buy", textcolor=color.white)
plotshape(series=sell_condition and not last_was_sell, location=location.abovebar, style=shape.labeldown, color=color.red, size=size.small, text="Sell", textcolor=color.white)