동적 변동성 조정을 기반으로 한 이중 이동평균 교차 및 RSI/ATR 합성 필터링 거래 시스템

MA RSI ATR RR SL TP SMA
생성 날짜: 2025-02-21 11:58:43 마지막으로 수정됨: 2025-02-21 11:58:43
복사: 1 클릭수: 390
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

동적 변동성 조정을 기반으로 한 이중 이동평균 교차 및 RSI/ATR 합성 필터링 거래 시스템 동적 변동성 조정을 기반으로 한 이중 이동평균 교차 및 RSI/ATR 합성 필터링 거래 시스템

전략 개요

이 전략은 쌍평평선 크로스, RSI 오버 바이 오버 세일, ATR 변동율 필터를 결합한 복합형 거래 시스템이다. 시스템은 단기 및 장기 이동 평균을 사용하여 거래 신호를 발생시키고, RSI 지표를 통해 시장 상태를 필터링하고, ATR 지표를 사용하여 변동율 판단을 하고, 지위 관리 및 위험 통제를 위해 백분율 스톱 손실과 위험 수익률과 결합한다. 이 전략은 강력한 적응력을 가지고 있으며, 시장 환경에 따라 변수를 유연하게 조정할 수 있다.

전략 원칙

전략의 핵심 논리는 다음과 같은 측면에 기초합니다.

  1. 신호 생성: 9일과 21일 간단한 이동 평균의 교차를 사용하여 트렌드 변화를 포착한다. 단기 평균선 상에서 장기 평균선을 통과할 때 여러 신호가 발생하고, 아래로 통과할 때 공백 신호가 발생한다.
  2. 조건 필터: RSI 지표 필터로 과매매 상태를 필터링하여 극단적인 시장 조건에서 입주를 피하십시오. 동시에 ATR 지표를 사용하여 시장 변동률이 거래 조건을 충족하도록하십시오.
  3. 위험 관리: 계좌의 순가치를 기준으로 하는 상쇄 손실 비율을 사용하여, 위험-수익 비율을 설정하여 정지 위치를 결정하고, 위험을 보호하면서 합리적인 수익을 얻습니다.

전략적 이점

  1. 시스템의 적응성: RSI 및 ATR 필터를 켜고/부활시킴으로써, 전략은 다른 시장 환경에 따라 유연하게 조정할 수 있습니다.
  2. 리스크 제어: 지분 중지 및 동적 포지션 관리를 사용하여 각 거래의 리스크 을 효과적으로 제어한다.
  3. 신호 신뢰성: 여러 필터링 메커니즘을 통해 가짜 신호의 영향을 줄이고 거래의 성공률을 높인다.
  4. 매개 변수 조정 가능: 매개 변수들은 특정 시장 특성에 따라 최적화된 조정이 가능하다.

전략적 위험

  1. 흔들림 시장의 위험: 수평판 흔들림 시장에서, 평행선 교차는 빈번한 거짓 신호를 생성할 수 있다.
  2. 지연 위험: 이동 평균은 지연성을 가지고 있으며, 최고의 진입 시기를 놓칠 수 있다.
  3. 매개 변수 최적화 위험: 지나치게 최적화 된 매개 변수는 전략이 지나치게 잘 맞지 않아 실디의 성능에 영향을 줄 수 있습니다.
  4. 시장 환경 의존성: 전략은 트렌드가 뚜렷한 시장에서 더 잘 작동하며, 다른 시장 환경에서는 효과가 떨어질 수 있다.

전략 최적화 방향

  1. 동적 파라미터 조정: 시장의 변동에 따라 평균선 주기 및 RSI 마이너스를 자동으로 조정할 수 있다.
  2. 트렌드 강도 필터를 추가: DMI 또는 ADX와 같은 지표를 도입하여 트렌드 강도를 평가하십시오.
  3. 최적화 중지 방법: 추적 중지 또는 ATR 기반의 동적 중지 사용이 고려될 수 있습니다.
  4. 포지션 관리를 개선: 변동률 기반의 동적 포지션 관리 시스템을 도입한다.

요약하다

이 전략은 여러 기술적 지표를 조합하여 비교적 완전한 거래 시스템을 구축한다. 전략은 트렌드 시장에서 우수한 성능을 발휘하며, 좋은 위험 제어 능력을 가지고 있다. 전략은 합리적으로 매개 변수를 설정하고 필요한 필터링 조건을 추가함으로써 다양한 시장 환경에 적응할 수 있다. 실물 사용 전에 충분한 피드백과 매개 변수 최적화를 수행하는 것이 좋습니다.

전략 소스 코드
/*backtest
start: 2025-01-21 00:00:00
end: 2025-02-20 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("Simplified MA Crossover Strategy with Disable Options", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Inputs
shortLength = input.int(9, title="Short MA Length", minval=1)
longLength = input.int(21, title="Long MA Length", minval=1)

// RSI Filter
enableRSI = input.bool(true, title="Enable RSI Filter")
rsiLength = input.int(14, title="RSI Length", minval=1)
rsiOverbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=100)
rsiOversold = input.int(30, title="RSI Oversold Level", minval=0, maxval=50)

// ATR Filter
enableATR = input.bool(true, title="Enable ATR Filter")
atrLength = input.int(14, title="ATR Length", minval=1)
minATR = input.float(0.005, title="Minimum ATR Threshold", minval=0)

// Risk Management
stopLossPerc = input.float(0.5, title="Stop Loss (%)", minval=0.1) / 100
riskRewardRatio = input.float(2, title="Risk-Reward Ratio", minval=1)
riskPercentage = input.float(2, title="Risk Percentage", minval=0.1) / 100

// Indicators
shortMA = ta.sma(close, shortLength)
longMA = ta.sma(close, longLength)
rsi = ta.rsi(close, rsiLength)
atr = ta.atr(atrLength)

// Conditions
longCondition = ta.crossover(shortMA, longMA)
shortCondition = ta.crossunder(shortMA, longMA)

// Apply RSI Filter (if enabled)
if (enableRSI)
    longCondition := longCondition and rsi < rsiOverbought
    shortCondition := shortCondition and rsi > rsiOversold

// Apply ATR Filter (if enabled)
if (enableATR)
    longCondition := longCondition and atr > minATR
    shortCondition := shortCondition and atr > minATR

// Risk Management
positionSize = strategy.equity * riskPercentage / (stopLossPerc * close)
takeProfitLevel = strategy.position_avg_price * (1 + stopLossPerc * riskRewardRatio)
stopLossLevel = strategy.position_avg_price * (1 - stopLossPerc)

// Execute Trades
if (longCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss", "Long", limit=takeProfitLevel, stop=stopLossLevel)

if (shortCondition)
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Take Profit/Stop Loss", "Short", limit=strategy.position_avg_price * (1 - stopLossPerc * riskRewardRatio), stop=strategy.position_avg_price * (1 + stopLossPerc))

// Plotting
plot(shortMA, color=color.blue, title="Short MA")
plot(longMA, color=color.red, title="Long MA")
hline(rsiOverbought, "Overbought", color=color.red)
hline(rsiOversold, "Oversold", color=color.green)
plot(atr, color=color.orange, title="ATR")
plotshape(series=longCondition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=shortCondition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")