RSI相对强弱指数因子背后逻辑的探索

传统RSI策略的核心是超卖买入、超买卖出的均值回归逻辑,识别出超卖/超买机会。

这里尝试基于网络资料,探索RSI相对强弱指数因子的计算方法,以及在实践中的应用逻辑。

1 RSI指标计算

RSI(相对强弱指数)的核心逻辑是衡量近期涨幅与跌幅的比值。

最常用的周期是14天(N=14)。

1.1 计算过程

计算分为三步,请按顺序操作:

第1步:计算每日的价格变动

  • 上涨幅度(U) = 今日收盘价 − 昨日收盘价(若为负数,则记为 0)

  • 下跌幅度(D)= 昨日收盘价 − 今日收盘价(若为负数,则记为 0)

(注:U 和 D 均为正值,二者不会同时大于0)

第2步:计算平均涨幅和平均跌幅

这里有两种主流算法,结果略有不同。

1)Wilder 原始平滑法(最常用)

先计算首日的初始平均值:AvgU₁ = 前14天U的总和 / 14,AvgD₁ = 前14天D的总和 / 14。

从第15天开始,使用递推公式:

  • AvgUₜ = (AvgUₜ₋₁ × 13 + 今日U) / 14

  • AvgDₜ = (AvgDₜ₋₁ × 13 + 今日D) / 14

  • 本质是一种指数移动平均,赋予近期更大权重

TradingView默认使用 Wilder 法

2)简单移动平均 SMA

直接计算过去14天 U 和 D 的算术平均值。即 `AvgU = SUM(近14天U)/14`,每天滚动计算。

通达信、同花顺等软件默认使用此方法

第3步:计算 RS 和 RSI

相对强弱(RS) = AvgU / AvgD

RSI 值 = 100 - 100 / (1 + RS)

需要注意的是,若 AvgD = 0,即14天从未下跌,则 RSI 直接定义为 100。

1.2 数值示例

假设N=14

若某段周期内,平均涨幅为 10,平均跌幅为 5,则 RS = 10/5 = 2。

代入公式:RSI = 100 − (100 / (1+2)) = 100 − 33.33 = 66.67。

2 RSI因子

因为不同股票的 RSI 绝对值受波动率影响无法横向对比。

量化多因子选股或回测中,通常不会直接使用原始的 RSI(0~100)数值。

RSI因子通常指基于 RSI 衍生出的信号值或标准化值。

RSI最大局限性在于本质上是一个震荡市策略,在强趋势市场中容易失效。

实战中需要根据市场状态灵活调整参数和阈值,或与其他指标配合使用。

2.1 原始RSI因子

这里经常作为反转因子,即(取反)。

直接取当前股票的标准 RSI 数值(如14日RSI)。

RSI越高,未来短期下跌概率越大;

RSI越低,未来反弹概率越大。

最传统的是标准阈值法,将RSI数值划分为四个区域:

RSI区间 市场状态 传统操作信号
80以上 极强/超买 卖出(物极必反)
50~80 强势 买入/持有
20~50 弱势 卖出/观望
20以下 极弱/超卖 买入(伺机建仓)

RSI > 70视为超买,发出卖出信号;

RSI < 30视为超卖,发出买入信号。

参数通常设为14日周期。

2.2 RSI 差分因子(动量衰减)

RSI_Diff = 今日RSI - 前N日RSI

比如减去5日前RSI。

衡量RSI的变动斜率。若 RSI 虽高但开始掉头向下(差分转负),是更强的卖出信号。

2.3 RSI 标准化因子

在每一个调仓日,计算全市场所有股票的 RSI 的Z-score

(个股RSI - 全市场RSI均值) / 全市场RSI标准差

剔除市场整体情绪影响,选出相对自身行业/市场处于超买或超卖的个股。

3 RSI计算实践

3.1 计算避坑提醒

1)除零处理

若遇到连续大涨(AvgD=0),RSI 直接赋值为 100,千万不能除以 0。

3)数据对齐

计算前务必确保收盘价序列是复权价格,否则除权除息会导致跳空,使 RSI 数值失真。

3)初始值影响

Wilder 法在第一个平均值计算时,如果仅用前14天简单平均,前20个左右的 RSI 值参考意义不大,一般建议预热至少 50~100 根 K 线后再使用。

3.2 Python计算代码

以下时计算RSI的python代码时示例,采用简单移动平均 SMA。

复制代码
import pandas as pd
import numpy as np

def calculate_rsi(data, period=14):
    # data 为包含 'close' 列的 DataFrame
    delta = data['close'].diff()
    gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
    
    # 注意:这里用的是 SMA 法;若需 Wilder 法,将 rolling_mean 改为 ewm(alpha=1/period)
    rs = gain / loss
    rsi = 100 - (100 / (1 + rs))
    
    # 处理除零(loss=0)
    rsi = rsi.fillna(100)
    return rsi

如果构造"取反后的反转因子,在计算出上述 RSI 原始值后,直接乘以 -1即可。

更精确的做法是当 RSI 从超买区(>70)回落跌破70时赋值为 -1(空头信号),从超卖区(<30)回升突破30时赋值为 +1(多头信号)。

reference


RSI超买/超卖交易策略

https://www.shinnytech.com/articles/trading-strategy/mean-reversion/rsi-strategy

相对强弱指标(RSI)

https://www.cfachina.org/inv/zsyd/qhabc/jsmfx/201510/t20151023_20308.html

RSI 钩形反转策略

https://doc.stocksharp.com/zh/api-examples/0092_RSI_Hook_Reversal

RSI Hook Reversal Strategy (C#)

https://stocksharp.com/zh/store/stocksharp.strategies.0092_rsi_hook_reversal

相关推荐
weixin_4896900213 分钟前
训练素材数据转变过程
人工智能·python
东莞市云毅网络有限公司14 分钟前
基于GEO的品牌信源矩阵构建:从内容生产到AI采信的全链路设计
人工智能·机器学习·矩阵
不吃鱼的羊14 分钟前
图式疗法简介
人工智能
成都佳洋光电科技有限公司23 分钟前
一文了解机器视觉成像
图像处理·人工智能·工业相机·工业镜头·短波红外
雷帝木木24 分钟前
开源与商业AI工具的选型框架:总拥有成本、定制化与社区活力评估
人工智能·python·深度学习·机器学习
IT古董25 分钟前
AI 资讯日报 | 2026年8月24日:资本加码全栈AI,开源模型持续反攻,价格战与算力涨价并行,行业竞争全面转向效率、生态与商业回报
人工智能
纽格立科技28 分钟前
语音搜不到台,问题不全在车厂
人工智能·车载系统·音视频·语音识别·信息与通信·传媒
2501_9127840830 分钟前
跨境建站避坑:为什么通用电商架构不适配反向代购业务
大数据·人工智能·架构·taoify