
RSI와 무작위 RSI의 반발 거래 전략은 시장에서 중요한 전환점을 식별하기 위해 고도로 설계된 고급 기술 분석 방법입니다. 이 전략은 상대적으로 약한 지표 (RSI) 와 무작위적으로 상대적으로 약한 지표 (SRSI) 의 힘을 결합하여 가격과 이러한 동력 지표 사이의 반발을 모니터링하여 잠재적인 트렌드 변화를 예측합니다. 또한, 전략은 지수 이동 평균 (EMA) 을 트렌드 필터로 통합하고 정확한 흔들림 거리의 필터를 적용하여 시장의 소음 대신 의미있는 시장 구조 변화를 포착하는 것을 보장합니다.
이 전략의 핵심 원칙은 기술 분석의 이변 개념에 기반한다. 이변은 가격 움직임과 기술 지표 움직임이 일치하지 않을 때 발생하며, 일반적으로 현재 추세가 반전될 가능성이 있음을 나타냅니다. 이 전략은 네 가지 유형의 이변에 초점을 맞추고 있습니다.
이 전략은 엄격한 필터링 조건을 사용하여 신호의 질을 보장합니다.
탈피가 감지되면, 전략은 차트에 표지와 연결선을 그리며, 거래자가 이러한 중요한 신호를 직관적으로 식별할 수 있도록합니다. 또한, 전략은 탈피 신호에 따라 자동으로 더 많은 것과 부족한 입력 신호를 생성합니다.
이러한 위험을 줄이기 위해 다음과 같은 것이 권장됩니다.
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)