동적 추세 채널과 상대 강도 지수를 결합한 양적 거래 전략

KC RSI EMA ATR
생성 날짜: 2025-02-18 15:15:48 마지막으로 수정됨: 2025-02-18 15:15:48
복사: 1 클릭수: 345
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 추세 채널과 상대 강도 지수를 결합한 양적 거래 전략

개요

이 전략은 켄터 채널 (Keltner Channel) 과 상대적으로 약한 지표 (RSI) 를 결합한 정량 거래 시스템이다. 이 전략은 동적 가격 채널과 동적 지표의 조합을 통해 시장의 변동에서 거래 기회를 포착한다. 이 전략은 지수 이동 평균 (EMA) 와 평균 실제 파도 (ATR) 를 계산하는 가격 채널을 채택하고, RSI 지표와 함께 거래 신호를 확인하고, 트렌드 추적과 오버 바이 오버 셀의 두 가지 필터를 구현한다.

전략 원칙

전략의 핵심 논리는 다음과 같은 핵심 구성 요소를 기반으로 합니다.

  1. 켄터 통로의 구성: 20주기의 EMA를 중간 궤도로 사용하여, 10주기의 ATR을 1.5배로 곱하여 동적인 가격 변동 영역을 형성합니다.
  2. RSI 지표의 적용: 14주기 RSI 계산을 사용하여, 70과 30을 과매매 과매매의 임계값으로 설정한다.
  3. 거래 신호 생성:
    • 다중 조건: 가격이 채널 하향 궤도를 돌파하고 RSI가 30 미만입니다.
    • 공백 조건: 가격이 채널을 통과하고 RSI가 70보다 높습니다.
  4. 평지 논리:
    • 다수 평점: 가격 하락 EMA 또는 RSI 상승 50 이상
    • 공평한 상위 포지션: 가격이 EMA 또는 RSI를 넘어 50 이하로 떨어집니다.

전략적 이점

  1. 다차원 확인: 가격 돌파구와 동력 지표의 연동으로 거래 신호의 신뢰도를 높인다.
  2. 동적 적응: 켄터 통로는 시장의 변동성에 따라 자동으로 구간 폭을 조정하여 다른 시장 환경에 적응할 수 있다.
  3. 위험 제어: EMA와 RSI의 중립 수준을 평준화 조건으로 사용하여 적시에 스톱 스톱 손실을 돕습니다.
  4. 시각적 지원: 전략은 명확한 그래픽 인터페이스를 제공하며, 채널, RSI 레벨 및 거래 신호 표시를 포함합니다.

전략적 위험

  1. 가짜 브레이크 위험: 불안한 시장에서 빈번하게 가짜 브레이크 신호가 발생할 수 있다.
  2. 지연성 문제: EMA와 RSI 모두 지연성을 가지고 있으며, 출전 또는 출전 시간을 지연시킬 수 있다.
  3. 매개 변수 민감성: 전략 효과는 매개 변수 설정에 민감하며, 다른 시장 환경에는 매개 변수를 조정할 필요가 있다.
  4. 트렌드 의존성: 명백한 트렌드가 없는 시장에서 전략이 좋지 않을 수 있다.

전략 최적화 방향

  1. 매개 변수 자조: 시장의 변동성에 따라 채널 매개 변수와 RSI 마이너스를 조정하는 자조 메커니즘을 도입할 수 있다.
  2. 신호 필터링: 교통량, 변동률 등의 보조 지표를 증가시켜 신호 품질을 향상시킨다.
  3. 포지션 관리: 동적 포지션 관리 메커니즘을 도입하여 신호 강도 및 시장 위험에 따라 포지션 보유량을 조정한다.
  4. 시장환경 인식: 시장환경 판단 모듈을 추가하여 다른 시장 상태에서 다른 파라미터 조합을 사용합니다.

요약하다

이 전략은 가격 채널과 동적 지표를 결합하여 보다 완전한 거래 시스템을 구축한다. 이 전략의 장점은 신호의 다차원 확인과 동적 적응 능력에 있다. 그러나 또한 가짜 돌파구 및 변수 감수성 등의 위험에 주의를 기울여야 한다. 변수 자조성 및 신호 필터링 메커니즘을 추가로 최적화함으로써 전략의 안정성과 신뢰성이 향상될 전망이다. 이 전략은 트렌드가 뚜렷한 시장에서 적용하기에 적합하며, 기술 지표를 통해 시장 동적 지표를 캡처하기를 희망하는 거래자에게는 좋은 선택이다.

전략 소스 코드
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Keltner Channel + RSI Stratégiia", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// Parametre Keltner Channel
ema_length = input.int(20, title="EMA Perióda")
atr_length = input.int(10, title="ATR Perióda")
multiplier = input.float(1.5, title="ATR Multiplikátor")

// Výpočet Keltner Channel
ema = ta.ema(close, ema_length)
atr = ta.atr(atr_length)
upper_kc = ema + (multiplier * atr)
lower_kc = ema - (multiplier * atr)

// Parametre RSI
rsi_length = input.int(14, title="RSI Perióda")
rsi_overbought = input.int(70, title="RSI Prekúpenosť")
rsi_oversold = input.int(30, title="RSI Prepredanosť")

// Výpočet RSI
rsi = ta.rsi(close, rsi_length)

// Obchodné podmienky

// Nákupná podmienka: Cena prechádza nad dolnou Keltner Channel a RSI je pod prepredanosťou
long_condition = ta.crossover(close, lower_kc) and (rsi < rsi_oversold)

// Predajná podmienka: Cena prechádza pod hornou Keltner Channel a RSI je nad prekúpenosťou
short_condition = ta.crossunder(close, upper_kc) and (rsi > rsi_overbought)

// Uzatváranie pozícií
close_long_condition = ta.crossunder(close, ema) or (rsi > 50)
close_short_condition = ta.crossover(close, ema) or (rsi < 50)

// Vstupy do pozícií
if (long_condition)
    strategy.entry("Long", strategy.long)

if (short_condition)
    strategy.entry("Short", strategy.short)

// Uzatváranie pozícií
if (close_long_condition)
    strategy.close("Long")

if (close_short_condition)
    strategy.close("Short")

// Vizualizácia indikátorov

// Keltner Channel
plot_ema = plot(ema, title="EMA", color=color.blue, linewidth=2)
plot_upper = plot(upper_kc, title="Horná Keltner Channel", color=color.green, linewidth=1)
plot_lower = plot(lower_kc, title="Dolná Keltner Channel", color=color.red, linewidth=1)
fill(plot_upper, plot_lower, color=color.new(color.purple, 90), title="Keltner Channel Fill")  // Nastavenie transparentnosti priamo v farbe

// RSI
hline_overbought = hline(rsi_overbought, "RSI Overbought", color=color.red, linestyle=hline.style_dotted)
hline_oversold = hline(rsi_oversold, "RSI Oversold", color=color.green, linestyle=hline.style_dotted)
plot_rsi = plot(rsi, title="RSI", color=color.orange, linewidth=2, offset=0)

// Šípky pre signály
plotshape(series=long_condition, location=location.belowbar, color=color.green, style=shape.labelup, title="Nákupný Signál", text="BUY")
plotshape(series=short_condition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Predajný Signál", text="SELL")