RSI
RSI
RSI [ Relative Strength Index ]는 가격의 상승 압력과 하락 압력간의 상대적인 강도를 나타내는 대표적 반추세지표(Countertrend Oscillator)이다.
1978년 J. Welles Wilder, Jr는 그의 저서인 "New Concepts inTechnical Trading Systems" 에서 RSI를 소개했는데 "Relative StrengthIndex" 즉 "상대 강도 지수"로 번역할 수 있을 것이다. ( 이 "상대 강도 지수"라는 용어 때문에 혼동이 오는 경우가 많은데, 이 상대 강도라 함은 가격변동 중 상승의 강도를 나타내는 용어이지 흔히 쓰이는 종목과 업종간 상대 강도 등과는 다른 개념임을 유의하여야 한다.)
즉, RSI는 일정한 기간을 기준으로 그 기간의 가격 변동분 중 상승분이 어떤 비중을 차지하고 있느냐를 나타내는 것으로서, RSI가 "0"에 가깝다는 것은 그 일정기간 중 하락 강도가 강하다는 것이고 반대로 RSI가 "100"에 가깝다는 것은 그 일정기간 중 상승 강도가 강하다는 것을나타내는 것이다
[ 계 산 법 ]
RSI(상대강도지수, Relative Strength Index)는 주식 시장에서 주가의 상승과 하락의 강도를 나타내는 지표 중 하나입니다. RSI를 계산하는 수식은 다음과 같습니다:
여기서 는 상대강도(Relative Strength)이며, 다음과 같이 계산됩니다:
이제 이 수식을 C# 언어로 구현해 보겠습니다. 아래는 간단한 RSI 계산 함수의 예시입니다:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 주식 가격 데이터 예시
List<double> prices = new List<double> { /* 여기에 주식 가격 데이터 입력 */ };
// RSI 계산
double rsi = CalculateRSI(prices, 14); // 14일 기간을 예시로 사용
Console.WriteLine($"RSI: {rsi}");
}
static double CalculateRSI(List<double> prices, int period)
{
if (prices.Count < period + 1)
{
throw new ArgumentException("데이터 포인트의 수가 기간보다 적습니다.");
}
double averageGain = 0;
double averageLoss = 0;
// 초기값 설정
for (int i = 1; i <= period; i++)
{
double priceDiff = prices[i] - prices[i - 1];
if (priceDiff > 0)
{
averageGain += priceDiff;
}
else
{
averageLoss += Math.Abs(priceDiff);
}
}
averageGain /= period;
averageLoss /= period;
for (int i = period + 1; i < prices.Count; i++)
{
double priceDiff = prices[i] - prices[i - 1];
if (priceDiff > 0)
{
averageGain = (averageGain * (period - 1) + priceDiff) / period;
averageLoss = (averageLoss * (period - 1)) / period;
}
else
{
averageLoss = (averageLoss * (period - 1) + Math.Abs(priceDiff)) / period;
averageGain = (averageGain * (period - 1)) / period;
}
}
double rs = averageGain / averageLoss;
// RSI 계산
double rsi = 100 - (100 / (1 + rs));
return rsi;
}
}
댓글
댓글 쓰기