RSI 및 확률적 RSI 다이버전스 거래 전략

RSI SRSI EMA 背离 摆动过滤器 价格图表线
생성 날짜: 2025-06-26 09:28:12 마지막으로 수정됨: 2025-06-26 09:28:12
복사: 0 클릭수: 281
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

RSI 및 확률적 RSI 다이버전스 거래 전략 RSI 및 확률적 RSI 다이버전스 거래 전략

개요

RSI와 무작위 RSI의 반발 거래 전략은 시장에서 중요한 전환점을 식별하기 위해 고도로 설계된 고급 기술 분석 방법입니다. 이 전략은 상대적으로 약한 지표 (RSI) 와 무작위적으로 상대적으로 약한 지표 (SRSI) 의 힘을 결합하여 가격과 이러한 동력 지표 사이의 반발을 모니터링하여 잠재적인 트렌드 변화를 예측합니다. 또한, 전략은 지수 이동 평균 (EMA) 을 트렌드 필터로 통합하고 정확한 흔들림 거리의 필터를 적용하여 시장의 소음 대신 의미있는 시장 구조 변화를 포착하는 것을 보장합니다.

전략 원칙

이 전략의 핵심 원칙은 기술 분석의 이변 개념에 기반한다. 이변은 가격 움직임과 기술 지표 움직임이 일치하지 않을 때 발생하며, 일반적으로 현재 추세가 반전될 가능성이 있음을 나타냅니다. 이 전략은 네 가지 유형의 이변에 초점을 맞추고 있습니다.

  1. 보통의 관람객들은가격 혁신이 낮지만 RSI 또는 SRSI가 혁신이 낮지 않을 때, 이는 하향 동력이 약화되고 있음을 나타냅니다. 이는 상승 경향의 시작을 나타낼 수 있습니다.
  2. 일반적인 하락에서 벗어나가격 혁신이 높지만 RSI 또는 SRSI가 혁신이 높지 않을 때, 이는 상승 동력이 약화되고 있으며, 하향 경향의 시작을 나타낼 수 있습니다.
  3. 숨겨진 광경: 가격이 이전 저점보다 높지만 RSI 또는 SRSI가 이전 저점보다 낮을 때. 이것은 일반적으로 상승 추세에서 회전을 나타냅니다. 주요 상승 추세가 계속 될 것을 암시합니다.
  4. 숨겨진 하락: 가격이 이전 고위보다 낮지만 RSI 또는 SRSI가 이전 고위보다 높을 때. 이것은 일반적으로 하향 추세에서 반발을 나타내며 주요 하향 추세가 계속될 것을 예고합니다.

이 전략은 엄격한 필터링 조건을 사용하여 신호의 질을 보장합니다.

  • 회귀 기간 (기본 40주기) 을 사용하여 눈에 띄는 변동점을 찾으십시오.
  • 미세한 변동을 필터링하기 위해 최소 변동 거리를 요구합니다.
  • 최종 변동점과 요구되는 최소 가격 변동의 비율 (설정값 0.5%)

탈피가 감지되면, 전략은 차트에 표지와 연결선을 그리며, 거래자가 이러한 중요한 신호를 직관적으로 식별할 수 있도록합니다. 또한, 전략은 탈피 신호에 따라 자동으로 더 많은 것과 부족한 입력 신호를 생성합니다.

전략적 이점

  1. 다단계 확정: RSI와 무작위 RSI를 결합하면 두 개의 확인을 제공하여 거짓 신호의 가능성을 줄입니다. 두 지표가 모두 이탈 할 때 신호는 더 신뢰할 수 있습니다.
  2. 전면적인 탈선 검출이 전략은 일반적인 변형을 탐지하는 것뿐만 아니라 숨겨진 변형을 탐지하는 것, 거래자에게 전체 시장 관점을 제공합니다.
  3. 시각화: 차트에 직관적 표지판이 떨어져서, 태그와 연결선을 포함하여, 거래자가 신호를 더 쉽게 식별하고 이해할 수 있도록 한다.
  4. 매우 적응력이 좋다전략 파라미터는 회귀 기간, 최소 변동 거리 및 최소 가격 변화와 같은 모두 조정 가능하며, 거래자는 다양한 시장 조건과 시간 프레임에 따라 전략을 최적화 할 수 있습니다.
  5. 필터는 소음을 줄입니다.이 전략은 최소한의 변동 거리와 가격 변동 값을 적용함으로써 시장 소음을 효과적으로 필터링하고 의미있는 가격 구조 변화에 집중합니다.
  6. 트렌드 배경200 EMA를 포함하면 더 넓은 트렌드 컨텍스트가 제공되며, 트레이더들이 전체 시장 트렌드에서 기각 신호의 위치를 이해하는 데 도움이 됩니다.

