RSI 박스 인디케이터 스크립트

작성자 정보

  • 차트분석 작성
  • 작성일

컨텐츠 정보

  • 3,274 조회
  • 1 댓글
  • 511 추천
  • 219 비추천
  • 목록

본문

d2d55-67aea451c28a7-d9449a2325c5b147b3157104a5c170068fc13437.png

 

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) 발생
  • signalDn = ta.crossunder(rsiValue, 70)
    • RSI가 70을 하향 돌파하면 매도 신호 (signalDn) 발생

 

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

오라니냐님의 댓글

  • 오라니냐
  • 작성일
이거 어떻게 적용하는거죠?
58 럭키포인트 당첨!
📊 크립토 공포지수 Latest Crypto Fear & Greed Index
알림 0