RSI 박스 인디케이터 스크립트
작성자 정보
- 차트분석 작성
- 작성일
컨텐츠 정보
- 3,274 조회
- 1 댓글
- 511 추천
- 219 비추천
- 목록
본문
RSI Box 인디케이터는 상대강도지수(RSI) 를 기반으로 한 맞춤형 TradingView 스크립트로, RSI를 활용하여 추세 강도 및 반전 가능성을 시각적으로 표시해주는 도구입니다. 이 인디케이터는 RSI의 특정 수준에서 매수 및 매도 신호를 감지하여 차트에 박스(Box)와 심볼(▲▼) 을 표시하며, 추세 변화를 한눈에 파악할 수 있도록 도와줍니다.
기능
RSI 기반 추세 박스 생성
- RSI가 과매도 구간(30 이하) 을 상향 돌파하면 매수 박스(녹색) 생성
- RSI가 과매수 구간(70 이상) 을 하향 돌파하면 매도 박스(빨간색) 생성
- 기존 박스가 유지되는 동안 가격이 박스를 벗어나면 신호를 제공
추세 강도 시각화 (색상 반영)
- RSI의 이동평균선(SMA) 변화에 따라 색상 적용
- 상승 추세: 녹색
- 하락 추세: 빨간색
추가적인 매수/매도 신호 표시 (▲▼ 심볼)
- ▼ 매도 신호: 가격이 박스 하단을 돌파할 때 표시
- ▲ 매수 신호: 가격이 박스 상단을 돌파할 때 표시
박스 자동 연장 기능
- 새로운 신호가 나타나지 않는 한 기존 박스를 오른쪽으로 연장하여 시각적 가독성을 높임
세부 작동 원리
1. RSI 값 계산
- 기본 RSI 길이는
14
로 설정 rsiValue = ta.rsi(close, length)
- 종가(
close
)를 기반으로 RSI 값을 계산
- 종가(
rsima = ta.sma(rsiValue, length)
- RSI의 단순 이동평균(SMA)을 구해 추세 필터로 활용
2. 매수/매도 신호 감지
signalUp = ta.crossover(rsiValue, 30)
- RSI가 30을 상향 돌파하면 매수 신호 (
signalUp
) 발생
- RSI가 30을 상향 돌파하면 매수 신호 (
signalDn = ta.crossunder(rsiValue, 70)
- RSI가 70을 하향 돌파하면 매도 신호 (
signalDn
) 발생
- RSI가 70을 하향 돌파하면 매도 신호 (
3. 박스(Box) 생성 및 연장
draw_box(color, top, bot, price)
함수- 특정 가격대에 박스를 생성하고 색상 및 텍스트를 적용
- 매수 신호 발생 시: 녹색 박스 (
up.draw_box(close, close - atr, close)
) - 매도 신호 발생 시: 빨간색 박스 (
dn.draw_box(close + atr, close, close)
) - 새로운 신호가 없을 경우 기존 박스를 연장하여 차트에 유지 (
box1.set_right(bar_index + 4)
)
4. 추가적인 매수/매도 신호 (▲▼)
ta.crossunder(high, box1.get_bottom())
- 박스 하단을 가격이 하향 돌파할 경우
▼
(매도) 신호
- 박스 하단을 가격이 하향 돌파할 경우
ta.crossover(low, box1.get_top())
- 박스 상단을 가격이 상향 돌파할 경우
▲
(매수) 신호
- 박스 상단을 가격이 상향 돌파할 경우
사용 방법
설정에서 "Trend Levels" 활성화
- 박스를 통해 RSI 기반의 매매 신호를 차트에 표시할 수 있음
색상 설정 가능
- 매수 박스(녹색)와 매도 박스(빨간색)의 색상을 사용자 설정 가능
추세 강도 판단
- RSI 이동평균선이 상승하면 녹색
- RSI 이동평균선이 하락하면 빨간색
매수/매도 신호 활용
▲
심볼이 나타나면 매수 고려▼
심볼이 나타나면 매도 고려
주의사항 및 투자 경고
이 인디케이터는 RSI(상대강도지수)를 기반으로 매수 및 매도 신호를 제공하지만, 100% 정확한 신호를 보장하지 않습니다.
과거 데이터를 기반으로 계산되므로, 미래 가격 움직임을 예측하는 데 한계가 있으며 단독으로 사용하기보다는 다른 기술적 분석 도구와 병행하여 활용하는 것이 중요합니다.
잘못된 신호(거짓 신호, False Signal) 가능성
- RSI는 시장 상황에 따라 과매수/과매도 영역에서도 계속 유지될 수 있으며, 신호가 나온다고 해서 반드시 가격이 반전되는 것은 아닙니다.
- 횡보장이나 강한 트렌드가 지속되는 경우, RSI 신호만으로 매매를 결정하면 손실을 볼 수 있습니다.
시장 변동성 고려
- 가격 변동성이 심한 장세에서는 신호가 잦아지거나 신뢰도가 낮아질 수 있습니다.
- 보조 지표(예: 이동평균선, 볼린저 밴드, 거래량 등)와 함께 분석하여 보다 신중한 판단이 필요합니다.
추세와 함께 해석 필요
- 상승 추세에서는 매도 신호가 나와도 가격이 지속적으로 상승할 가능성이 있으며, 하락 추세에서는 매수 신호가 나와도 추가 하락이 이어질 수 있습니다.
- 반드시 전체적인 시장 흐름과 추세 분석을 병행해야 합니다.
백테스트 및 실전 적용 전 시뮬레이션 필요
- 실제 자금을 투입하기 전에 데모 계정이나 백테스트 기능을 활용하여 신뢰도를 확인하는 것이 좋습니다.
- 특정 시장(예: 주식, 암호화폐, 외환 등)에 따라 신호의 정확도가 달라질 수 있습니다.
책임은 투자자 본인에게 있음
- 본 인디케이터는 투자 판단을 돕기 위한 도구일 뿐, 매매 결과에 대한 책임은 투자자 본인에게 있습니다.
- 무리한 레버리지 활용 및 감정적인 매매를 피하고, 철저한 리스크 관리 전략을 마련해야 합니다.
RSI Box 인디케이터는 매매 기회를 포착하는 데 유용한 도구지만, 단독으로 의존하기보다는 종합적인 분석과 리스크 관리가 필수적입니다.
이 인디케이터를 사용할 때는 거짓 신호 가능성을 항상 염두에 두고, 시장 상황을 종합적으로 판단하여 신중한 매매 전략을 세우는 것이 중요합니다.
//@version=5
indicator("RSI box", overlay = true)
// --------------------------------------------------------------------------------------------------------------------}
// User inputs
// --------------------------------------------------------------------------------------------------------------------{
int length = input.int(14, title="Length")
bool show_levl = input.bool(true, "Trend Levels")
// Colors for the trend levels
color up = input.color(color.rgb(85, 232, 80), "+", group = "Colors", inline = "i")
color dn = input.color(color.rgb(220, 69, 69), "-", group = "Colors", inline = "i")
var box1 = box(na)
series float atr = ta.atr(200)
// --------------------------------------------------------------------------------------------------------------------}
// Indicator calculations
// --------------------------------------------------------------------------------------------------------------------{
series float rsiValue = ta.rsi(close, length)
series float correction = close + (close - rsiValue)
series float rsima = ta.sma(rsiValue, length)
bool signalUp = ta.crossover(rsiValue, 30)
bool signalDn = ta.crossunder(rsiValue, 70)
color zlma_color = rsima > rsima[3] ? up : rsima < rsima[3] ? dn : na
color ema_col = rsiValue < rsima ? up : dn // Determine the EMA color
// --------------------------------------------------------------------------------------------------------------------}
// Visualization
// --------------------------------------------------------------------------------------------------------------------{
method draw_box(color col, top, bot, price)=>
box.new(
bar_index, top, bar_index, bot, col, 1,
bgcolor = color.new(col, 90),
text = str.tostring(math.round(price, 2)),
text_size = size.tiny,
text_color = chart.fg_color,
text_halign = text.align_right
)
if show_levl
bool check_signals = signalUp or signalDn
switch
// Draw a box when a bullish signal is detected
signalUp => box1 := up.draw_box(close, close - atr, close)
// Draw a box when a bearish signal is detected
signalDn => box1 := dn.draw_box(close + atr, close, close)
switch
// Extend the right side of the box if no new signal is detected
not signalUp or not signalDn => box1.set_right(bar_index + 4)
=> box1 := box(na) // Otherwise, reset the box
switch
// Add a downward label when price crosses below the bottom of the box
ta.crossunder(high, box1.get_bottom()) and not check_signals[1] and not check_signals and rsiValue > rsima=>
label.new(bar_index - 1, high[1], "▼", color = color(na), textcolor = dn, style = label.style_label_down)
// Add an upward label when price crosses above the top of the box
ta.crossover(low, box1.get_top()) and not check_signals and not check_signals[1] and rsiValue < rsima=>
label.new(bar_index - 1, low[1], "▲", color = color(na), textcolor = up, style = label.style_label_up)
plotshape(signalUp ? low : na, "", shape.square, location.absolute, color = up, size = size.tiny)
plotshape(signalDn ? high : na, "", shape.square, location.absolute, color = dn, size = size.tiny)
// --------------------------------------------------------------------------------------------------------------------}
관련자료
-
이전
-
다음
댓글 1