量化投资常用技能——指标篇3:详解RSI指标,及其代码实现和绘图

article/2025/11/7 14:25:34

量化投资常用技能 系列文章目录

我们已经介绍了三篇关于量化投资方面绘图的文章和两篇指标类的推导和介绍的文章,大家有兴趣可以了解一下

  • 绘图篇
    • 量化投资常用技能——绘图篇 1:绘制股票收盘价格曲线和ochl烛状图
    • 量化投资常用技能——绘图篇 2:绘制移动平均线
    • 量化投资常用技能——绘图篇3:绘制黄金分割线
  • 指标篇
    • 量化投资常用技能——指标篇1:详解 MACD指标绘制、及其计算过程和作用
    • 量化投资常用技能——指标篇2:详解BOLL(布林线)指标,及其代码实现和绘图

量化投资常用技能——指标篇3

  • 量化投资常用技能 系列文章目录
  • 前言
  • 一、RSI指标介绍
  • 二、RSI指标的数学计算过程
  • 三、RSI指标的代码实现和绘图
    • 主要的计算部分的计算方法
    • 完整的绘图代码
  • 四、RSI指标的一般研判标准
    • 单个RSI指标的基本应用
    • 长短RSI指标的一般研判标注
    • 指标缺陷


前言

由于这一部分主要是给大家介绍指标的数学公式和计算方法,更深入的了解它们,其中有众多的数学公式和理论推导过程,我尽可能排版的工整,方便各位阅读。如果只想看代码实现可以跳到最后面“代码实现”部分

RSI指标的实现其实也很容易上手,计算方式与之前的BOLL指标大同小异,核心计算部分都很容易,大家稍微阅读一下就可以很轻松的理解和使用



大家可以关注我的GitHub:ExileSaber

量化投资这部分内容会在整个包完成并调试后上传,虽然现在还没较高的水平,但是可以一起学习进步



一、RSI指标介绍

该部分主要参考百度百科的介绍

相对强弱指标,即RSI指标

投资的一般原理认为,投资者的买卖行为是各种因素综合结果的反映,行情的变化最终取决于供求关系,而RSI指标正是根据供求平衡的原理,通过测量某一个期间内股价上涨总幅度占股价变化总幅度平均值的百分比,来评估多空力量的强弱程度,进而提示具体操作。

具体的策略介绍会放在 “量化投资常用技能——决策篇” 中



二、RSI指标的数学计算过程

RSI指标简单来说就是计算N日内收盘涨幅平均值和跌幅平均值

N 日 R S I = N 日 内 收 盘 涨 幅 均 值 N 日 内 收 盘 涨 幅 均 值 + N 日 内 收 盘 跌 幅 均 值 × 100 N日RSI = \frac{N日内收盘涨幅均值}{N日内收盘涨幅均值+N日内收盘跌幅均值} \times100 NRSI=N+NN×100

通过公式我们可以发现,该指标反映出来的是N日收盘涨幅均值占N日收盘涨跌幅均值的比例。当股票价格持续上涨,向上力道较大时,计算出来的该指标值较大并呈现出上升趋势;当股票价格持续下跌,向下力道较大时,计算出来的该指标值较小并呈现出下降趋势



三、RSI指标的代码实现和绘图

分为两个部分来讲解,一个是主要的计算部分的代码,学习的同时也可以自己灵活运用在其他地方。另外就是整体的绘图部分,包括烛状图和RSI指标


主要的计算部分的计算方法

  • 涨跌幅度计算
    Series对象可以使用 p c t pct pct_ c h a n g e ( ) change() change()函数来快速简洁的完成涨跌幅的计算,由于第一个数据无法计算涨跌幅度,所以该位置是 N A N NAN NAN值,可以使用Series对象的 d r o p n a ( ) dropna() dropna()函数去掉 N A N NAN NAN值,然后再转换成ndarray对象方便后续处理

代码实现如下

rate = np.array(close.pct_change().dropna())  # 计算涨跌幅度
  • RSI指标计算
    指标计算时需要判断是涨还是跌,并且还要求幅度的移动平均值,因此我们写成普通的循环方便阅读
