1. 策略概述
AtrRsiStrategy 是一个结合了 波动率 (ATR) 和 动量 (RSI) 的趋势突破策略。 它的核心思想是:只有在市场波动率足够大(ATR 处于高位)时,才去交易 RSI 的突破信号。这是一种典型的“过滤器”思想,旨在减少 RSI 在低波动震荡市中的假突破磨损。
- 基类:
CtaTemplate - 核心指标:ATR (Average True Range), RSI (Relative Strength Index)
- 风控机制:百分比移动止损 (Trailing Stop)
2. 核心参数与变量
| 参数名 | 默认值 | 含义 |
|---|---|---|
atr_length | 22 | 计算 ATR 的窗口周期 |
atr_ma_length | 10 | 计算 ATR 均线的窗口周期 |
rsi_length | 5 | 计算 RSI 的窗口周期(非常灵敏) |
rsi_entry | 16 | RSI 入场阈值偏移量 (50 ± 16) |
trailing_percent | 0.8 | 移动止损百分比 (0.8%) |
3. 策略逻辑详解
3.1 过滤器:ATR 波动率判断
策略首先计算 ATR 值及其移动平均线 (MA)。
| |
入场前提:self.atr_value > self.atr_ma
解释:当前波动率 > 过去一段时间的平均波动率。说明市场开始活跃,可能即将走出趋势。
3.2 信号触发:RSI 突破
在满足 ATR 过滤器的前提下,检查 RSI:
- 做多条件:
rsi_value > (50 + rsi_entry)(即 > 66) - 做空条件:
rsi_value < (50 - rsi_entry)(即 < 34)
| |
注意:这里使用了超价下单 (
+5/-5) 来保证成交,类似于市价单的效果。
3.3 出场与风控:移动止损 (Trailing Stop)
策略没有固定的止盈点,而是完全依赖移动止损来保护利润并让利润奔跑。
多单持有中: 记录持仓期间的最高价
intra_trade_high。 止损线 =intra_trade_high * (1 - 0.8%)1 2 3self.intra_trade_high = max(self.intra_trade_high, bar.high_price) long_stop = self.intra_trade_high * (1 - self.trailing_percent / 100) self.sell(long_stop, abs(self.pos), stop=True)空单持有中: 记录持仓期间的最低价
intra_trade_low。 止损线 =intra_trade_low * (1 + 0.8%)1 2 3self.intra_trade_low = min(self.intra_trade_low, bar.low_price) short_stop = self.intra_trade_low * (1 + self.trailing_percent / 100) self.cover(short_stop, abs(self.pos), stop=True)
4. 总结
AtrRsiStrategy 展示了两个重要的量化交易概念:
- 多因子共振:单纯用 RSI 容易在震荡市亏损,加上 ATR 波动率过滤后,只在市场活跃时交易,提高了胜率。
- 移动止损:不预测目标价位,而是跟随趋势,直到趋势反转触及止损线离场。这是趋势策略最标准的出场方式。