1. 策略概述
MultiSignalStrategy 是一个典型的“投票型”策略。它不依赖单一指标,而是同时计算 RSI、CCI 和 MA 三个指标的信号,将它们的建议仓位叠加,最终得出目标仓位。
- 基类:
TargetPosTemplate(目标仓位模板) - 适用场景:趋势跟踪与震荡过滤结合
- 核心逻辑:
Target Pos = Signal_RSI + Signal_CCI + Signal_MA
2. 指标逻辑拆解
策略内部定义了三个子信号类(Signal),分别处理不同逻辑:
2.1 RSI 信号 (相对强弱指标)
- 逻辑:
- RSI > 阈值(如 70):超买区,可能看多或看空(视策略定义,通常趋势策略会认为突破向上)。
- RSI < 阈值(如 30):超卖区。
- 代码片段:
1self.signal_pos["rsi"] = self.rsi_signal.get_signal_pos()
2.2 CCI 信号 (顺势指标)
- 逻辑:CCI 用于捕捉趋势爆发。
- 代码片段:
1self.signal_pos["cci"] = self.cci_signal.get_signal_pos()
2.3 MA 信号 (移动平均线)
- 逻辑:通常使用双均线(快线/慢线)交叉判断趋势。
- 快线 > 慢线:金叉,看多。
- 快线 < 慢线:死叉,看空。
3. 核心执行逻辑:calculate_target_pos
这是该策略最精彩的部分。它没有复杂的 if-else 嵌套,而是简单的算术叠加。
| |
逻辑图解
假设我们设置每个信号满仓为 1 手:
| 市场情况 | RSI 信号 | CCI 信号 | MA 信号 | 最终目标仓位 | 行为 |
|---|---|---|---|---|---|
| 强劲上涨 | +1 (多) | +1 (多) | +1 (多) | +3 | 买入 3 手 |
| 震荡偏多 | +1 (多) | 0 (观望) | -1 (空) | 0 | 空仓 (多空抵消) |
| 趋势反转 | -1 (空) | -1 (空) | +1 (多) | -1 | 做空 1 手 |
4. 总结与教学
这种写法的最大优势是解耦。 如果你想增加一个 MACD 信号,只需要:
- 写一个
MacdSignal类。 - 在
__init__里实例化它。 - 在
calculate_target_pos里加上它的投票权。
这比在一个巨大的 on_bar 函数里写几百行 if 判断要优雅得多,也更容易维护。