动量指标:RSI(相对强弱指标)的计算与超买超卖信号
RSI,全称相对强弱指标。这玩意儿在量化交易里,几乎是入门必学的第一个动量指标。我刚开始做策略研究那会儿,第一个实盘跑的策略就用到了它。说实话,当时觉得这东西太简单了,不就是算算涨跌比例嘛。后来踩了不少坑,才发现里面的门道比想象中深。
今天咱们就把RSI彻底聊透。从数学公式到代码实现,再到实战中的那些坑,我一个一个给你拆开讲。
RSI到底在算什么?
说白了,RSI衡量的是「一段时间内,价格上涨的力度 vs 价格下跌的力度」。你想想看,如果涨得比跌得多,那市场就是强势的,对吧?RSI就是把这个强弱关系,量化成一个0到100之间的数字。
公式其实不复杂:
RSI = 100 - (100 / (1 + RS))
RS = 平均上涨幅度 / 平均下跌幅度
嗯,这里要注意。平均上涨幅度和平均下跌幅度,不是简单地把所有涨跌幅加起来除以天数。而是用了一种叫「平滑平均」的方式。我习惯用 Wilder 的原始算法,也就是用指数移动平均的思路来处理。
具体来说:
- 先算第一天的平均上涨 = 过去N天上涨幅度的简单平均
- 之后每一天:平均上涨 = (前一天平均上涨 × (N-1) + 今日上涨幅度) / N
- 下跌同理,但只取绝对值
为什么要这么算?因为这样能让RSI对最新价格变化更敏感,同时又不会太毛躁。我在项目中遇到过,如果用简单平均,RSI曲线会频繁出现假信号,搞得你根本没法用。
超买超卖信号,到底怎么用?
标准用法大家都知道:RSI超过70算超买,低于30算超卖。但说实话,这个阈值不是死的。我在做A股策略时发现,震荡市里70/30挺好用,但趋势行情里,RSI经常在80以上待很久,或者在20以下趴着不动。
为什么会这样?因为趋势行情中,价格会持续朝一个方向走,RSI自然也会维持在极端区域。这时候你要是看到RSI>70就做空,那基本就是送钱。
我个人习惯的做法是:
- 先判断市场状态(震荡还是趋势)
- 震荡市用70/30
- 趋势市用80/20,甚至85/15
另外,RSI还有一个很实用的用法——背离。价格创新高,但RSI没创新高,这叫顶背离,往往是反转信号。底背离反过来。我在2018年做比特币策略时,靠这个信号抓到了好几次不错的反转点。
代码实现:从零手写RSI
咱们直接上代码。我用的是Python,pandas来处理数据。你想想看,如果连RSI都要现成库,那还叫什么算法工程师?
import pandas as pd
import numpy as np
def calculate_rsi(price_series, period=14):
"""
手动实现Wilder的RSI算法
price_series: 价格序列,pandas Series
period: 周期,默认14
"""
# 计算价格变化
delta = price_series.diff()
# 分离上涨和下跌
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
# Wilder平滑平均
avg_gain = gain.ewm(alpha=1/period, adjust=False).mean()
avg_loss = loss.ewm(alpha=1/period, adjust=False).mean()
# 计算RS和RSI
rs = avg_gain / avg_loss
rsi = 100 - (100 / (1 + rs))
return rsi
# 使用示例
# prices = pd.Series([...]) # 你的价格数据
# rsi_values = calculate_rsi(prices, period=14)
这段代码里,我用的是 ewm(alpha=1/period) 来实现Wilder平滑。这和直接用 rolling().mean() 效果完全不同。我曾经在回测时对比过,用简单平均的RSI,信号延迟大概多出2-3根K线,这在短线交易里是致命的。
实战中的避坑指南
讲几个我踩过的坑,你记一下:
我曾经在2020年3月美股熔断期间,用RSI做超卖信号抄底。结果RSI跌到了个位数,抄进去第二天继续熔断。后来我加了波动率过滤,只有VIX低于30时才用RSI信号。
14是Wilder的原始参数,但不一定适合所有品种。我测试过,比特币用12周期效果更好,而一些大盘股用20周期更稳。建议你拿到一个新品种,先做参数扫描。
把RSI和均线结合使用。比如RSI超卖 + 价格在200日均线上方,这个组合信号的胜率会高很多。我自己的主力策略里,RSI从来不是单独使用的。
RSI的核心逻辑图
下面这张图,是我自己总结的RSI信号生成流程。你看一遍,基本就明白整个逻辑链条了。
从这张图你能看到,RSI的核心就三步:算涨跌幅 → 平滑平均 → 输出数值。然后基于这个数值,我们可以做超买超卖判断,也可以做背离检测。嗯,逻辑其实很清晰。
总结一下
RSI这个指标,说简单也简单,说复杂也复杂。简单的是公式,复杂的是怎么用。我个人觉得,RSI最大的价值不在于它告诉你「现在超买了该卖」,而在于它帮你量化了市场的情绪状态。
你想想看,当RSI在30以下时,市场是恐慌的。当RSI在70以上时,市场是贪婪的。而你要做的,就是在恐慌中寻找机会,在贪婪中保持警惕。这才是RSI真正的用法。
最后提醒一句:任何指标都有局限性。RSI在震荡市里表现不错,但在强趋势行情中容易给出反向信号。所以,永远不要只靠一个指标做决策。组合使用,才是王道。
核心要点回顾:
- RSI = 100 - 100/(1+RS),RS = 平均上涨/平均下跌
- Wilder平滑比简单平均更灵敏,延迟更小
- 超买超卖阈值要因市而异,趋势市用80/20
- 背离信号比单纯超买超卖更可靠
- 永远不要单独使用RSI,结合均线或波动率指标