전략적 위험

  1. 거짓 배신필터가 있더라도, 시장은 가짜 반향 신호를 일으킬 수 있습니다. 특히 높은 변동성이나 평형 시장에서. 이것은 잘못된 거래 결정과 잠재적 인 손실을 초래할 수 있습니다.
  2. 시간 지연: 반향 신호는 일반적으로 가격이 반전되기 시작했을 때 형성되며, 이는 특히 빠르게 변하는 시장에서 부적절한 진입 지점을 초래할 수 있습니다.
  3. 매개변수 민감도: 전략 성능은 회귀 기간과 최소 흔들 거리와 같은 파라미터 설정에 크게 의존한다. 부적절한 파라미터는 너무 많은 또는 너무 적은 신호를 초래할 수 있다.
  4. 지표 제한RSI와 SRSI는 동력 지표로서 특정 시장 조건, 특히 장기 동향 시장이나 극심한 변동 환경에서는 충분히 신뢰할 수 없습니다.
  5. 손해 방지 장치의 부재현재 전략 구현에는 명확한 스톱로스 전략이 포함되어 있지 않아 잠재적인 하락의 위험이 증가합니다.

이러한 위험을 줄이기 위해 다음과 같은 것이 권장됩니다.

  • 다른 기술 지표 또는 분석 방법과 결합하여 신호를 벗어나는 방법, 예를 들어 지원/저항 수준, 붕괴 형태 또는 거래량 분석
  • 다양한 시장 조건에서 테스트 및 최적화 매개 변수 설정
  • 적절한 자금 관리 및 손해 방지 전략을 시행하십시오.
  • 전체 시장 동향의 맥락에서 탈퇴 신호의 의미를 고려하는 것

전략 최적화 방향

  1. 통합 중지 및 정지 메커니즘현재 전략에는 위험 관리 기능이 부족합니다. ATR (평균 실제 범위) 에 기반한 동적 중지 또는 중요한 지지 / 저항 지점에 기반한 고정 중단을 추가하면 전략의 위험 수익률을 크게 향상시킬 수 있습니다. 마찬가지로 가격 목표 또는 시간에 기반한 정지 규칙을 적용하면 수익을 잠금 할 수 있습니다.
  2. 트렌드 필터 추가전략은 EMA를 참조로 포함하지만 거래를 필터링하기 위해 사용하지 않습니다. 조건이 추가 될 수 있습니다. 예를 들어, 200 일 EMA보다 가격이 높을 때만 상향 반향을 고려하거나 200 일 EMA보다 가격이 낮을 때만 하향 반향을 고려하는 것은 주요 추세와 일치하는 데 도움이됩니다.
  3. 신호 확인 메커니즘: 추가 확인 지표가 도입되면서 신호의 신뢰성이 향상될 수 있다.
  4. 동적 변수 조정: 시장의 변동성에 따라 자동으로 조정되는 회귀 기간과 변동 거리의 하락값을 구현하는 메커니즘. 예를 들어, 높은 변동성 시장에서 더 큰 하락값을 사용하고 낮은 변동성 시장에서 더 작은 하락값을 사용합니다.
  5. 강도 평가에서 벗어나기각의 “강도”를 평가하는 등급 시스템을 개발하여 가격과 지표 사이의 편차의 크기와 기각이 형성되는 시간의 길기와 다른 관련 요소를 기반으로합니다. 이것은 거래자가 더 강한 신호를 우선시하도록 도와줍니다.
  6. 다중 시간 프레임 분석: 통합된 여러 시간 프레임 확인, 예를 들어, 더 높은 시간 프레임도 같은 방향의 오차를 표시할 때만 신호를 고려하여, 가짜 신호를 줄일 수 있다.
  7. 가격 변동 감지 개선: 현재 전략은 간단한 고위/저위 검사를 사용한다. 더 복잡한 가격 구조 분석을 구현하기 위해 (예를 들어, 여러 변동점의 연속을 고려하는 것) 검사의 정확성을 향상시킬 수 있다.
  8. 시장 환경 적응: 시장 환경 분류 기능을 추가 (트렌드, 범위 또는 높은 변동성 등) 하고, 감지된 환경에 따라 전략 행동을 조정한다.

요약하다

RSI와 무작위 RSI 외환 거래 전략은 가격과 동력 지표 사이의 불일치를 식별하여 잠재적인 시장 역전과 추세 지속 신호를 잡을 수있는 복잡하고 강력한 기술적 분석 도구입니다. 이 전략은 정규 및 숨겨진 외환 검출을 통합하고, 정교하게 설계된 필터를 적용하여, 높은 확률의 거래 기회를 식별하는 포괄적인 방법을 제공합니다.

