当前位置: 首页 > news >正文

【量化】策略交易之相对强弱指数策略(RSI)

【量化】策略交易之相对强弱指数策略(RSI)


一、相对强弱指数策略(RSI)原理

RSI 策略(相对强弱指数) 是一种常用的技术分析指标,用于判断资产价格的超买或超卖状态,从而辅助买入或卖出的决策。

RSI(Relative Strength Index)根据一段时间内收盘价的上涨和下跌幅度的平均值,计算相对强弱:

R S I = 100 − 100 1 + R S RSI = 100 - \frac{100}{1 + RS} RSI=1001+RS100

其中:

R S (相对强度) = 平均上涨幅度 平均下跌幅度 RS(相对强度) = \frac{\text{平均上涨幅度}}{\text{平均下跌幅度}} RS(相对强度)=平均下跌幅度平均上涨幅度

常见周期为 14,即过去 14 根 K 线。


二、策略逻辑

👉🏻 RSI < 30:

市场处于超卖区,价格可能反弹 → 买入信号

👉🏻 RSI > 70:

市场处于超买区,价格可能回调 → 卖出信号


三、 Python 实现

👉🏻 Python代码

以 Binance 上的 DOGE/USDT 为例,实现模拟买卖、收益日志、累计收益,详细代码如下👇🏻:

# -*- coding: utf-8 -*-
# @Author: zhangfujie
# @Date:   2025-06-20 19:48:06
# @Last Modified by:   zhangfujie
# @Last Modified time: 2025-06-20 20:02:32
# -*- coding: utf-8 -*-
from binance.client import Client
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import matplotlib as mpl
import os# 设置中文字体
def get_chinese_font():font_paths = ["/System/Library/Fonts/PingFang.ttc","/Library/Fonts/PingFang.ttc"]for path in font_paths:if os.path.exists(path):return FontProperties(fname=path)return Nonechinese_font = get_chinese_font()
if chinese_font:mpl.rcParams['font.family'] = chinese_font.get_name()mpl.rcParams['axes.unicode_minus'] = Falsedef calculate_rsi(series, period=14):delta = series.diff()gain = delta.where(delta > 0, 0)loss = -delta.where(delta < 0, 0)avg_gain = gain.rolling(window=period).mean()avg_loss = loss.rolling(window=period).mean()rs = avg_gain / avg_lossrsi = 100 - (100 / (1 + rs))return rsidef rsi_strategy():client = Client()symbol = "DOGEUSDT"interval = Client.KLINE_INTERVAL_1HOURstart_str = "1 Jan, 2025"klines = client.get_historical_klines(symbol, interval, start_str)df = pd.DataFrame(klines, columns=["timestamp", "open", "high", "low", "close", "volume","close_time", "quote_asset_volume", "number_of_trades","taker_buy_base", "taker_buy_quote", "ignore"])df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms")df.set_index("timestamp", inplace=True)df["close"] = df["close"].astype(float)# 计算 RSI 指标df["rsi"] = calculate_rsi(df["close"], period=14)# 生成交易信号df["signal"] = 0df.loc[df["rsi"] < 30, "signal"] = 1    # 买入df.loc[df["rsi"] > 70, "signal"] = -1   # 卖出df["position"] = df["signal"].shift(1)df["return"] = df["close"].pct_change()df["strategy"] = df["position"] * df["return"]# 模拟交易账户usdt = 1000coin = 0trade_log = []for i in range(1, len(df)):row = df.iloc[i]prev_signal = df.iloc[i - 1]["signal"]price = row["close"]if prev_signal == 1 and coin == 0:coin = usdt / pricetrade_log.append(f"[BUY ] {row.name} 价格: {price:.4f} 买入: {coin:.2f} DOGE")usdt = 0elif prev_signal == -1 and coin > 0:usdt = coin * pricetrade_log.append(f"[SELL] {row.name} 价格: {price:.4f} 卖出: {coin:.2f} DOGE 获得: {usdt:.2f} USDT")coin = 0# ✅ 中文列名 + 收益可视化df.rename(columns={"return": "持有收益","strategy": "策略收益"}, inplace=True)df[["持有收益", "策略收益"]].cumsum().plot(figsize=(12, 6))plt.title("RSI策略 vs 持有收益", fontproperties=chinese_font)plt.xlabel("时间", fontproperties=chinese_font)plt.ylabel("累计收益", fontproperties=chinese_font)plt.grid(True)plt.show()# 打印交易日志 & 累计收益print("\n交易日志:")for log in trade_log:print(log)final_usdt = usdt + coin * df.iloc[-1]["close"]print(f"\n最终账户资产:{final_usdt:.2f} USDT")print(f"累计收益:{final_usdt - 1000:.2f} USDT")if __name__ == '__main__':rsi_strategy()

