
RSI 트렌드 이탈 전략 지표는 상대적으로 강한 지수 ((RSI) 와 가격 사이의 이탈 관계를 활용하여 거래자에게 높은 확률의 구매 및 판매 신호를 제공합니다. 이 전략은 특히 30 분 시간 프레임에 최적화되어 있으며, 시장 전환점을 효과적으로 식별하기 위해 RSI 입구 및 출구 수준을 정확하게 계산하여 황소와 곰의 이탈 신호를 결합합니다. 이 전략은 거래자가 RSI의 입구 및 출구 파라미터를 다른 시장 및 시간 프레임의 특성에 따라 조정하여 거래 결과를 최적화 할 수 있습니다.
RSI 트렌드는 두 가지 핵심 기술 지표의 상호 작용에 따라 전략에서 벗어납니다.
상대적으로 약한 지수 (RSI) 과매도/ 과매도 수준정책: 사용자가 RSI의 입구 및 출구 수준을 사용자 정의 할 수 있습니다. 기본 설정으로, 다중 입구 수준은 35.0, 공중 입구 수준은 76.0, 다중 출구 수준은 80.0, 공중 출구 수준은 54.1입니다. 이러한 수준은 수년간의 경험 테스트를 통해 얻었으며 30 분 시간 프레임에 최적화되었습니다.
RSI는 신호에서 벗어났습니다.이 두 가지 유형의 탈북은 다음과 같습니다.
정책 실행 논리는 다음과 같습니다.
시스템은 5개의 기둥의 데이터를 거슬러 올라가며 오차를 식별하고 조건이 충족되면 거래 신호를 자동으로 생성하여 수동 분석의 필요성을 크게 줄입니다.
높은 정밀도 신호 필터링RSI 레벨과 가격 이탈을 결합하여 약한 신호를 효과적으로 필터링하여 거래의 성공률을 높여 높은 확률의 전환점에서만 거래를 유발합니다.
맞춤형: 거래자는 다양한 시장과 시간 프레임의 특성에 따라 RSI의 진입 및 출구 수준을 조정하여 전략의 성능을 최적화 할 수 있습니다. 이러한 유연성은 다양한 거래 품종과 시간 기간에 적용 할 수 있습니다.
직관적인 시각적 도움말이 전략은 다음과 같은 다양한 시각적 요소를 제공합니다.
자동화 거래의 잠재력: 트레이딩뷰의 Webhook 기능을 통해 외부 거래 플랫폼과의 통합을 지원하여 거래의 자동 실행을 가능하게 하며, 인적 개입과 감정 영향을 줄일 수 있습니다.
오픈소스 투명성전략 코드는 완전히 오픈 소스로, 트레이더가 작동 원리를 깊이 이해하고 자신의 필요에 따라 수정 및 최적화를 할 수 있습니다.
시장 추세 위험이 전략은 전환점을 식별하는 데 잘 작동하지만, 강한 추세 시장에서 잘못된 신호를 일으킬 수 있습니다. 특히 강한 하향 추세 또는 곰 시장에서 다중 신호의 신뢰성이 크게 감소합니다.
매개변수 민감도RSI 입시 및 출구 레벨의 설정은 전략에 큰 영향을 미칩니다. 부적절한 파라미터 설정은 과도한 거래 또는 중요한 기회를 놓치게 할 수 있습니다. 해결책은 특정 시장 및 시간 프레임에 대한 파라미터를 최적화하여 재검토하는 것입니다.
지연의 위험전략적으로 뒤쳐진 지표 (RSI) 를 사용하며, 형성되는 것을 기다리기 때문에, 특히 격렬한 시장의 변동에 따라, 입수점이 이상적이지 않을 수 있습니다.
가짜 침입 위험: 시장은 잘못된 거래로 인해 잘못된 신호를 형성할 수 있습니다. 다른 기술 지표 또는 더 높은 시간 프레임에 대한 확인 신호와 결합하는 것이 좋습니다.
수수료와 슬라이드 포인트 영향: 전략은 0.1%의 수수료를 기본으로 설정하지만 실제 거래의 수수료와 슬라이드 포인트는 설정된 값과 다를 수 있으며 실제 재검토 결과와 실제 거래의 성과에 영향을 미칩니다.
다중 시간 프레임 분석 통합: 전략을 다중 시간 프레임 분석 시스템으로 확장하여 상위 시간 프레임의 트렌드 방향이 이탈 신호와 일치하는 경우에만 거래를 수행합니다. 예를 들어, 당일 선이 상승 추세를 나타내고 30 분 차트에서 황소 시장 이탈이 나타나면만 다중 거래가 수행됩니다.
거래량 필터를 추가합니다.: 기각 신호가 형성될 때 거래량 확인 메커니즘을 추가하여 신호의 신뢰성을 높인다. 예를 들어, 기각 형성될 때 거래량이 기각 또는 확인 모드를 나타내고 있는지 확인할 수 있다.
RSI 변수 적응: 시장의 변동성에 따라 RSI의 입수 및 출구 수준을 자동으로 조정하는 적응 알고리즘을 개발하여 다양한 시장 환경에 적응하십시오.
손해 방지 장치의 최적화현재 전략은 RSI 수준에서만 거래를 종료하고, 가격 기반의 중지 장치를 추가하여 단일 거래의 최대 손실을 제한할 수 있습니다.
시장 환경 필터링: 트렌드 식별 지표 (예를 들어 이동 평균 또는 ADX) 를 통합하여 적절한 시장 환경에서 특정 방향의 거래만 수행하고 역동적인 거래를 피합니다.
기계 학습 최적화: 기계 학습 알고리즘을 사용하여 역사 데이터를 분석하여 최적의 RSI 파라미터와 확증 조건에서 벗어난 것을 자동으로 식별하여 전략 성능을 더욱 향상시킵니다.
RSI 트렌드 이탈 전략 지표는 RSI 지표와 가격 이탈을 결합하여 시장의 전환점을 효과적으로 식별하는 강력한 수치 거래 도구입니다. 이 전략의 가장 큰 장점은 매우 사용자 정의 가능하고 직관적인 시각적 도움으로 거래자가 다른 시장 환경에 따라 거래 결정을 최적화 할 수 있습니다.
이 전략의 핵심 가치는 신호 필터링 능력에 있으며, RSI가 특정 수준에 있을 때만 거래가 촉발되며 동시에 가격의 이탈이 발생할 때 거래 신호의 질을 크게 향상시킵니다. 그러나 사용자는 시장 추세 위험과 변수 감수성에 주의를 기울이고, 특정 시장과 시간 프레임에 적합한 최적의 변수를 찾아내는 데 필요한 재검토를 수행해야합니다.
다중 시간 프레임 분석, 거래량 확인, 적응 파라미터 및 강화 된 위험 관리 메커니즘과 같은 최적화 방향으로 이 전략은 성능과 적응력을 더욱 향상시킬 잠재력을 가지고 있습니다. 기술 지표에 의해 구동되는 정량 거래 전략을 찾는 거래자에게는 깊이 연구하고 적용할 가치가있는 도구입니다.
/*backtest
start: 2024-06-13 00:00:00
end: 2025-06-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy(title="RSI Divergence Strategy", shorttitle="RSI Divergence Strategy", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.1, slippage=0, initial_capital=100000, currency=currency.USD, process_orders_on_close=false)
// RSI Settings
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
calculateDivergence = input.bool(true, title="Calculate Divergence", group="RSI Settings", tooltip="Required for divergence signals")
// Added RSI Level Inputs
longEntryLevel = input.float(35.0, "Long Entry RSI", minval=0, maxval=100, step=0.1, group="RSI Levels")
shortEntryLevel = input.float(76.0, "Short Entry RSI", minval=0, maxval=100, step=0.1, group="RSI Levels")
longExitLevel = input.float(80.0, "Long Exit RSI", minval=0, maxval=100, step=0.1, group="RSI Levels")
shortExitLevel = input.float(54.1, "Short Exit RSI", minval=0, maxval=100, step=0.1, group="RSI Levels")
// RSI Calculation
change = ta.change(rsiSourceInput)
up = ta.rma(math.max(change, 0), rsiLengthInput)
down = ta.rma(-math.min(change, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
// Divergence Parameters
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
_inRange(bool cond) =>
bars = ta.barssince(cond)
rangeLower <= bars and bars <= rangeUpper
var bool plFound = false
var bool phFound = false
var bool bullCond = false
var bool bearCond = false
// Global variables to store _inRange results
var bool inRangePlFound = false
var bool inRangePhFound = false
rsiLBR = rsi[lookbackRight]
// Update _inRange results on every bar
inRangePlFound := _inRange(plFound[1])
inRangePhFound := _inRange(phFound[1])
if calculateDivergence
// Regular Bullish Divergence
plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))
rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and inRangePlFound
lowLBR = low[lookbackRight]
priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
bullCond := priceLL and rsiHL and plFound
// Regular Bearish Divergence
phFound := not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and inRangePhFound
highLBR = high[lookbackRight]
priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
bearCond := priceHH and rsiLH and phFound
// Strategy Entries with customizable RSI levels
if bullCond and rsi < longEntryLevel
strategy.entry("Long", strategy.long)
if bearCond and rsi > shortEntryLevel
strategy.entry("Short", strategy.short)
// Strategy Exits with customizable RSI levels
if rsi >= longExitLevel
strategy.close("Long")
if rsi <= shortExitLevel
strategy.close("Short")
// ———————— Visualizations ———————— //
// Plot RSI line
rsiColor = rsi > 70 ? color.new(#ff5252, 0) : rsi < 30 ? color.new(#4bf335, 0) : color.new(#b8b8b8, 0)
plot(rsi, title="RSI", color=rsiColor, linewidth=2, style=plot.style_line)
// Plot horizontal levels
hline(longEntryLevel, "Long Entry", color=color.new(#4bf335, 0), linestyle=hline.style_solid)
hline(shortEntryLevel, "Short Entry", color=color.new(#ed1404, 0), linestyle=hline.style_solid)
hline(longExitLevel, "Long Exit", color=color.new(#4bf335, 0), linestyle=hline.style_dashed)
hline(shortExitLevel, "Short Exit", color=color.new(#ed1404, 0), linestyle=hline.style_dashed)
// Plot traditional levels
ob = 70
os = 30
hline(ob, "Overbought", color=color.new(#ff5252, 70), linestyle=hline.style_dotted)
hline(os, "Oversold", color=color.new(#4bf335, 70), linestyle=hline.style_dotted)
// Background colors
bgcolor(rsi >= ob ? color.new(#ff5252, 90) : na)
bgcolor(rsi <= os ? color.new(#4bf335, 90) : na)
bgcolor(rsi > os and rsi < ob ? color.new(#424242, 95) : na)
// ———————— DIVERGENCE VISUALS ———————— //
// Position labels below RSI for bullish, above for bearish
bullLabelY = math.max(0, rsi[lookbackRight] - 15) // Position below RSI line
bearLabelY = math.min(100, rsi[lookbackRight] + 15) // Position above RSI line
// CORRECTED: Pass y-coordinate as first argument for absolute positioning
plotshape(bullCond ? bullLabelY : na, title="Bullish Divergence", text="BULL", style=shape.labelup,
location=location.absolute, color=color.new(#4bf335, 50), textcolor=color.white,
size=size.tiny, offset=-lookbackRight)
plotshape(bearCond ? bearLabelY : na, title="Bearish Divergence", text="BEAR", style=shape.labeldown,
location=location.absolute, color=color.new(#ed1404, 50), textcolor=color.white,
size=size.tiny, offset=-lookbackRight)