그러나, 모든 기술 분석 방법과 마찬가지로, 이 전략은 또한 한계와 위험을 가지고 있다. 위험 관리 메커니즘을 추가, 신호 확인을 개선하고 동적 파라미터 조정을 통합하는 등 권장된 최적화를 실행함으로써 전략의 안정성과 성능을 크게 향상시킬 수 있다.

결국, 이 전략은 다른 분석 도구와 적절한 재원 관리 원칙과 결합하여 더 넓은 거래 시스템의 일부로 가장 적합합니다. 기술 분석과 시장 구조를 이해하는 거래자에게는 이러한 탈퇴 전략이 고품질 거래 설정을 발견하는 데 귀중한 도구가 될 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-06-26 00:00:00
end: 2025-06-24 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("RSI Divergence Strategy", overlay=true)
//strategy("RSI & SRSI Divergence Strategy with EMA & Min Swing Filter + Price Chart Lines", overlay=true)
rsiLength = input.int(14, title="RSI Length")
srsiLength = input.int(14, title="Stochastic RSI Length")
kLength = input.int(3, title="%K Length")
dLength = input.int(3, title="%D Length")
emaLength = input.int(200, title="EMA Length")
lookback = input.int(40, title="Lookback Period for Divergence")
minSwingDistPercent = input.float(1.5, title="Minimum Swing Distance (%)")
minPriceMovePercent = input.float(0.5, title="Minimum Price Move from Last Swing (%)")

rsi = ta.rsi(close, rsiLength)
srsi = ta.stoch(rsi, rsi, rsi, srsiLength)
k = ta.sma(srsi, kLength)
d = ta.sma(k, dLength)
ema200 = ta.ema(close, emaLength)

// === Bullish Regular Divergence ===
var float lastLowPrice = na
var float lastLowRsi = na
var float lastLowSrsi = na
var int lastLowIndex = na
bullishDiv = false
if ta.lowestbars(low, lookback) == 0
    if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
        swingDistLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
        priceMoveLow = math.abs(low - lastLowPrice) / lastLowPrice * 100
        if swingDistLow >= minSwingDistPercent and priceMoveLow >= minPriceMovePercent
            if (low < lastLowPrice and rsi > lastLowRsi) or (low < lastLowPrice and k > lastLowSrsi)
                bullishDiv := true

            lastLowPrice := low
            lastLowRsi := rsi
            lastLowSrsi := k
            lastLowIndex := bar_index
    else
        lastLowPrice := low
        lastLowRsi := rsi
        lastLowSrsi := k
        lastLowIndex := bar_index

// === Bearish Regular Divergence ===
var float lastHighPrice = na
var float lastHighRsi = na
var float lastHighSrsi = na
var int lastHighIndex = na
bearishDiv = false
if ta.highestbars(high, lookback) == 0
    if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
        swingDistHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
        priceMoveHigh = math.abs(high - lastHighPrice) / lastHighPrice * 100
        if swingDistHigh >= minSwingDistPercent and priceMoveHigh >= minPriceMovePercent
            if (high > lastHighPrice and rsi < lastHighRsi) or (high > lastHighPrice and k < lastHighSrsi)
                bearishDiv := true
            
            lastHighPrice := high
            lastHighRsi := rsi
            lastHighSrsi := k
            lastHighIndex := bar_index
    else
        lastHighPrice := high
        lastHighRsi := rsi
        lastHighSrsi := k
        lastHighIndex := bar_index

// === Bullish Hidden Divergence ===
bullishHiddenDiv = false
if ta.lowestbars(low, lookback) == 0
    if not na(lastLowPrice) and not na(lastLowRsi) and not na(lastLowSrsi)
        swingDistLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
        priceMoveLowHidden = math.abs(low - lastLowPrice) / lastLowPrice * 100
        if swingDistLowHidden >= minSwingDistPercent and priceMoveLowHidden >= minPriceMovePercent
            if (low > lastLowPrice and rsi < lastLowRsi) or (low > lastLowPrice and k < lastLowSrsi)
                bullishHiddenDiv := true


// === Bearish Hidden Divergence ===
bearishHiddenDiv = false
if ta.highestbars(high, lookback) == 0
    if not na(lastHighPrice) and not na(lastHighRsi) and not na(lastHighSrsi)
        swingDistHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
        priceMoveHighHidden = math.abs(high - lastHighPrice) / lastHighPrice * 100
        if swingDistHighHidden >= minSwingDistPercent and priceMoveHighHidden >= minPriceMovePercent
            if (high < lastHighPrice and rsi > lastHighRsi) or (high < lastHighPrice and k > lastHighSrsi)
                bearishHiddenDiv := true


// === PLOTS ===
plot(ema200, title="EMA 200", color=color.purple, linewidth=2)

// === STRATEGY ENTRIES ===
if bullishDiv or bullishHiddenDiv
    strategy.entry("Long", strategy.long)
if bearishDiv or bearishHiddenDiv
    strategy.entry("Short", strategy.short)