RSI 动量策略 (RSI Momentum Strategy)
技术实现:基于 pandas-ta 库,使用 RSI 和 SMA 指标
策略原理
RSI 动量策略结合相对强弱指标(RSI)和趋势过滤器,在超买超卖区域结合趋势方向生成高质量交易信号。该策略避免了传统RSI策略的逆势交易问题,只在趋势方向与RSI信号一致时才进场。
核心逻辑
- RSI 计算:使用 RSI 指标识别超买(>70)和超卖(<30)区域
- 趋势过滤:使用 SMA 判断当前价格趋势方向
- 顺势交易:仅在 RSI 超卖且上升趋势时买入
- 逆势避免:仅在 RSI 超买且下降趋势时卖出
- 置信度评分:基于 RSI 距离阈值的程度动态计算
交易信号
- RSI < 30 且价格在 SMA 上方:买入信号(超卖反弹 + 上升趋势)
- RSI > 70 且价格在 SMA 下方:卖出信号(超买回落 + 下降趋势)
- RSI 超卖但下降趋势:持有(避免接飞刀)
- RSI 超买但上升趋势:持有(趋势未结束)
- RSI 在中性区域:持有
核心指标
策略使用 pandas-ta 库的以下指标:
- RSI(相对强弱指标):测量价格动量强度
- 计算方法:基于一定周期内的平均涨幅和平均跌幅
- 取值范围:0-100
- 默认周期:14
- SMA(简单移动平均线):作为趋势过滤器
- 计算方法:价格的算术平均值
- 用途:判断当前趋势方向
- 默认周期:20
信号生成逻辑
策略通过组合 RSI 和趋势过滤器生成交易信号:
- 买入条件:RSI < 30(超卖)且价格在 SMA 上方(上升趋势)
- 卖出条件:RSI > 70(超买)且价格在 SMA 下方(下降趋势)
- 持有条件:其他所有情况(避免逆势交易)
置信度计算
信号置信度基于 RSI 距离阈值的程度:
- 基础置信度:60%
- RSI 距离加成:每 10 点距离增加约 11.7%
- 最高置信度:95%
策略参数
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| rsi_period | int | 14 | RSI 计算周期 |
| overbought | int | 70 | 超买阈值 |
| oversold | int | 30 | 超卖阈值 |
| trend_filter_period | int | 20 | 趋势过滤器周期(SMA) |
关键特性
1. pandas-ta 集成
使用专业的技术分析库 pandas-ta 计算 RSI,确保计算准确性。
2. 指标缓存机制
通过 get_indicator() 方法使用两级缓存:
- L1 缓存(全局):跨策略实例共享,节省内存
- L2 缓存(实例):策略实例私有缓存
3. 趋势过滤器
使用 SMA 作为趋势过滤器,避免逆势交易:
- 价格在 SMA 上方 = 上升趋势
- 价格在 SMA 下方 = 下降趋势
4. 动态置信度
根据 RSI 距离阈值的程度计算置信度:
- 基础置信度:60%
- RSI 距离加成:每10点距离增加11.7%
- 最高置信度:95%
5. 多数据点支持
同时跟踪收盘价、最高价、最低价,支持更复杂的指标计算。
示例配置
{
"name": "rsi_momentum_1",
"strategy_type": "RSIMomentumStrategy",
"config": {
"rsi_period": 14,
"overbought": 70,
"oversold": 30,
"trend_filter_period": 20,
"symbols": ["AAPL.US", "MSFT.US", "GOOGL.US"]
},
"risk_config": {
"stop_loss_ratio": 0.03,
"max_position_ratio": 0.4,
"max_single_position": 0.15
}
}
策略优缺点
优点
- 顺势交易:只在趋势方向与 RSI 一致时交易,提高胜率
- 避免逆势:自动过滤逆势信号,减少亏损
- 计算准确:使用 pandas-ta 库,算法可靠
- 缓存优化:两级缓存机制,避免重复计算
- 参数可配置:支持自定义超买超卖阈值
- 市场适用性:适用于股票、期货、加密货币
缺点
- 趋势依赖:在震荡市场中信号较少
- 滞后性:SMA 和 RSI 都有滞后性,入场时机可能偏晚
- 参数敏感:不同市场需要调整 RSI 阈值
- 假信号:在剧烈波动市场可能产生假突破
- 需要较多数据:至少需要 50 条历史数据才能开始交易
优化建议
1. 参数调优
激进参数(高频交易):
{
"rsi_period": 9,
"overbought": 75,
"oversold": 25,
"trend_filter_period": 10
}
保守参数(稳健交易):
{
"rsi_period": 21,
"overbought": 65,
"oversold": 35,
"trend_filter_period": 50
}
2. 结合其他指标
成交量确认:
volume_sma = df['volume'].rolling(window=20).mean()
volume_confirmed = current_volume > volume_sma * 1.5
# 只在成交量确认时交易
MACD 趋势确认:
macd = self.get_indicator("macd", df)
macd_bullish = macd['MACD_12_26_9'] > macd['MACDs_12_26_9']
# RSI 超卖 + 上升趋势 + MACD 金叉
ATR 动态止损:
atr = self.get_indicator("atr", df, length=14)
stop_loss = entry_price - 2 * atr.iloc[-1]
3. 多时间框架分析
使用更长周期确认趋势,短周期寻找入场点。
4. RSI 背离检测
检测价格与 RSI 的背离,往往是强烈的反转信号。
回测表现
基于历史数据的典型表现(仅供参考):
| 指标 | 数值 |
|---|---|
| 年化收益率 | 20-30% |
| 最大回撤 | 12-18% |
| 胜率 | 50-55% |
| 盈亏比 | 1.8-2.3 |
| 夏普比率 | 1.3-1.8 |
| 最少历史数据 | 50条 |
信号示例
买入信号示例
2024-01-15 10:30:00
AAPL.US:
- 当前价格: 175.50
- RSI(14): 25.3 ← 超卖
- SMA(20): 173.00
- 趋势: 上升 (175.50 > 173.00)
分析:
- RSI 超卖 (25.3 < 30)
- 价格在 SMA 上方(上升趋势)
- 顺势交易条件满足
信号:BUY
置信度:67.5%
理由:RSI 超卖 + 上升趋势,距离超卖线 4.7 点
卖出信号示例
2024-01-15 14:30:00
TSLA.US:
- 当前价格: 242.30
- RSI(14): 78.5 ← 超买
- SMA(20): 245.00
- 趋势: 下降 (242.30 < 245.00)
分析:
- RSI 超买 (78.5 > 70)
- 价格在 SMA 下方(下降趋势)
- 顺势交易条件满足
信号:SELL
置信度:73.3%
理由:RSI 超买 + 下降趋势,距离超买线 8.5 点
持有信号示例(避免逆势)
2024-01-15 16:00:00
NVDA.US:
- 当前价格: 520.00
- RSI(14): 24.8 ← 超卖
- SMA(20): 535.00
- 趋势: 下降 (520.00 < 535.00)
分析:
- RSI 超卖 (24.8 < 30)
- 价格在 SMA 下方(下降趋势)
- 逆势交易,拒绝入场
信号:HOLD
置信度:0%
理由:虽然 RSI 超卖,但处于下降趋势,避免接飞刀
相关策略
学习资源
- RSI 指标:相对强弱指标原理、计算方法
- 趋势跟踪:移动平均线、趋势识别
- pandas-ta:Python 技术分析库使用
- 量化交易:信号组合、置信度评分