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))

Отказ от ответственности

Информация и публикации не предназначены для предоставления и не являются финансовыми, инвестиционными, торговыми или другими видами советов или рекомендаций, предоставленных или одобренных TradingView. Подробнее читайте в Условиях использования.