本文說明RSI指標。
RSI(Relative Strength Index):相對強弱指標,由技術分析大師 Wells Wilder 所發表,衡量一段時間內,投資標的漲跌趨勢的相對指標。
計算公式:
RSI = 100 × 前N日漲幅的平均值 ÷ ( 前N日漲幅的平均值 + 前N日跌幅的平均值 )
RSI 大於 80 時為超買訊號,市場過熱,看跌。
RSI 小於 20 時為超賣訊號,市場過冷,看漲。
黃金交叉時可以買進,死亡交叉時可以賣出。
import pandas as pd
import numpy as np
import yfinance as yf
import datetime as dt
import matplotlib.pyplot as plt
# rsi 函數
# 傳入收盤價及RSI分析區間
def rsi(Close, period=14):
# 日漲跌
Spread = Close - Close.shift(1)
# 上漲幅度
up_range = pd.Series(index=Spread.index, data=Spread[Spread>0])
up_range = up_range.fillna(0)
# 下跌幅度(取正值,加負號)
down_range = pd.Series(index=Spread.index, data=-Spread[Spread<0])
down_range = down_range.fillna(0)
# 計算平均漲跌幅度
up_avg = []
down_avg = []
for i in range(period+1, len(up_range)+1):
up_avg.append(np.mean(up_range.values[i-period:i]))
down_avg.append(np.mean(down_range.values[i-period:i]))
# 計算 RSI
rsi = []
for i in range(len(up_avg)):
rsi.append( 100 * up_avg[i] / ( up_avg[i] + down_avg[i] ) )
rsi_series = pd.Series(index = Close.index[period:], data = rsi)
return rsi_series
# 開始時間
start=dt.datetime.today()-dt.timedelta(29)
# 結束時間
end=dt.datetime.today()
# 下載台股長榮(2603)歷史交易資料
df_2603 = pd.DataFrame(yf.download("2603.TW", start=start, end=end))
print("df_2603:\n",df_2603.Close)
rsi_df = rsi(df_2603.Close, 14)
print("rsi:\n" ,rsi_df)
plt.plot(rsi_df)
plt.title('RSI')
plt.axhline(y=80, color='red')
plt.axhline(y=20, color='green')
plt.savefig("RSI.png")
使用yfinance取得個股歷史資料及進行RSI指標計算及呈現。