안녕하세요. 주식 투자 관련 지식을 공유하는 인천고래입니다.
주식 시장에서는 단기간 내에 수익을 얻기 위해 변동성이 큰 종목에서 매매를 하는 것이 일반화되어 있는데요.
변동성을 파악하기 위해서 많은 보조지표가 존재하지만
그 중에서도 변동성을 표준편차 기반으로 측정해서 매수, 매도 시점을 파악하는 것을 목표로 개발된 지표로 RVI(Relative Volatility Index)가 있습니다. 오늘은 RVI에 대해 알아보도록 하겠습니다.
목차
- RVI(상대 변동성 지수)란?
- RVI 계산 방식 이해하기
- RVI 차트 적용 예시 (파이썬 코드 제공)
- RVI 활용 전략 (1)
- RVI 활용 전략 (2)
- RVI 장단점과 주의 사항
- 정리
1. RVI(상대 변동성 지수)란?
1-1. RVI
RVI(Relative Volatility Index)는 이름 그대로 변동성(Volatility)을 상대적으로 파악하는 지표입니다.
일반적으로 많이 쓰이는 RSI(Relative Strength Index) 는 “가격의 상승·하락의 힘”을 주로 다루는 반면, RVI는 같은 방식을 표준편차(Volatility) 기반으로 확장했습니다.
- 개발자: Donald Dorsey
- 핵심 개념: 상승 변동성 표준편차와 하락 변동성 표준편차를 분리해서 비교
- 값의 범위: 보통 0 ~ 100 사이를 오갑니다. (일반적인 오실레이터 지표와 유사)
1-2. RVI를 사용하는 이유
- 가격 변동성 반영: 단순히 가격 상승·하락만 보는 것이 아니라, 그 변동 폭이 어느 정도인지까지 고려합니다.
- 예측 정확도 보강: RSI, Stochastics 등과 병행하면, 과매수/과매도 구간을 좀 더 명확히 파악할 수 있습니다.
- 변동성이 큰 종목에 유리: 변동성이 심한 종목 또는 시장(예: 코스닥, 암호화폐)에서 유용하게 쓰일 수 있습니다.
2. RVI 계산 방식 이해하기
RVI도 일반적으로 기간으로 설정을 하도록 되어 있습니다. 기본 값은 14로 설정되어 있으니 종목 및 변동성에 맞춰서 변경하셔서 사용하시면 됩니다.
- 종가 변동분(전일 대비 차이):
Δ 𝑃 = Close − Close(-1)
- 상승 변동분과 하락 변동분 분류:
Δ 𝑃 > 0 인 경우: 상승 변동분에 해당
Δ 𝑃 < 0 인 경우: 하락 변동분에 해당(값을 절댓값으로 전환) - 상승 변동분의 표준편차와 하락 변동분의 표준편차 계산
Stdev Up = 표준편차 ( { Δ 𝑃 𝑖 ∣ Δ 𝑃 𝑖 > 0 } )
Stdev Down = 표준편차 ( { ∣ Δ 𝑃 𝑖 ∣ ∣ Δ 𝑃 𝑖 < 0 } ) - RVI 공식
RVI = 100 × (Stdev Up / (Stdev Up + Stdev Down))
이렇게 계산된 RVI가 0에 가까우면 하락 변동성이 더 큰 상태, 100에 가까우면 상승 변동성이 더 큰 상태를 의미합니다.
3. RVI 차트 적용 예시 (파이썬 코드 제공)
아래의 코드는 파이썬에서 FinanceDataReader 모듈을 사용해서 삼성전자 주가 데이터를 가져온 후 RVI 지표를 반영해서 시각화한 예시 코드입니다.
p.s: 편의상 fdr을 사용했을 뿐 백테스팅을 진행할 때에는 fdr 사용을 하지 말고 api를 이용해서 데이터를 받아서 사용하셔야 합니다.
import FinanceDataReader as fdr
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# RVI(상대 변동성 지수) 계산 함수
def calculate_rvi(df, period=14):
"""
RVI(Relative Volatility Index)는 Donald Dorsey가 제안한 지표로,
RSI와 유사하지만, 가격 변동 폭 대신 표준편차를 이용하여
'상승 변동성'과 '하락 변동성'을 측정하는 방식입니다.
- period(기본값 14): RVI 계산을 위해 고려할 기간(롤링 윈도우 크기)
"""
# 일별 종가 차이(수익률 비슷한 개념으로 사용)를 구합니다.
ret = df['Close'].diff()
rvi_values = []
for i in range(len(ret)):
# period 이전 구간은 계산 불가이므로 NaN 할당
if i < period:
rvi_values.append(np.nan)
else:
# 최근 period 동안의 상승일/하락일에 대한 표준편차를 구합니다.
recent_changes = ret[i - period + 1: i + 1]
# 상승 폭(양수)과 하락 폭(음수)을 각각 분리
up_changes = [x for x in recent_changes if x > 0]
down_changes = [abs(x) for x in recent_changes if x < 0]
# 표준편차 계산(데이터가 2개 이상 있어야 ddof=1로 표준편차 계산 가능)
stdev_up = np.std(up_changes, ddof=1) if len(up_changes) > 1 else 0
stdev_down = np.std(down_changes, ddof=1) if len(down_changes) > 1 else 0
# 합이 0으로 나누는 상황 방지
denom = stdev_up + stdev_down
if denom == 0:
rvi_values.append(0)
else:
rvi_values.append(100 * stdev_up / denom)
df['RVI'] = rvi_values
return df
if __name__ == "__main__":
# 삼성전자(005930) 주가 데이터 가져오기
df = fdr.DataReader('005930', '2020-01-01')
# RVI 계산
df = calculate_rvi(df, period=14)
# 차트 그리기
fig, axes = plt.subplots(2, 1, figsize=(12, 8), sharex=True)
# 상단 차트: 종가
axes[0].plot(df.index, df['Close'], label='Close Price', color='blue')
axes[0].set_title('Samsung Electronics (005930) - Close Price')
axes[0].legend(loc='best')
# 하단 차트: RVI
axes[1].plot(df.index, df['RVI'], label='RVI(14)', color='red')
axes[1].set_title('Relative Volatility Index')
axes[1].axhline(50, color='gray', linestyle='--', linewidth=1) # 기준선(50) 표시 예시
axes[1].legend(loc='best')
plt.tight_layout()
plt.show()
4. RVI 활용 전략 (1)
RVI를 이용한 기본적인 활용 전략은 아래와 같습니다. (중심값 50을 기준으로 생각하시면 됩니다.)
- 과매수·과매도 영역:
RVI가 80~100: 해당 수치 수준으로 치솟으면 과열 구간으로 판단하여 매도 타점을 잡을 수 있습니다.
RVI가 0~20: 해당 수치 정도로 떨어지면 과매도 구간으로 판단하고, 매수 기회를 모색할 수 있습니다. - 추세 확인 보조:
RVI가 50 이하일 때는 전반적으로 하락 변동성 우위,
RVI가 50 이상일 때는 상승 변동성 우위로 보고 큰 추세를 살펴볼 수 있습니다. - 다른 지표와 병행:
RSI, MACD, Stochastic 등과 함께 볼 때 훨씬 더 신뢰도가 높아집니다.
Bollinger Band 등 변동성 기반 지표들과 혼합 적용하기도 좋습니다.
아래의 차트는 RVI와 RSI를 비교한 차트입니다.
5. RVI 활용 전략 (2)
저도 1% 상위 수준의 주식 투자자는 아니지만 ‘변화’를 맞이하게 되는 것은 결국 투자자의 실행과 경험인 것 같습니다.
우리가 스스로 지표를 만들어서 전략적으로 성공적인 매매법을 만들 수 있는 확률은 극히 드물며 우선은 위대한 투자자들의 발자취를 따라가는 것이 성공적인 투자의 첫걸음이라 생각이 듭니다.
아래의 언급된 항목에서 RVI를 활용할 때에는 어떻게 해야 할지 판단을 꼭 해보시기를 바라겠습니다.
- 분석 관점 확대: 가격 중심 → 가격 + 변동성
- 리스크 관리: 변동이 커지는 시점 포착, 갑작스러운 시장 변화에 대한 빠른 대응
- 자신만의 매매룰 정립: RVI 지표를 매매 전략에 어떻게 녹일지, 구체적인 매수·매도 시그널 기준 마련
RVI는 만능열쇠가 아니지만, 변동성이라는 중요한 단서를 수치화하고, 투자자가 더 나은 판단을 내릴 수 있도록 돕는 훌륭한 보조지표입니다. 부디 이 글이 RVI를 이해하고 활용하는 데 있어 소중한 길잡이가 되길 바랍니다.
6. RVI 장단점과 주의 사항
장점
- 표준편차 활용: 가격 움직임이 클수록 RVI 변화가 두드러지므로, 강한 추세 초입을 캐치하기 유리
- 낮은 지연성: RSI와 유사한 계산 구조를 가져 지연(Lag)이 크지 않습니다.
단점
- 횡보장(박스권)에서는 효과 감소: 변동폭이 제한적이면, RVI 역시 “뚜렷한 신호”를 주기 어렵습니다.
- 허위 신호(Fake Signal) 가능: 모든 오실레이터 지표가 그렇듯, 시장 급등·급락 시 왜곡된 신호가 발생할 수 있어, 다른 지표나 거래량 분석과 함께 보는 것이 좋습니다.
7. 정리
RSI 등 기존 보조지표에서 느낀 한계를 보완하기 위해 RVI(낯선 세상)라는 새로운 보조지표가 나오게 되었는데
RVI 계산 방식이 조금 까다롭게 느껴지지만, 사용법을 익히고 나면 변동성을 좀 더 명확히 파악해 실제 매수·매도 의사결정에 도움을 준다는 장점을 발견하게 될 것입니다.
RVI를 직접 차트에 적용해 보고, 다른 지표들과 어떻게 시너지를 낼 수 있는지 고민해 보신다면 좋은 결과를 얻으실 수 있으리라 생각합니다.
감사합니다.
자신만의 매매법을 자동매매 프로그램으로 만들거나
기법이 확률이 떨어진다면 백테스팅을 사용해서 확률을 높여야 합니다.
아래의 링크를 통해서 요청하시면 요청하신 이상(가격대비 성능의 최대치)의 결과물을 받아 보실 수 있습니다.
한 방에 주식 데이터 만들기 - 크몽
인천고래 전문가의 IT·프로그래밍 서비스를 만나보세요. <p>퀀트 매매, 수익률 높은 매매, 확률 높은 매매, 잃지 않는 매매 등<...
kmong.com
다른 보조지표에 대해서는 아래의 링크 글을 통해 자세히 알아 볼 수 있습니다.
보조지표 리스트 (추세, 모멘텀, 채널, 변동성, 거래량, 기타 지표)
안녕하세요. 주식을 통해 삶을 영위할 수 있는 방법을 찾으며 인생 후반을 준비하고 있는 인천고래입니다.이전부터 보조지표에 대해서 글을 작성해 왔지만 중요한 것 위주로 작성을 하다보니
i-whale.com
단기적인 스윙 및 세력 매집 분석에 용이한 기준봉에 대해서는 아래의 링크 글을 통해 자세히 알아 볼 수 있습니다.
'주식 기준봉' 카테고리의 글 목록
주식 투자에 필요한 교육 내용을 제공하고 시장 정보 및 통계 등 수록하고 기록함을 원칙으로 하되 데이터마이닝을 통해 객관적인 자료를 구축하여 보다 경제적 자유를 얻기 위하여 사이트를
i-whale.com
'Python Code' 카테고리의 다른 글
데이터베이스 접근 쿼리 실행에 대한 2가지 방법 (0) | 2025.02.11 |
---|---|
파이썬에서 인덱스 또는 컬럼을 사용 할 경우 최소/최대 날짜 찾기 (2) | 2025.01.15 |
돈치안 채널(Donchian Channel) 소스 코드를 공개합니다. (0) | 2025.01.14 |
TA-Lib 모듈 설치하기 (부제: 32비트 환경에서 Talib 모듈을 설치하려면) (0) | 2025.01.09 |
캘트너 채널(Keltner Channel) 보조지표, 파이썬 코드 제공 (0) | 2025.01.04 |
댓글