1. 策略概述
MultiTimeframeStrategy 展示了如何在 CTA 策略中同时处理两个不同频率的时间序列。 通常策略只关注单一 K 线周期(如 15 分钟),但本策略同时订阅并合成:
- 15 分钟 K 线:用于判断大趋势(Trend)。
- 5 分钟 K 线:用于寻找具体的入场点(Timing)。
这种“大周期定方向,小周期找买点”的方法是手工交易中非常经典的多周期共振思路。
- 基类:
CtaTemplate - 核心机制:双
BarGenerator(5m + 15m) - 核心指标:MA (趋势), RSI (择时)
2. 核心参数
| 参数名 | 默认值 | 含义 |
|---|---|---|
rsi_window | 14 | RSI 计算周期 (基于 5 分钟) |
rsi_signal | 20 | RSI 阈值偏移 (50 ± 20) |
fast_window | 5 | 快线周期 (基于 15 分钟) |
slow_window | 20 | 慢线周期 (基于 15 分钟) |
3. 策略逻辑详解
3.1 双周期 K 线合成
策略在 on_init 中初始化了两个 K 线生成器:
| |
在 on_bar (1分钟) 回调中,同时推送数据给两者:
| |
这样,on_5min_bar 和 on_15min_bar 就会各自独立触发。
3.2 大周期:15 分钟定趋势
在 on_15min_bar 中,计算双均线交叉,确定 ma_trend 状态。
- 多头趋势 (
ma_trend = 1):快线 > 慢线 - 空头趋势 (
ma_trend = -1):快线 < 慢线
| |
3.3 小周期:5 分钟 RSI 择时交易
在 on_5min_bar 中,结合大周期趋势和当前 RSI 值进行交易。
做多条件:
- 15分钟是大趋势多头 (
ma_trend > 0) - 5分钟 RSI 突破高位 (
rsi_value >= 70) —— 注:这里是顺势突破逻辑,而非超买回调
1 2if self.ma_trend > 0 and self.rsi_value >= self.rsi_long: self.buy(bar.close_price + 5, self.fixed_size)- 15分钟是大趋势多头 (
做空条件:
- 15分钟是大趋势空头 (
ma_trend < 0) - 5分钟 RSI 跌破低位 (
rsi_value <= 30)
1 2elif self.ma_trend < 0 and self.rsi_value <= self.rsi_short: self.short(bar.close_price - 5, self.fixed_size)- 15分钟是大趋势空头 (
3.4 出场逻辑
出场条件相对宽松,只要趋势反转或 RSI 回归中轴即可平仓。
- 平多:15分钟转空 OR 5分钟 RSI < 50
- 平空:15分钟转多 OR 5分钟 RSI > 50
4. 总结
MultiTimeframeStrategy 的核心价值在于代码结构: 它演示了如何在一个策略类里优雅地管理多个时间周期的状态。
bg5负责战术(Tactical)bg15负责战略(Strategic) 这种模式可以扩展到更复杂的场景,例如“日线 MACD 背离 + 5分钟 KDJ 金叉”。