👉🏻 运行图表

RSI

👉🏻 运行打印

交易日志:
[BUY ] 2025-01-05 13:00:00 价格: 0.3792 买入: 2637.13 DOGE
[SELL] 2025-01-06 15:00:00 价格: 0.3896 卖出: 2637.13 DOGE 获得: 1027.40 USDT
[BUY ] 2025-01-07 16:00:00 价格: 0.3665 买入: 2803.20 DOGE
[SELL] 2025-01-10 08:00:00 价格: 0.3363 卖出: 2803.20 DOGE 获得: 942.80 USDT
[BUY ] 2025-01-12 12:00:00 价格: 0.3362 买入: 2804.28 DOGE
[SELL] 2025-01-14 01:00:00 价格: 0.3411 卖出: 2804.28 DOGE 获得: 956.54 USDT
[BUY ] 2025-01-18 17:00:00 价格: 0.3888 买入: 2460.36 DOGE
[SELL] 2025-01-20 15:00:00 价格: 0.3676 卖出: 2460.36 DOGE 获得: 904.48 USDT
[BUY ] 2025-01-21 07:00:00 价格: 0.3424 买入: 2641.20 DOGE
[SELL] 2025-01-21 16:00:00 价格: 0.3811 卖出: 2641.20 DOGE 获得: 1006.46 USDT
[BUY ] 2025-01-22 06:00:00 价格: 0.3674 买入: 2739.33 DOGE
[SELL] 2025-01-24 12:00:00 价格: 0.3624 卖出: 2739.33 DOGE 获得: 992.84 USDT
[BUY ] 2025-01-25 01:00:00 价格: 0.3495 买入: 2840.50 DOGE
[SELL] 2025-01-25 20:00:00 价格: 0.3572 卖出: 2840.50 DOGE 获得: 1014.68 USDT
[BUY ] 2025-01-26 12:00:00 价格: 0.3519 买入: 2883.69 DOGE
[SELL] 2025-01-28 01:00:00 价格: 0.3331 卖出: 2883.69 DOGE 获得: 960.44 USDT
[BUY ] 2025-01-28 19:00:00 价格: 0.3261 买入: 2944.97 DOGE
[SELL] 2025-01-29 12:00:00 价格: 0.3257 卖出: 2944.97 DOGE 获得: 959.29 USDT
[BUY ] 2025-01-31 05:00:00 价格: 0.3281 买入: 2923.70 DOGE
[SELL] 2025-02-03 17:00:00 价格: 0.2711 卖出: 2923.70 DOGE 获得: 792.58 USDT
[BUY ] 2025-02-06 19:00:00 价格: 0.2439 买入: 3249.90 DOGE
[SELL] 2025-02-07 14:00:00 价格: 0.2603 卖出: 3249.90 DOGE 获得: 845.95 USDT
[BUY ] 2025-02-08 05:00:00 价格: 0.2458 买入: 3441.47 DOGE
[SELL] 2025-02-08 20:00:00 价格: 0.2521 卖出: 3441.47 DOGE 获得: 867.46 USDT
[BUY ] 2025-02-09 22:00:00 价格: 0.2460 买入: 3525.82 DOGE
[SELL] 2025-02-10 17:00:00 价格: 0.2537 卖出: 3525.82 DOGE 获得: 894.68 USDT
[BUY ] 2025-02-11 20:00:00 价格: 0.2524 买入: 3544.96 DOGE
[SELL] 2025-02-12 18:00:00 价格: 0.2594 卖出: 3544.96 DOGE 获得: 919.70 USDT
[BUY ] 2025-02-13 13:00:00 价格: 0.2570 买入: 3578.06 DOGE
[SELL] 2025-02-14 09:00:00 价格: 0.2718 卖出: 3578.06 DOGE 获得: 972.41 USDT
[BUY ] 2025-02-18 17:00:00 价格: 0.2456 买入: 3958.84 DOGE
[SELL] 2025-02-19 07:00:00 价格: 0.2539 卖出: 3958.84 DOGE 获得: 1005.23 USDT
[BUY ] 2025-02-20 17:00:00 价格: 0.2524 买入: 3982.99 DOGE
[SELL] 2025-02-21 14:00:00 价格: 0.2581 卖出: 3982.99 DOGE 获得: 1027.93 USDT
[BUY ] 2025-02-21 20:00:00 价格: 0.2385 买入: 4309.44 DOGE
[SELL] 2025-02-22 12:00:00 价格: 0.2444 卖出: 4309.44 DOGE 获得: 1053.14 USDT
[BUY ] 2025-02-24 03:00:00 价格: 0.2303 买入: 4573.90 DOGE
[SELL] 2025-02-26 05:00:00 价格: 0.2095 卖出: 4573.90 DOGE 获得: 958.46 USDT
[BUY ] 2025-02-26 19:00:00 价格: 0.1987 买入: 4824.39 DOGE
[SELL] 2025-02-27 09:00:00 价格: 0.2092 卖出: 4824.39 DOGE 获得: 1009.12 USDT
[BUY ] 2025-02-28 02:00:00 价格: 0.1929 买入: 5231.03 DOGE
[SELL] 2025-02-28 19:00:00 价格: 0.2011 卖出: 5231.03 DOGE 获得: 1051.96 USDT
[BUY ] 2025-03-03 13:00:00 价格: 0.2236 买入: 4703.81 DOGE
[SELL] 2025-03-05 11:00:00 价格: 0.2028 卖出: 4703.81 DOGE 获得: 953.84 USDT
[BUY ] 2025-03-06 19:00:00 价格: 0.1998 买入: 4774.68 DOGE
[SELL] 2025-03-07 15:00:00 价格: 0.2049 卖出: 4774.68 DOGE 获得: 978.52 USDT
[BUY ] 2025-03-08 09:00:00 价格: 0.1947 买入: 5026.57 DOGE
[SELL] 2025-03-10 13:00:00 价格: 0.1714 卖出: 5026.57 DOGE 获得: 861.76 USDT
[BUY ] 2025-03-10 19:00:00 价格: 0.1575 买入: 5471.46 DOGE
[SELL] 2025-03-13 05:00:00 价格: 0.1677 卖出: 5471.46 DOGE 获得: 917.40 USDT
[BUY ] 2025-03-16 11:00:00 价格: 0.1676 买入: 5475.06 DOGE
[SELL] 2025-03-17 04:00:00 价格: 0.1725 卖出: 5475.06 DOGE 获得: 944.39 USDT
[BUY ] 2025-03-18 09:00:00 价格: 0.1674 买入: 5640.86 DOGE
[SELL] 2025-03-19 06:00:00 价格: 0.1681 卖出: 5640.86 DOGE 获得: 948.17 USDT
[BUY ] 2025-03-20 14:00:00 价格: 0.1735 买入: 5464.97 DOGE
[SELL] 2025-03-23 12:00:00 价格: 0.1709 卖出: 5464.97 DOGE 获得: 933.69 USDT
[BUY ] 2025-03-27 00:00:00 价格: 0.1962 买入: 4759.35 DOGE
[SELL] 2025-04-01 04:00:00 价格: 0.1691 卖出: 4759.35 DOGE 获得: 805.00 USDT
[BUY ] 2025-04-02 06:00:00 价格: 0.1681 买入: 4789.08 DOGE
[SELL] 2025-04-04 05:00:00 价格: 0.1643 卖出: 4789.08 DOGE 获得: 786.61 USDT
[BUY ] 2025-04-05 14:00:00 价格: 0.1681 买入: 4680.23 DOGE
[SELL] 2025-04-07 21:00:00 价格: 0.1499 卖出: 4680.23 DOGE 获得: 701.43 USDT
[BUY ] 2025-04-08 23:00:00 价格: 0.1422 买入: 4930.94 DOGE
[SELL] 2025-04-09 18:00:00 价格: 0.1595 卖出: 4930.94 DOGE 获得: 786.34 USDT
[BUY ] 2025-04-10 11:00:00 价格: 0.1563 买入: 5031.27 DOGE
[SELL] 2025-04-11 06:00:00 价格: 0.1573 卖出: 5031.27 DOGE 获得: 791.32 USDT
[BUY ] 2025-04-15 01:00:00 价格: 0.1599 买入: 4949.45 DOGE
[SELL] 2025-04-17 08:00:00 价格: 0.1560 卖出: 4949.45 DOGE 获得: 771.92 USDT
[BUY ] 2025-04-18 08:00:00 价格: 0.1556 买入: 4960.90 DOGE
[SELL] 2025-04-18 15:00:00 价格: 0.1564 卖出: 4960.90 DOGE 获得: 775.69 USDT
[BUY ] 2025-04-20 12:00:00 价格: 0.1543 买入: 5027.46 DOGE
[SELL] 2025-04-21 01:00:00 价格: 0.1603 卖出: 5027.46 DOGE 获得: 805.65 USDT
[BUY ] 2025-04-24 03:00:00 价格: 0.1729 买入: 4660.44 DOGE
[SELL] 2025-04-24 17:00:00 价格: 0.1789 卖出: 4660.44 DOGE 获得: 833.89 USDT
[BUY ] 2025-04-26 16:00:00 价格: 0.1814 买入: 4596.48 DOGE
[SELL] 2025-05-01 04:00:00 价格: 0.1743 卖出: 4596.48 DOGE 获得: 801.21 USDT
[BUY ] 2025-05-03 11:00:00 价格: 0.1781 买入: 4499.42 DOGE
[SELL] 2025-05-07 01:00:00 价格: 0.1731 卖出: 4499.42 DOGE 获得: 778.89 USDT
[BUY ] 2025-05-11 14:00:00 价格: 0.2314 买入: 3366.74 DOGE
[SELL] 2025-05-12 07:00:00 价格: 0.2441 卖出: 3366.74 DOGE 获得: 821.69 USDT
[BUY ] 2025-05-13 01:00:00 价格: 0.2243 买入: 3663.50 DOGE
[SELL] 2025-05-13 17:00:00 价格: 0.2376 卖出: 3663.50 DOGE 获得: 870.45 USDT
[BUY ] 2025-05-14 20:00:00 价格: 0.2333 买入: 3730.86 DOGE
[SELL] 2025-05-16 11:00:00 价格: 0.2271 卖出: 3730.86 DOGE 获得: 847.28 USDT
[BUY ] 2025-05-17 01:00:00 价格: 0.2158 买入: 3925.67 DOGE
[SELL] 2025-05-18 09:00:00 价格: 0.2225 卖出: 3925.67 DOGE 获得: 873.46 USDT
[BUY ] 2025-05-19 06:00:00 价格: 0.2144 买入: 4073.42 DOGE
[SELL] 2025-05-19 21:00:00 价格: 0.2243 卖出: 4073.42 DOGE 获得: 913.59 USDT
[BUY ] 2025-05-20 16:00:00 价格: 0.2192 买入: 4167.82 DOGE
[SELL] 2025-05-21 04:00:00 价格: 0.2302 卖出: 4167.82 DOGE 获得: 959.56 USDT
[BUY ] 2025-05-23 17:00:00 价格: 0.2359 买入: 4066.78 DOGE
[SELL] 2025-05-25 23:00:00 价格: 0.2249 卖出: 4066.78 DOGE 获得: 914.66 USDT
[BUY ] 2025-05-28 07:00:00 价格: 0.2226 买入: 4108.61 DOGE
[SELL] 2025-05-29 10:00:00 价格: 0.2259 卖出: 4108.61 DOGE 获得: 928.30 USDT
[BUY ] 2025-05-29 17:00:00 价格: 0.2201 买入: 4218.40 DOGE
[SELL] 2025-06-02 00:00:00 价格: 0.1928 卖出: 4218.40 DOGE 获得: 813.48 USDT
[BUY ] 2025-06-02 12:00:00 价格: 0.1904 买入: 4271.56 DOGE
[SELL] 2025-06-03 00:00:00 价格: 0.1968 卖出: 4271.56 DOGE 获得: 840.64 USDT
[BUY ] 2025-06-04 18:00:00 价格: 0.1905 买入: 4411.89 DOGE
[SELL] 2025-06-06 11:00:00 价格: 0.1776 卖出: 4411.89 DOGE 获得: 783.64 USDT
[BUY ] 2025-06-12 03:00:00 价格: 0.1907 买入: 4109.07 DOGE
[SELL] 2025-06-13 16:00:00 价格: 0.1791 卖出: 4109.07 DOGE 获得: 735.77 USDT
[BUY ] 2025-06-15 12:00:00 价格: 0.1753 买入: 4197.68 DOGE
[SELL] 2025-06-16 11:00:00 价格: 0.1767 卖出: 4197.68 DOGE 获得: 741.73 USDT
[BUY ] 2025-06-17 09:00:00 价格: 0.1724 买入: 4302.88 DOGE
[SELL] 2025-06-18 07:00:00 价格: 0.1712 卖出: 4302.88 DOGE 获得: 736.61 USDT最终资产: 736.61 USDT
[Finished in 16.9s]

