RSI-ADX 양방향 모멘텀 필터 트레이딩 전략

RSI ADX DI DM TR RMA
생성 날짜: 2025-08-13 14:10:20 마지막으로 수정됨: 2025-08-13 14:10:20
복사: 5 클릭수: 229
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

RSI-ADX 양방향 모멘텀 필터 트레이딩 전략 RSI-ADX 양방향 모멘텀 필터 트레이딩 전략

개요

이 전략은 상대적으로 약한 지수 ((RSI) 와 평균 방향성 지수 ((ADX) 를 결합한 쌍방향 거래 시스템이다. 전략은 8주기 RSI를 통해 오버 바이 오버 세 신호를 식별하고, 20주기 ADX 필터 트렌드 강도를 통해 강력한 트렌드에서 반전 기회를 잡는다. 시스템은 ADX를 수동으로 계산하는 방식을 채택하고, 방향성 운동 ((DM) 및 실제 파장 ((TR) 의 평준 처리를 통해 트렌드 강도를 정확하게 측정한다. 전략은 10%의 포지션 관리를 설정하고, 더 많은 것을하고 공백한 쌍방향 작업을 지원하며, 명백한 트렌드 특성을 가진 거래 품목에 적합하다.

전략 원칙

전략의 핵심 논리는 두 가지 기술 지표의 상호 작용에 기초한다. 첫째, 8주기 RSI를 주요 거래 신호 생성기로 사용하여, RSI가 70을 넘으면 다중 신호를 발생시키고, 30을 넘으면 공백 신호를 발생시킨다. 이러한 역행 논리는 극한값 회귀의 시장 특성에 기초한다.

다음으로, 전략은 ADX를 트렌드 강도 필터로 도입한다. ADX의 계산 과정은 다음과 같다: 상승 운동 ((upMove) 과 하향 운동 ((downMove) 을 계산하고, 정방향 운동 ((+DM) 과 마이너스 방향 운동 ((-DM) 을 결정하고, RMA 부드러운 처리를 통해 정방향 지표 ((+DI) 와 마이너스 방향 지표 ((-DI) 를 계산하고, 마지막으로 DI 차이의 표준화를 통해 ADX 값을 계산한다. ADX가 14보다 크면 시장이 명백한 트렌드 상태에 있음을 나타낼 때 RSI 신호가 유효하다고 간주됩니다.

탈퇴 메커니즘은 반대의 RSI 극치를 평소 위치 신호로 사용합니다. RSI가 30을 넘으면 다중 헤드 포지션은 평소 위치, RSI가 70을 넘으면 빈 헤드 포지션은 평소 위치입니다. 이러한 디자인은 트렌드가 역전될 때 적시에 탈퇴를 보장합니다.

전략적 이점

  1. 이중 필터링: RSI는 정확한 출입 시점을 제공하며, ADX는 트렌드가 명확할 때만 거래하도록 보장하며, 흔들리는 시장에서 가짜 신호를 효과적으로 감소시킵니다.

  2. 유연한 쌍방향 거래이 전략은 상승과 하락의 동시 트렌드를 포착할 수 있고, 투자 효율성을 높여주고, 다양한 시장 환경에서 수익을 창출할 수 있다.

  3. 변수 최적화 합리적인8주기 RSI는 전통적인 14주기보다 더 민감하여 시장 변화를 더 빨리 포착할 수 있습니다. 20주기 ADX는 안정적인 추세 판단을 제공합니다. 14주기 ADX는 시장에서 검증된 유효한 수준입니다.

  4. 위험 통제10%의 포지션 설정과 명확한 스톱로스 탈퇴 규칙은 단일 거래의 위험을 효과적으로 통제합니다.

  5. 계산 정확성: ADX 계산을 수동으로 구현하여, 내장 함수의 버전 차이가 있을 수 있는 것을 피하고, 다양한 플랫폼에서 정책의 일관성을 보장한다.

전략적 위험

  1. 역거래 위험매우 강한 추세에서 RSI는 장기간 과매매 또는 과매매 상태에 있을 수 있으며, 조기 진입으로 인해 큰 변동이 발생할 수 있습니다. 가격의 핵심 지원 저항 수준을 돌파하는 경우 트렌드 강도를 두 번 확인하는 것을 권장합니다.

  2. 뒤처진 문제: ADX는 트렌드 추적 지표로서 내재된 지연이 있으며, 트렌드가 있는 것은 트렌드 말기에 확인될 수 있다. 가격 행동이나 거래량 지표와 결합하여 보조 판단을 고려할 수 있다.

  3. 시장의 흔들림: ADX가 일부 흔들림을 필터링했지만, ADX 값이 하락점 근처에 있을 때, 빈번한 출입 신호가 발생할 수 있다. ADX 버퍼 범위를 설정하는 것이 좋습니다. 출입은 ADX>15을 요구하고, 지주 기간 동안 ADX>13을 허용한다.

  4. 극단적인 시장 위험: 빠른 일방적인 거래에서 역전작업은 큰 손실을 입을 수 있다. 최대 손실 제한이나 시간 상쇄 제도를 추가하는 것이 좋습니다.

전략 최적화 방향

  1. 동적 변수 조정: 시장의 변동율에 따라 RSI 주기와 ADX 마이너스를 동적으로 조정한다. 높은 변동율이있는 동안 더 긴 주기를 사용하면 소음을 줄이고, 낮은 변동율이있는 동안 더 짧은 주기를 사용하면 민감도를 높인다.

  2. 다중 시간 프레임 확인: 현재 시간 프레임 신호를 기반으로, 더 높은 시간 프레임의 트렌드 확인을 추가하여 거래 방향이 주 트렌드와 일치하는지 확인하십시오.

  3. 포지션 관리 최적화: ADX 강도에 따라 동적으로 포지션을 조정합니다. 트렌드가 강할수록 포지션이 커집니다. 또한 피라미드 포지션 전략을 고려하여 트렌드가 확인된 후 포지션을 점진적으로 증가시킬 수 있습니다.

  4. 손해 방지 최적화RSI 역전 신호 중지 외에도 ATR 기반의 추적 중지를 추가하여 수익을 보호하면서 충분한 주류 공간을 제공합니다.

  5. 신호 필터링 강화: 거래량 확인, 가격 형태 인식 등의 보조 조건을 추가하고, 신호 품질을 향상시킨다. 예를 들어, 돌파할 때 부하와 함께 부하를 요구하거나, 중요한 지지 저항점 근처에서만 거래를 수행한다.

요약하다

RSI-ADX 쌍방향 동력 필터링 거래 전략은 동력 지표와 트렌드 지표의 장점을 결합하여 위험을 통제하는 조건에서 시장 기회를 잡기 위해 정교하게 설계된 양적 거래 시스템입니다. 전략의 핵심 혁신은 단일 지표의 한계를 피하면서 트렌드 강도 필터링 신호를 사용하는 것입니다.

전략 소스 코드
/*backtest
start: 2024-08-13 00:00:00
end: 2025-08-11 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":5000000}]
*/

//@version=6
strategy("RSI & ADX Long/Short Strategy v6 (Manual ADX)", overlay=true, 
     margin_long=100, margin_short=100, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=10)

//--------------------
// Parameters
//--------------------
rsiLength     = 8
adxLength     = 20
adxThreshold  = 14.0

//--------------------
// RSI
//--------------------
rsiVal = ta.rsi(close, rsiLength)

//--------------------
// Manual ADX Calculation
//--------------------
upMove   = high - high[1]
downMove = low[1] - low

plusDM  = (upMove > downMove and upMove > 0)   ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0

tr       = ta.rma(ta.tr(true), adxLength)
plusDI   = 100 * ta.rma(plusDM, adxLength) / tr
minusDI  = 100 * ta.rma(minusDM, adxLength) / tr
dx       = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adxVal   = ta.rma(dx, adxLength)  // <-- Final ADX value

//--------------------
// Entry/Exit Conditions
//--------------------
longEntry  = ta.crossover(rsiVal, 70) and adxVal > adxThreshold
shortEntry = ta.crossunder(rsiVal, 30) and adxVal > adxThreshold

longExit  = ta.crossunder(rsiVal, 30)
shortExit = ta.crossover(rsiVal, 70)

//--------------------
// Orders
//--------------------
if longEntry
    strategy.entry("Long", strategy.long)
if longExit
    strategy.close("Long")

if shortEntry
    strategy.entry("Short", strategy.short)
if shortExit
    strategy.close("Short")

//--------------------
// Plots
//--------------------
plot(rsiVal, title="RSI(8)", color=color.new(color.blue, 0))
hline(70, 'RSI Overbought', color=color.red)
hline(30, 'RSI Oversold', color=color.green)

plot(adxVal, title="ADX(20)", color=color.new(color.orange, 0))
hline(adxThreshold, 'ADX Threshold', color=color.gray, linestyle=hline.style_dotted)