[第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指标计算及呈现。


<<:  Day 26 | 共享 MobX store with get_it

>>:  [前端暴龙机,Vue2.x 进化 Vue3 ] Day30.Vue3 网页小游戏(完结篇) | ♾ 台版鱿鱼游戏,玩?还是不玩?

Day 1:AWS 是什麽?30天从动漫/影视作品看AWS服务应用 -《Vivy -Fluorite Eye's Song》Part 1

AWS服务作为云端服务热门选项已有年余, 但是对於初来乍到的云端新手, 在浮沈於众多名词海与概念海之...

[Day 43] 心情随笔後台及前台(五) - 编辑心情随笔资料画面及动作

接下来要处理的是编辑的画面, 我们看一下昨天这个画面 右边有一个修改的按钮, 点下去之後就可以针对这...

Day28:Azure小白如何使用Azure Cache for Redis来存取常用资料

在昨天我们谈完如何使用Azure Kubernetes Service部署Container应用程序...

[Day 25] Node Event loop 4

前言 今天继续看看 event loop 的核心循环, uv_run() , 可以查看以下网址 ht...

[VSCodeVim] Touch Typing 建立良好的键盘操作习惯

盲打(Touch Typing)建立良好的键盘操作习惯 [系列文目录] 如果我们要使用编辑器进行有效...