四、优缺点简析

RSI(相对强弱指数)策略作为技术分析中非常常见的一种指标策略,有其明显的优势,但也存在不少局限性。

👍 优点

  1. 简单直观 只需关注 RSI 数值与固定阈值(如 30/70)比较,判断是否超买或超卖,易于理解和编程实现。
  2. 适合震荡行情 在横盘震荡或箱体震荡时,RSI 信号通常比较准确,能较好捕捉低买高卖的机会。
  3. 可用于背离分析 RSI 与价格出现“背离”(如价格创新低但 RSI 没有),常被视为反转信号的前兆。
  4. 不依赖均线等滞后指标 RSI 本身反映了价格的强弱变化速度,有一定的“敏捷性”,不像 MA 一样滞后太多。

👎 缺点

  1. 在趋势行情中容易失效 比如在上涨趋势中,RSI 可能一直>70,却并未反转;这会导致策略提早卖出、踏空收益。
  2. 参数固定,不适应市场变化 常用的 RSI 周期是 14,但这个值在不同市场、周期中未必最优,需调参优化。
  3. 高频震荡时容易频繁交易 当市场处于“假波动”或洗盘阶段时,RSI 来回穿越阈值,会频繁触发买卖信号,产生交易噪声。
  4. 仅基于单指标,缺乏确认机制 单独使用 RSI 容易产生误判,通常建议搭配 MACD、均线或布林带等其他指标使用。

