策略解析:MultiTimeframeStrategy (多周期共振)

源码文件:vnpy_ctastrategy.strategies.multi_timeframe_strategy 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 线生成器: ...

May 8, 2025 · 2 min

策略解析:DoubleMaStrategy (双均线交叉)

源码文件:vnpy_ctastrategy.strategies.double_ma_strategy 1. 策略概述 DoubleMaStrategy 是量化交易中最经典的入门策略——双均线策略。 逻辑极其简单:快线向上穿过慢线(金叉)做多,快线向下穿过慢线(死叉)做空。虽然简单,但它是理解趋势跟踪逻辑的最佳起点。 基类:CtaTemplate 核心指标:SMA (Simple Moving Average) 交易方式:信号触发后立即市价(或限价)成交 2. 核心参数 参数名 默认值 含义 fast_window 10 快线周期 (如 10 日均线) slow_window 20 慢线周期 (如 20 日均线) 3. 策略逻辑详解 3.1 指标计算 策略计算了两条均线的当前值 (ma0) 和上一根 K 线的值 (ma1),用于判断交叉。 1 2 3 4 5 6 7 fast_ma = am.sma(self.fast_window, array=True) self.fast_ma0 = fast_ma[-1] # 当前 K 线快线 self.fast_ma1 = fast_ma[-2] # 上一根 K 线快线 slow_ma = am.sma(self.slow_window, array=True) self.slow_ma0 = slow_ma[-1] self.slow_ma1 = slow_ma[-2] 3.2 交叉判断 金叉 (Cross Over): 上一刻:快线 < 慢线 当前:快线 > 慢线 1 cross_over = self.fast_ma0 > self.slow_ma0 and self.fast_ma1 < self.slow_ma1 死叉 (Cross Below): ...

May 5, 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