iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
永豐金融APIs

理財達人Mx. Ada系列 第 24

[第24天]理財達人Mx. Ada-RSI指標

前言

本文說明RSI指標。

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")

程式執行結果

https://ithelp.ithome.com.tw/upload/images/20211009/20107143lu4kzn4wKe.png

RSI 繪圖成果

https://ithelp.ithome.com.tw/upload/images/20211009/20107143ywxuGDFA4K.png

小結

使用yfinance取得個股歷史資料及進行RSI指標計算及呈現。


上一篇
[第23天]理財達人Mx. Ada-KDJ指標
下一篇
[第25天]理財達人Mx. Ada-ADX指標
系列文
理財達人Mx. Ada30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言