📌 小结

特性是否适合
震荡行情✅ 表现较好
趋势行情❌ 容易失效
初学者✅ 友好,逻辑简单
高频交易❌ 不建议单独使用
与其他指标结合✅ 效果更好

🚀 改进建议

  1. 多指标组合:与布林带、MACD 或均线组合使用。
  2. 调整阈值:从固定的 30/70 改为动态上下限,如 20/80 或根据波动率自适应。
  3. 加入止损/止盈机制:提高实盘适应能力。
  4. 加上仓位管理:比如信号强度越强(越接近0或100),买入/卖出仓位更大。

五、关于作者(ZFJ_张福杰)

  • 官网:https://zfjsafe.com
  • 博客:https://zfj1128.blog.csdn.net
  • Github:https://github.com/zfjsyqk
  • Gitee:https://gitee.com/zfj1128
  • 打赏:https://zfjsafe.com/paycode

相关文章:

  • HCIP-华为VRP系统基础
  • 3.读取图片和图片采集
  • C#中的QUIC实现
  • 多协议物联网关的方案测试-基于米尔全志T536开发板
  • 【redis】数据结构及操作命令
  • 深入解析:如何实时获取Socket接收缓冲区的数据量
  • 《王者荣耀》系统架构深度技术解析
  • Spring 的IoC 和 AOP
  • Day37 早停策略和模型权重的保存
  • 【精选】基于SpringBoot的宠物互助服务小程序平台开发 微信小程序宠物互助系统 宠物互助小程序平台设计与实现 支持救助发布+领养申请+交流互动功能
  • 前端跨域解决方案(6):Nginx
  • MySQL 表结构设计中的约束机制详解
  • [设计模式]创建型模式-单例模式
  • 物联网控制器:一台顶N台!路由器、PLC控制器、网关、工控机……
  • PowerShell批量处理文件名称/内容的修改
  • 【二进制安全作业】250617课上作业4 - start
  • Ntfs!LfsGetLbcb函数分析之Ntfs!LfsPrepareLfcbForLogRecord
  • Sentinel 服务限流机制
  • opencv依据图像类型读取图像像素点
  • 软件公司进军无人机领域的战略指南与生态合作全景-优雅草卓伊凡
  • 医院网站建设的目的/东莞做网站哪家公司好
  • 怎样做吓人网站/网站建设一般多少钱
  • 复兴专业做网站/自媒体引流推广
  • 固原市建设局网站/免费的推广引流软件下载
  • 网站首页图片怎么更换/深圳竞价托管
  • 空白网站怎么建立/如何做好网站的推广工作