龙空技术网

《学Python量化,通往财务自由》|RSI指标的原理、计算和应用

老Q量化投研 401

前言:

现时朋友们对“python指标”大体比较注重,兄弟们都想要了解一些“python指标”的相关知识。那么小编也在网摘上汇集了一些有关“python指标””的相关知识,希望兄弟们能喜欢,朋友们一起来学习一下吧!

一、RSI简介

股票的涨跌说白了就是多空博弈造成的,多方力量更强则股票价格上涨,空方力量更强则股票价格下跌。那么我们如何来衡量股票的多空力量强弱呢?

上个世纪70年代,威尔斯·威尔得发表了相对强弱指标,即我们常说的RSI(Relative Strength Index),RSI常被我们用来衡量近期多空双方的博弈情况。

我们都知道,当一个指标所有人都在用的时候,它往往就失效了。而RSI正是这样一个无数人知道的经典指标,因此现在单独使用RSI进行决策的时候,效果并不是很好,我们往往需要结合更多指标来辅助决策。

但是我们必须掌握它的原理和计算方式,这是我们之后探索新策略的基础。我们要学会站在巨人的肩膀上赚钱,而不是单纯靠自己造轮子来赚钱。比如我们观察RSI指标可以发现它在预测股价波动上常常存在滞后效应,这一点就可以为我们基于RSI开发更好的交易策略提供支持。

二、RSI的计算公式

其中UP是t期内上涨幅度的平均值,DOWN是t期内下跌幅度的平均值。比如说某股票在五天内上涨3天,分别上涨了1元、3元、5元;五天内下跌了两天,分别下跌了2元、4元。那么这五天内该股票的RSI为100×3/(3+3)=50。

当RSI取值接近0时,说明UP远小于DOWN,即平均上涨幅度远小于平均下跌幅度,这表明下跌的力量远大于上涨力量;当RSI取值接近50时,说明股票上涨的力量与下跌的力量较为接近;当RSI取值接近100时,说明上涨力量远强于下跌力量。

三、用Python计算RSI并绘图

1.获取上证综指数据

import tushare as tsimport seaborn as snsimport matplotlib.pyplot as pltimport matplotlib as mplimport pandas as pd# 设置样式sns.set(style='white')mpl.rcParams['font.sans-serif'] = 'WenQuanYi Micro Hei'pro = ts.pro_api()# 获取数据df = pro.index_daily(ts_code='000001.SH', start_date='20160101')df.index = pd.to_datetime(df.trade_date)df = df.sort_index(ascending=True)df.head()

2.编写RSI计算函数并执行计算

cal_rsi()函数根据传入的一个change序列计算出RSI值,change是指当日收盘价与上一交易日收盘价的差。

def cal_rsi(series): up_days = series[series > 0] down_days = series[series < 0] up = up_days.mean() if len(up_days) > 0 else 0 down = abs(down_days.mean()) if len(down_days) > 0 else 0 return 100 * up / (up + down) df['RSI'] = df.change.rolling(6).agg(cal_rsi)

3.可视化

绘制RSI指标与收盘价的关联趋势,并且增加超买超卖参考线(分别对应RSI的80分和20分位置)。

df2 = df['20180901':]fig, ax = plt.subplots(figsize=(20,5))ax.plot(df2.RSI, 'r-', label='RSI')ax.axhline(20, color='gray', linestyle='--')ax.axhline(80, color='gray', linestyle='--')plt.legend(loc=(0.051,0.1))ax2 = ax.twinx()ax2.plot(df2.close, 'g-', label='收盘价')plt.legend(loc=(0.05,0.05));

标签: #python指标