策略解析:BollChannelStrategy (布林带通道突破)

源码文件:vnpy_ctastrategy.strategies.boll_channel_strategy 1. 策略概述 BollChannelStrategy 是一个基于 布林带 (Bollinger Bands) 的通道突破策略。 它不仅仅依赖价格突破布林带上下轨,还引入了 CCI (Commodity Channel Index) 作为趋势过滤器,并使用 ATR (Average True Range) 来计算动态的移动止损位。 基类:CtaTemplate 周期:15分钟 K 线 (通过 BarGenerator 合成) 核心指标:Bollinger Bands, CCI, ATR 风控机制:ATR 倍数移动止损 2. 核心参数与变量 参数名 默认值 含义 boll_window 18 布林带均线周期 boll_dev 3.4 布林带标准差倍数(较宽,意味着只抓大趋势) cci_window 10 CCI 计算周期 atr_window 30 ATR 计算周期 sl_multiplier 5.2 止损距离的 ATR 倍数(非常宽的止损) 3. 策略逻辑详解 3.1 K 线合成 策略在 on_init 中初始化了一个 15 分钟的 K 线生成器: 1 self.bg = BarGenerator(self.on_bar, 15, self.on_15min_bar) 这意味着 on_tick 更新 1 分钟 bar,1 分钟 bar 累积满 15 个后触发 on_15min_bar,核心逻辑都在 on_15min_bar 中执行。 ...

May 4, 2025 · 1 min

策略解析:MultiSignalStrategy (多信号组合)

源码文件:vnpy_ctastrategy.strategies.multi_signal_strategy 1. 策略概述 MultiSignalStrategy 是一个典型的“投票型”策略。它不依赖单一指标,而是同时计算 RSI、CCI 和 MA 三个指标的信号,将它们的建议仓位叠加,最终得出目标仓位。 基类:TargetPosTemplate (目标仓位模板) 适用场景:趋势跟踪与震荡过滤结合 核心逻辑:Target Pos = Signal_RSI + Signal_CCI + Signal_MA 2. 指标逻辑拆解 策略内部定义了三个子信号类(Signal),分别处理不同逻辑: 2.1 RSI 信号 (相对强弱指标) 逻辑: RSI > 阈值(如 70):超买区,可能看多或看空(视策略定义,通常趋势策略会认为突破向上)。 RSI < 阈值(如 30):超卖区。 代码片段: 1 self.signal_pos["rsi"] = self.rsi_signal.get_signal_pos() 2.2 CCI 信号 (顺势指标) 逻辑:CCI 用于捕捉趋势爆发。 代码片段: 1 self.signal_pos["cci"] = self.cci_signal.get_signal_pos() 2.3 MA 信号 (移动平均线) 逻辑:通常使用双均线(快线/慢线)交叉判断趋势。 快线 > 慢线:金叉,看多。 快线 < 慢线:死叉,看空。 3. 核心执行逻辑:calculate_target_pos 这是该策略最精彩的部分。它没有复杂的 if-else 嵌套,而是简单的算术叠加。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 def calculate_target_pos(self) -> None: """""" # 1. 获取各个子信号的建议仓位 self.signal_pos["rsi"] = self.rsi_signal.get_signal_pos() self.signal_pos["cci"] = self.cci_signal.get_signal_pos() self.signal_pos["ma"] = self.ma_signal.get_signal_pos() # 2. 累加计算总目标仓位 target_pos = 0 for v in self.signal_pos.values(): target_pos += v # 3. 调用模板接口执行 self.set_target_pos(target_pos) 逻辑图解 假设我们设置每个信号满仓为 1 手: ...

May 2, 2025 · 1 min