OPEN-SOURCE SCRIPT

MFI/RSI Divergence Lower

95
하단 지표 구성 및 활용법

MFI (Aqua Line): 거래량이 가중된 자금 흐름입니다. 지지선 근처에서 이 선이 저점을 높이면(다이버전스) 강력한 매수 신호입니다.

RSI (Yellow Line): 가격의 상대적 강도입니다. MFI와 함께 움직임을 비교하여 보조적으로 활용합니다.

리페인팅 방지 핵심: offset=-lb_r 설정을 통해, 지표가 확정되는 시점(피벗 완성 시점)에 정확히 신호가 표시되도록 구현했습니다. 이는 과거 백테스트 결과와 실시간 매매 결과가 일치하도록 보장합니다.

실전 응용
지지/저항 필터: 이 지표 단독으로 사용하기보다, 차트 상의 주요 지지선에 가격이 위치했을 때 발생하는 BULL DIV 신호만 골라 매수하면 승률이 극대화됩니다.

손절/익절 최적화: 현재 1.5% 손절, 3% 익절로 설정되어 있습니다. 종목의 변동성(ATR)에 따라 group_risk에서 수치를 조정하며 최적의 수익 곡선을 찾아보십시오.


Pine Script®
//@version=6 strategy("Hybrid MFI/RSI Divergence Lower", overlay=false, // 하단 지표 설정을 위해 false initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.05, slippage=1) // --- [ 모듈 1: 사용자 입력 ] --- group_date = "1. 백테스트 기간" start_time = input.time(timestamp("2024-01-01 00:00:00"), "시작일", group=group_date) end_time = input.time(timestamp("2026-12-31 23:59:59"), "종료일", group=group_date) within_window() => time >= start_time and time <= end_time group_osc = "2. 오실레이터 설정" mfi_len = input.int(14, "MFI 기간", group=group_osc) rsi_len = input.int(14, "RSI 기간", group=group_osc) ob_level = input.int(80, "과매수 기준", group=group_osc) os_level = input.int(20, "과매도 기준", group=group_osc) group_div = "3. 다이버전스 감도" lb_l = input.int(5, "피벗 왼쪽 범위", group=group_div) lb_r = input.int(5, "피벗 오른쪽 범위", group=group_div) group_risk = "4. 리스크 관리" tp_pct = input.float(3.0, "익절 (%)", step=0.1, group=group_risk) / 100 sl_pct = input.float(1.5, "손절 (%)", step=0.1, group=group_risk) / 100 // --- [ 모듈 2: 지표 계산 ] --- mfi_val = ta.mfi(close, mfi_len) rsi_val = ta.rsi(close, rsi_len) avg_val = (mfi_val + rsi_val) / 2 // MFI와 RSI의 평균값으로 부드러운 흐름 파악 // --- [ 모듈 3: 다이버전스 로직 (리페인팅 방지) ] --- // 저점 피벗 탐지 (MFI 기준) pl = ta.pivotlow(mfi_val, lb_l, lb_r) ph = ta.pivothigh(mfi_val, lb_l, lb_r) // Bullish Divergence (상승 다이버전스) var float last_pl_mfi = na var float last_pl_price = na bool is_bull_div = false if not na(pl) last_pl_mfi := mfi_val[lb_r] last_pl_price := low[lb_r] // 이전 저점 탐색 float prev_pl_mfi = ta.valuewhen(not na(pl), mfi_val[lb_r], 1) float prev_pl_price = ta.valuewhen(not na(pl), low[lb_r], 1) if low[lb_r] < prev_pl_price and mfi_val[lb_r] > prev_pl_mfi is_bull_div := true // Bearish Divergence (하락 다이버전스) var float last_ph_mfi = na var float last_ph_price = na bool is_bear_div = false if not na(ph) last_ph_mfi := mfi_val[lb_r] last_ph_price := high[lb_r] float prev_ph_mfi = ta.valuewhen(not na(ph), mfi_val[lb_r], 1) float prev_ph_price = ta.valuewhen(not na(ph), high[lb_r], 1) if high[lb_r] > prev_ph_price and mfi_val[lb_r] < prev_ph_mfi is_bear_div := true // --- [ 모듈 4: 주문 실행 ] --- if within_window() if is_bull_div strategy.entry("Bull", strategy.long, comment="Bull Div") if is_bear_div strategy.entry("Bear", strategy.short, comment="Bear Div") strategy.exit("ExB", "Bull", limit=strategy.position_avg_price * (1 + tp_pct), stop=strategy.position_avg_price * (1 - sl_pct)) strategy.exit("ExS", "Bear", limit=strategy.position_avg_price * (1 - tp_pct), stop=strategy.position_avg_price * (1 + sl_pct)) // --- [ 모듈 5: 하단 지표 시각화 ] --- // 배경 레이아웃 hline(ob_level, "Overbought", color=color.new(color.red, 50), linestyle=hline.style_dashed) hline(50, "Middle", color=color.new(color.gray, 70)) hline(os_level, "Oversold", color=color.new(color.green, 50), linestyle=hline.style_dashed) // 메인 지표 플롯 plot(mfi_val, "MFI (Money Flow)", color=color.new(color.aqua, 0), linewidth=2) plot(rsi_val, "RSI (Momentum)", color=color.new(color.yellow, 50), linewidth=1) // 다이버전스 발생 시 하단 지표 영역에 선 그리기 plotshape(is_bull_div ? mfi_val[lb_r] : na, "Bull Div Circle", shape.circle, location.absolute, color.green, size=size.tiny, offset=-lb_r) plotshape(is_bear_div ? mfi_val[lb_r] : na, "Bear Div Circle", shape.circle, location.absolute, color.red, size=size.tiny, offset=-lb_r) // 과매수/과매도 배경색 fill(hline(ob_level), hline(100), color.new(color.red, 90)) fill(hline(0), hline(os_level), color.new(color.green, 90))

Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.