# window是移动平均的窗口大小
for i in range(len(rate) - window + 1):the_rate = rate[i:i+window]  # 提取每一个窗口的数据up_rate = the_rate[np.where(the_rate > 0)].mean()  # 使用np.where函数判断是涨还是跌down_rate = the_rate[np.where(the_rate < 0)].mean()rsi.append(100 * up_rate / (up_rate - down_rate))

完整的绘图代码

为了绘图全面,我们将“量化投资常用技能——绘图篇 1:绘制股票收盘价格曲线和ochl烛状图”中绘制烛状图的函数 p l o t plot plot_ o c h l ochl ochl 黏贴到这一部分代码中,即可完成多图绘制。另外在数据方面,我们采用另外一种获取数据的方式(该方法不一定每次都可以有效,需要自己寻找解决方法)。完整代码如下:

缺少的库直接 pip install 安装即可

import numpy as np
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import datetime
from matplotlib.dates import date2num
import mpl_finance as mpf# ———————————————————— #
# ———— 默认参数设置 ———— #
# ———————————————————— #
__colorup__ = "red"
__colordown__ = "green"window = 14start = datetime.datetime(2017, 1, 1)
end = datetime.date.today()
stock = web.DataReader("600519.SS", "yahoo", start, end)  # 选择茅台股的数据# ———————————————————— #def plot_ochl(data_df, axs=None, show=False):'''绘制烛状图:param data_df: 输入的数据,输入的数据类型目前只支持DataFrame类型:param axs: 是否在子图上绘制:param show: 是否显示图像:return:'''if axs is None:fig, ax = plt.subplots(figsize=(14, 7))ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)drawer = axelse:drawer = axsqutotes = []# 这部分根据实际表格情况做修改for index, (d, o, c, h, l) in enumerate(zip(data_df.index, data_df.Open, data_df.Close, data_df.High, data_df.Low)):d = date2num(d)  # 蜡烛图的日期要使用matplotlib.finance.date2num进行转换为特有的数字值val = (d, o, c, h, l)  # 日期,开盘,收盘,最高,最低组成tuple对象valqutotes.append(val)  # 加val加入qutotes# 使用mpf.candlestick_ochl进行蜡烛绘制,ochl代表:open,close,high,lowmpf.candlestick_ochl(drawer, qutotes, width=0.6, colorup=__colorup__, colordown=__colordown__)drawer.autoscale_view()drawer.xaxis_date()if show:plt.show()def rsi(stock_df, window, axs=None, show=False):'''计算RSI指标并绘图:param stock_df: 输入的数据,输入的数据类型目前只支持DataFrame类型:param window: 计算RSI的窗口大小:param axs: 是否在子图上绘制:param show: 是否显示图像:return:'''drawer = plt if axs is None else axsclose = stock_df['Close']rate = np.array(close.pct_change().dropna())  # 计算涨跌幅度rsi = []for i in range(len(rate) - window + 1):the_rate = rate[i:i+window]  # 提取每一个窗口的数据up_rate = the_rate[np.where(the_rate > 0)].mean()  # 使用np.where函数判断是涨还是跌down_rate = the_rate[np.where(the_rate < 0)].mean()rsi.append(100 * up_rate / (up_rate - down_rate))drawer.plot(stock.index, 30 * np.ones(len(stock.index)), 'g--', label='30', alpha=0.6)drawer.plot(stock.index, 50 * np.ones(len(stock.index)), 'y-.', label='50', alpha=0.5)drawer.plot(stock.index, 70 * np.ones(len(stock.index)), 'g--', label='70', alpha=0.6)drawer.plot(stock.index[window:], rsi, label='RSI', alpha=0.8)drawer.legend()if show:plt.show()fig, ax = plt.subplots(2, 1, figsize=(14, 7))
plot_ochl(data_df=stock, axs=ax[0])rsi(stock, window, axs=ax[1], show=True)

最后的绘制效果如下:
在这里插入图片描述



四、RSI指标的一般研判标准

该部分主要介绍几个常见的研判标准,实际情况并不一定会和研判标准相符合

