RSI,即相对强弱指数(Relative Strength Index),是一种用于技术分析的动量振荡器,由J. Welles Wilder于1978年首次提出。RSI通过比较特定时间内的平均价格上涨和下跌幅度,来衡量一种证券或资产价格运动的速度和变化程度。RSI的值通常用于判断资产是否被超买或超卖,从而帮助交易者做出买入或卖出的决策。

RSI的基本原理

RSI指标的核心在于其“相对强弱”这一概念。这里的“相对”是指资产当前价格相对于过去一段时间内价格变动的比率。RSI的计算结果是一个介于0到100之间的值。通常来说,RSI值高于70时,市场可能处于超买状态;而RSI值低于30时,则处于超卖状态。RSI的底层逻辑是基于这么一种判断:即当价格在短期内上升或下降的动力达到一个极限后会逐渐减弱,并出现价格上的反转。

RSI的计算方法基于平滑处理后的平均涨跌幅度。具体来说,RSI首先计算一定时间窗口内每日价格的涨跌差值,然后分别求得这些差值中上涨和下跌差值的平均数,最后使用这些平均数来计算RSI值。这种计算方式有效地过滤了市场的随机波动,使RSI指标能更准确地反映出市场的主要趋势。

RSI指标是如何计算的

RSI的计算公式可以分为几个步骤,从计算单日价格变动的平均涨跌幅开始,到计算出RSI值。具体步骤如下:

选择时间窗口

标准的时间窗口是14天,但可以根据分析的需要选择不同的时间长度。

计算日涨跌变化

对于所选时间窗口内的每一天,计算其收盘价与前一日收盘价之间的差值。这个差值可能是正的(如果价格上涨)或负的(如果价格下跌)。

计算涨跌变化

平均涨幅:取所有正的差值(价格上涨的日子),求其总和,然后除以时间窗口的天数,得到平均涨幅。

平均跌幅:与上同理。取所有负的差值的绝对值并求和,除以天数即可。

计算相对强度(RS):相对强度是平均涨幅与平均跌幅的比率。公式为:

\begin{equation} \text{RS} = \frac{\text{平均跌幅}}{\text{平均涨幅}} \end{equation}

计算RSI:

\begin{equation} RSI=100−1​/(1+RS)×100 \end{equation}

假设我们有以下数据:

  • 第1天到第14天,有8天收盘价上升,6天收盘价下降。
  • 8天上升的总增益为120点。
  • 6天下降的总损失为40点。

现在计算14天的RSI:

  1. 平均涨幅 =120/14=8.57
  2. 平均跌幅 =40/14​=2.86
  3. RS =8.57/2.86​=3
  4. RSI =100−1/(1+3​)×100=75

在这个例子中,RSI为75,表明市场可能处于超买状态。

RSI指标的参数设定

RSI的参数设置主要取决于你的策略和交易周期,常见的参数设置包括14天、7天和21天或更长时间。14天是RSI的默认设置,也是J. Welles Wilder在提出这个指标是推崇的参数设置,14天的周期会比较适合中短期交易,能够平衡噪音和信号;7天适合短期交易者,能够更快地反映价格变化,但也会带来更多噪音和虚假信号;21天或更长时间的RSI适用于长期交易者,提供更平滑的RSI曲线,但反应相对滞后。

需要注意的是,不同的市场可能需要不同的RSI参数。比如J. Welles Wilder主要关注的是美国市场,他认为14天是合理的,但很多国内的股民和量化交易者在实际测试后,认为9天更适合A股市场。无论你选择哪个参数,都建议通过回测在历史数据上测试一遍,以找到最适合的设置。

RSI指标的参数选择还与交易的资产类型和所在国家市场的特性有关。例如,股票市场中的个股和行业板块可能具有不同的波动性和交易特性,高波动性股票和行业可能需要较短的RSI参数以捕捉迅速的价格变动。外汇市场通常比股票市场波动更快,交易者可能倾向于使用7天或9天的RSI以便更快响应市场变化。商品市场如黄金和原油具有独特的供需动态和波动模式,通常也需要根据具体商品的特性调整RSI参数。同样的,加密货币市场的波动性通常非常高,如5天或7天的参数会更好。

RSI交易策略

在应用RSI进行交易时,交易者通常关注RSI指标的超卖和超买区间,以判断市场可能的反转点。下面我们将讲解如何通过RSI指标判断超卖与超买。

超卖区间交易策略

当RSI低于30,通常被认为该资产已经进入超卖区间,这是一个买入的信号。交易者通常会等待RSI从超卖区间反弹回到30以上,以确认反转信号。这种策略的核心在于捕捉市场的底部反弹,适用于期望低位买入并在价格回升时获利的交易者。然而,需要注意的是,市场可能在超卖区间持续一段时间,交易者应结合其他技术指标或基本面分析来增强信号的可靠性。

超买区间交易策略

当RSI进入超买区间(高于70),这是一个卖出信号。交易者通常会等待RSI从超买区间回落到70以下,以确认反转信号。这种策略的核心在于捕捉市场的顶部回调,适用于期望高位卖出并在价格回落时重新进入市场的交易者。

RSI背离交易策略

背离是指价格和RSI走势出现不一致的情况。当价格创出新高或新低,而RSI没有创出相应的新高或新低时,可能预示着趋势的反转。例如,在上升趋势中,如果价格创出新高但RSI没有创出新高,这是一个看跌背离,可能预示价格将下跌;在下降趋势中,如果价格创出新低但RSI没有创出新低,这是一个看涨背离,可能预示价格将上涨。交易者可以利用背离信号来捕捉趋势的反转点,从而进行买卖操作。

RSI和其他技术指标一样,都有可能出现虚假信号,单独依靠RSI单一指标可能会产生误判,最好是配合其他技术指标一起参考,比如我们在另一篇文章介绍的MACD指标

RSI量化交易实战:代码示例

import pandas as pd
import requests
import ta
import time

# 获取Alltick API的实时行情数据函数
def get_realtime_data(stock_code):
    # 使用Alltick API获取实时数据
    url = f"https://api.alltick.com/v1/quotes/{stock_code}"
    response = requests.get(url)
    data = response.json()
    return data

# RSI策略
def rsi_strategy(data, rsi_period=14, rsi_oversold=30, rsi_overbought=70):
    data['RSI'] = ta.momentum.rsi(data['close'], window=rsi_period)
    data['Signal'] = 0
    data['Signal'][data['RSI'] < rsi_oversold] = 1  # 买入信号
    data['Signal'][data['RSI'] > rsi_overbought] = -1  # 卖出信号
    return data

# 模拟交易函数
def simulate_trading(stock_code, interval=60):
    while True:
        data = get_realtime_data(stock_code)
        
        # 返回的数据包含timestamp和close价格
        df = pd.DataFrame(data)
        
        # 计算RSI策略
        df = rsi_strategy(df)
        
        # 获取最新的交易信号
        latest_signal = df['Signal'].iloc[-1]
        
        # 执行交易逻辑
        if latest_signal == 1:
            print("买入信号,执行买入操作")
            # 这里添加实际的买入代码,例如调用交易API
        elif latest_signal == -1:
            print("卖出信号,执行卖出操作")
            # 这里添加实际的卖出代码,例如调用交易API
        else:
            print("无交易信号")
        
        # 等待一段时间后再次运行
        time.sleep(interval)

# 主函数
if __name__ == "__main__":
    stock_code = "00941.HK"  # 以港股中国移动为例
    simulate_trading(stock_code)