动量指标: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线,这在短线交易里是致命的。

实战中的避坑指南

讲几个我踩过的坑,你记一下:

坑一:RSI在极端行情下会失效

我曾经在2020年3月美股熔断期间,用RSI做超卖信号抄底。结果RSI跌到了个位数,抄进去第二天继续熔断。后来我加了波动率过滤,只有VIX低于30时才用RSI信号。

坑二:周期选择不是固定的

14是Wilder的原始参数,但不一定适合所有品种。我测试过,比特币用12周期效果更好,而一些大盘股用20周期更稳。建议你拿到一个新品种,先做参数扫描。

我的小技巧:

把RSI和均线结合使用。比如RSI超卖 + 价格在200日均线上方,这个组合信号的胜率会高很多。我自己的主力策略里,RSI从来不是单独使用的。

RSI的核心逻辑图

下面这张图,是我自己总结的RSI信号生成流程。你看一遍,基本就明白整个逻辑链条了。

RSI信号生成核心流程 价格序列输入 计算涨跌幅 & 分离涨跌 Wilder平滑平均 RSI值 (0-100) 超买/超卖判断 顶底背离检测

从这张图你能看到,RSI的核心就三步:算涨跌幅 → 平滑平均 → 输出数值。然后基于这个数值,我们可以做超买超卖判断,也可以做背离检测。嗯,逻辑其实很清晰。

总结一下

RSI这个指标,说简单也简单,说复杂也复杂。简单的是公式,复杂的是怎么用。我个人觉得,RSI最大的价值不在于它告诉你「现在超买了该卖」,而在于它帮你量化了市场的情绪状态。

你想想看,当RSI在30以下时,市场是恐慌的。当RSI在70以上时,市场是贪婪的。而你要做的,就是在恐慌中寻找机会,在贪婪中保持警惕。这才是RSI真正的用法。

最后提醒一句:任何指标都有局限性。RSI在震荡市里表现不错,但在强趋势行情中容易给出反向信号。所以,永远不要只靠一个指标做决策。组合使用,才是王道。

核心要点回顾:

  • RSI = 100 - 100/(1+RS),RS = 平均上涨/平均下跌
  • Wilder平滑比简单平均更灵敏,延迟更小
  • 超买超卖阈值要因市而异,趋势市用80/20
  • 背离信号比单纯超买超卖更可靠
  • 永远不要单独使用RSI,结合均线或波动率指标

专注资料整理