主要借鉴了百度百科的介绍,放在最后供大家学习代码后也可以了解一下一些RSI指标的研判标准

单个RSI指标的基本应用

由公式容易知道, 0 ⪕ R S I ⪕ 100 0 \eqslantless RSI \eqslantless 100 0RSI100 R S I = 50 RSI=50 RSI=50 为强势市场与弱势市场分界点

  1. 一般而言,RSI掉头向下为卖出讯号,RSI掉头向上为买入信号。但应用时宜从整体态势的判断出发
  2. RSI的M形走向是超买区常见的见顶形态;W形走向是超卖区常见的见底形态。这时,往往可见RSI走向与价格走向发生背离。所以,背离现象也是一种买卖讯号
  3. RSI由下往上走,一个波谷比一个波谷高构成上升支持线;RSI由上往下走,一个波顶比一个波顶低构成下降压力线。跌破支持线为卖出信号,升穿压力线为买入信号
  4. RSI上穿50分界线为买入信号,下破50分界线为卖出信号
  5. N日RSI的N值常见取5~14日。N值愈大趋势感愈强,但有反应滞后倾向,称为慢速线;N值愈小对变化愈敏感,但易产生飘忽不定的感觉,称为快速线。因此,可将慢速线与快速线比较观察,若两线同向上,升势较强;若两线同向下,跌势较强;若快速线上穿慢速线为买入信号;若快速线下穿慢速线为卖出信号
  6. 由于RSI设计上的原因,RSI在进入超买区或超卖区以后,即使市势有较大的波动,而RSI变动速率渐趋缓慢,波幅愈来愈微,即出现所谓钝化问题。尤其是在持续大涨或大跌时,容易发生买卖“操之过急”的遗憾。解决这个问题的办法,仅就RSI指标本身而言是调整超买区或超卖区的界定指标,如90以上、10以下;二是加大N的取值

长短RSI指标的一般研判标注

短期RSI是指参数相对小的RSI,长期RSI是指参数相对较长的RSI。比如,6日RSI和12日RSI中 ,6日RSI即为短期RSI,12日RSI即为长期RSI。长短期RSI线的交叉情况可以作为我们研判行情的方法

  1. 当短期RSI>长期RSI时,市场则属于多头市场
  2. 当短期RSI<长期RSI时,市场则属于空头市场
  3. 当短期RSI线在低位向上突破长期RSI线,则是市场的买入信号
  4. 当短期RSI线在高位向下突破长期RSI线,则是市场的卖出信号

指标缺陷

  1. RSI指标的时间参数不同,其给出的结果就会不同
    从理论上讲,较短周期的RSI指标虽然比较敏感,但快速震荡的次数较多,可靠性较差;较长周期的RSI指标尽管信号可靠,但指标的敏感性不够,反应迟缓,因而经常出现错过买卖良机的现象
    由于RSI是通过收盘价计算的,如果当天行情的波幅很大,上下影线较长时,RSI就不可能较为准确反映此时行情的变化
  2. 超买、超卖出现后导致的指标钝化现象容易发出错误的操作信号
    在"牛市"和"熊市"的中间阶段,RSI值升至90以上或降到10以下的情况时有发生,此时指标钝化后会出现模糊的误导信息,若依照该指标操作可能会出现失误,错过盈利机会或较早进入市场而被套牢
  3. RSI指标与股价的"背离"走势常常会发生滞后现象
    一方面,市场行情已经出现反转,但是该指标的"背离"信号却可能滞后出现;另一方面,在各种随机因素的影响下,有时"背离"现象出现数次后行情才真正开始反转,同时在研判指标"背离"现象时,真正反转所对应的"背离"出现次数并无定论,一次、两次或三次背离都有出现趋势变化的可能,在实际操作中较难确认
  4. 当RSI值在50附近波动时该指标往往失去参考价值
    一般而言,RSI值在40到60之间研判的作用并不大。按照RSI的应用原则,当RSI从50以下向上突破50分界线时代表股价已转强;RSI从50以上向下跌破50分界线则代表股价已转弱

在实际运用中若要 缩小这个缺点 ,可以在价格变动幅度较大且涨跌变动较频繁时,将RSI参数设定的小一点;在价格变动幅度较小且涨跌变动不频繁时,将RSI参数设定大一点


http://chatgpt.dhexx.cn/article/BFYOeTn8.shtml

相关文章

缠论指标(全网最精准)

支持平台 01 通达信(电脑手机&#xff09; 通达信版本简介 02 01 基础版功能&#xff1a; 支持缠论自动分笔&#xff0c;自动线段&#xff0c;显示笔中枢&#xff08;蓝色&#xff09;&#xff0c;线段中枢&#xff08;橙色&#xff09;&#xff0c;支持笔段中枢混合显示…

使用bind搭建权威DNS、智能DNS

DNS的解析过程&#xff1a;&#xff08;以www.qq.com为例说明&#xff09; 1、在浏览器中输入www.qq.com域名&#xff0c;操作系统会先检查自己本地的hosts文件是否有这个网址映射关系&#xff0c;如果有&#xff0c;就先调用这个IP地址映射&#xff0c;完成域名解析。 2、如…

DNS服务器的搭建

DNS&#xff08;域名系统&#xff09;&#xff0c;它用于TCP/IP网路。它提供的服务是用来将主机名和域名转换为IP地址的工作。 DNS常用术语 1. DNS服务器&#xff1a;提供域名解析服务的主机。 2. DNS客户机&#xff1a;任何联网的需要查询主机域名信息的主机。 3. 正向解析…

部署搭建DNS服务器

部署搭建DNS服务器 域名服务器DNS域名解析流程域名类型 DNS主服务器搭建正向解析配置配置正向区域数据文件DNS服务器测试 反向解析配置配置反向区域数据文件DNS服务器测试 DNS从服务器搭建正向反向解析配置DNS服务器测试 域名服务器 DNS&#xff08;Domain Name Server&#x…

智能DNS服务器搭建

前期准备 查看IP [rootlocalhost ~]# ip a | grep ens 2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 inet 192.168.200.111/24 brd 192.168.200.255 scope global ens32 3: ens34: <BROADCAST,MULTICAST…

DNS:快速搭建公司内网DNS解析服务器

背景 是这样的&#xff0c;公司办公室有小机房&#xff0c;研发测试开发环境在这&#xff0c;但是CTO吧&#xff0c;觉得测试环境通过ip访问太复杂&#xff0c;难记&#xff0c;通过黄页打开觉得太low&#xff0c;虽然办公室出口也有公网ip&#xff0c;直接可以解析进来&#…

DNS搭建

环境 server1&#xff1a;bigpeng1 IP&#xff1a;172.25.1.101 GW&#xff1a;172.25.1.1 DNS&#xff1a;172.25.1.101 server2&#xff1a;bigpeng2 IP&#xff1a;172.25.1.102 GW&#xff1a;172.25.1.1 DNS&#xff1a;172.25.1.101 client&…

基于bind的DNS服务器搭建

文章目录 域名分类域名解析顺序搭建DNS服务器 域名分类 国家域名可分为顶级域名、二级域名&#xff0c;三级域名。 按管理机构的不同分为.com、.net、.org、.cc 、.tv等根域为后缀的域名 缓存域名服务器&#xff1a;通过向其他域名服务器查询获得域名解析记录&#xff0c;将查…

DNS服务器的原理及搭建

文章目录 原理搭建DNS服务器正向解析 原理 DNS&#xff08;Domain Name System&#xff09;是互联网上的一项服务&#xff0c;它作为将 域名 和 IP 地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网。 想要了解域名&#xff08;Domain Name&#xff09;…

简述DNS原理,搭建主-辅服务器,搭建智能DNS

文章目录 一、DNS是什么二、DNS的域名解析过程三、搭建主辅DNS服务器1.设置主DNS服务器2.设置辅DNS服务器 四、访问控制&#xff0c;子域授权五、使用bind搭建智能DNS 一、DNS是什么 DNS(Domain Name Service的缩写)的作用就是根据域名查出IP地址。IP地址是由32位二进制数字组…

搭建DNS服务器实现域名解析

一、DNS服务的概述 1、DNS概述 DNS&#xff08;Domain Name System&#xff09;域名系统&#xff0c;在TCP/IP 网络中有非常重要的地位&#xff0c;能够提供域名与IP地址的解析服务&#xff0c;而不用去记住能够被机器直接读取的IP数串。 通过域名&#xff0c;最终得到该域名对…

DNS智能解析的搭建与配置

分类&#xff1a; LINUX 原文地址&#xff1a;DNS智能解析的搭建与配置 作者&#xff1a;十年梦生 9月份整整忙了一个月&#xff0c;都抽不出时间来写篇文章&#xff0c;这几天趁着10.1终于有时间来写些东西了&#xff0c;将9月份所做的一些东西来做下总结。 今天先写个DNS智能…

基于bind搭建智能dns

题目要求 1.step 1 : 搭建bind服务器&#xff0c;完成对域名 bs.你的名字.org 配置 2.step 2&#xff1a;完成对出口ip的归属地查询 3.step 3&#xff1a;构建归属地acl&#xff0c;完成对不同主机匹配智能解析 4.step 4&#xff1a;利用dig&#xff08;加trace参数&#xff0…

实现智能DNS

文章目录 1 实现智能DNS1.1 GSLB1.2 CDN(Content Delivery Network)内容分发网络1.2.1 CDN工作原理1.3 智能DNS相关技术1.3.1 bind中ACL1.3.2 bind有四个内置的acl1.3.3 访问控制的指令1.3.4 view视图1.3.4.1 view&#xff1a;视图&#xff0c;将ACL和区域数据库实现对应关系&a…

bind搭建智能DNS

小生不才&#xff0c;明知文拙脑蠢&#xff0c;却喜挥笔泼墨&#xff0c;畅叙幽情。才疏学浅&#xff0c;未能熟读圣贤之书&#xff0c;以至学识浅薄&#xff0c;明然众人也&#xff0c;有何不足处望不吝赐教。 DNS域名解析服务(Domain Name System)是用于解析域名与IP地址…

DNS服务搭建

目录 DNS简介 DNS解析原理 DNS的相关配置 DNS主从服务 DNS缓存服务 DNS智能解析&#xff08;分离解析&#xff09; DNS简介 DNS的功能 DNS 域名系统(Domain Name System) 的缩写&#xff0c;它的功能是将域名解析成ip。我们日常上网浏览网页时&#xff0c;在浏览器&#…

基于Java的Cplex入门

Cplex是一种数学优化技术。主要用于提高效率、快速实现策略并提高收益率。Cplex提供灵活的高性能优化程序&#xff0c;解决线性规划 (Linear Programming)、二次方程规划 (Quadratic Programming)、二次方程约束规划 (Quadratically Constrained Programming) 和混合整型规划 (…

python 调用cplex-学术版

转载 https://zhuanlan.zhihu.com/p/101713127 本文要解决的问题&#xff08;默认你已经对python有一定的使用经验&#xff09;&#xff1a;如何用python调用cplex求解器。 这次不能信官网&#xff0c;害我踩了一下午坑(其实是官网表述文件和实际不符&#xff0c;而且还少了一…

CPLEX教程 | Cplex介绍,CPLEX教育版和安装Cplex

前言 最近学习列生成算法&#xff0c;需要用到优化求解器。所以打算学习一下cplex这个商业求解器。 当然也有其他更多的选择&#xff0c;这里暂时以比较容易上手和性能比较好的cplex开始吧。其实&#xff0c;小编也早就想学习使用这个cplex了&#xff0c;毕竟是个好东西。 所…

cplex求解1

python环境下cplex安装 发现了一个简单的方法&#xff0c;直接使用 Anaconda 安装 cplex 包&#xff0c;因为 cplex 把自己最新的 python 包都发到 Anaconda 云里面了。 &#xff08;1&#xff09;打开 dos 命令行窗口&#xff0c;输入&#xff1a; conda install -c IBMDeci…