策略解析:TestStrategy (功能测试工具)

源码文件:vnpy_ctastrategy.strategies.test_strategy 1. 策略概述 TestStrategy 并不是一个用于实盘获利的交易策略,而是一个调试工具。 它的主要作用是帮助开发者验证: 交易接口(Gateway)是否连接正常。 策略引擎(CtaEngine)是否能正确收发订单。 测试下单函数的执行耗时。 基类:CtaTemplate 触发机制:基于 Tick 计数,每隔 N 个 Tick 执行一个测试动作。 2. 测试流程 策略内部维护了一个函数列表 self.test_funcs,按顺序存放了要测试的动作: 市价单测试 (test_market_order): 以涨停价 (limit_up) 发出买单,模拟市价成交(在期货中通常用对手价或超价模拟市价)。 限价单测试 (test_limit_order): 以跌停价 (limit_down) 发出买单,模拟挂单(通常不会立即成交)。 全撤测试 (test_cancel_all): 调用 cancel_all() 撤销之前挂出的所有未成交订单。 停止单测试 (test_stop_order): 发出本地停止单(Stop Order),验证策略引擎的触发机制。 3. 核心代码逻辑 在 on_tick 中,每收到 test_trigger (默认10) 个 Tick,就弹出一个测试函数执行,并计算耗时。 1 2 3 4 5 6 7 8 9 10 11 self.tick_count += 1 if self.tick_count >= self.test_trigger: self.tick_count = 0 if self.test_funcs: test_func = self.test_funcs.pop(0) # 取出下一个测试任务 start = time() test_func() # 执行 time_cost = (time() - start) * 1000 # 计算耗时(ms) self.write_log(f"耗时{time_cost}毫秒") 4. 使用场景 当你刚配置好一个新的交易接口(比如连接到一个新的仿真环境),或者修改了底层引擎代码后,可以先运行这个策略: ...

May 10, 2025 · 1 min

策略解析:TurtleSignalStrategy (海龟交易法则)

源码文件:vnpy_ctastrategy.strategies.turtle_signal_strategy 1. 策略概述 TurtleSignalStrategy 是大名鼎鼎的 海龟交易法则 (Turtle Trading Rules) 的完整复现。 它不仅仅是一个简单的突破策略,而是一套完整的资金管理系统,包含了: 入场:唐奇安通道 (Donchian Channel) 突破。 仓位管理:基于 ATR (N值) 的加仓 (Pyramiding)。 止损:基于 ATR 的移动止损。 离场:反向通道突破。 基类:CtaTemplate 核心指标:Donchian Channel, ATR 复杂度:高(涉及分批加仓逻辑) 2. 核心参数 参数名 默认值 含义 entry_window 20 入场通道周期 (20日高点) exit_window 10 离场通道周期 (10日低点) atr_window 20 ATR 计算周期 3. 策略逻辑详解 3.1 信号计算 策略使用 am.donchian 计算唐奇安通道,使用 am.atr 计算波动率 N 值。 1 2 3 self.entry_up, self.entry_down = self.am.donchian(self.entry_window) # 20日 self.exit_up, self.exit_down = self.am.donchian(self.exit_window) # 10日 self.atr_value = self.am.atr(self.atr_window) 3.2 初始入场 当空仓时,在 20 日高点挂买入停止单,在 20 日低点挂卖出停止单。 ...

May 9, 2025 · 2 min

策略解析: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

策略解析:KingKeltnerStrategy (肯特纳通道突破)

源码文件:vnpy_ctastrategy.strategies.king_keltner_strategy 1. 策略概述 KingKeltnerStrategy 是一个基于 肯特纳通道 (Keltner Channel) 的趋势突破策略。 肯特纳通道与布林带类似,都是“均线 + 带宽”的结构,但肯特纳通道使用 ATR (平均真实波幅) 来计算带宽,而不是标准差。这使得它对波动率的反应更加平滑。 基类:CtaTemplate 周期:5分钟 K 线 核心指标:Keltner Channel (MA ± N * ATR) 订单管理:OCO (One Cancels Other) —— 双向挂单 2. 核心参数 参数名 默认值 含义 kk_length 11 计算均线和 ATR 的周期 kk_dev 1.6 通道宽度倍数 (MA ± 1.6 * ATR) trailing_percent 0.8 移动止损百分比 3. 策略逻辑详解 3.1 指标计算 策略在 5 分钟 K 线 (on_5min_bar) 上计算通道。 1 self.kk_up, self.kk_down = am.keltner(self.kk_length, self.kk_dev) 上轨 = MA + 1.6 * ATR 下轨 = MA - 1.6 * ATR 3.2 入场逻辑:OCO 双向挂单 这是该策略最独特的实现细节。 当空仓时,策略同时在上方挂买入停止单,在下方挂卖出停止单。 ...

May 7, 2025 · 1 min

策略解析:DualThrustStrategy (Dual Thrust 区间突破)

源码文件:vnpy_ctastrategy.strategies.dual_thrust_strategy 1. 策略概述 DualThrustStrategy 是 Michael Chalek 在 20 世纪 80 年代开发的著名策略,曾被 Future Truth 杂志评为最赚钱的策略之一。 它是一个典型的 日内突破策略。核心逻辑是利用前 N 日(这里简化为前 1 日)的最高价、最低价、收盘价计算出一个“波动区间 (Range)”,然后以今日开盘价为锚点,加上/减去这个区间的倍数,形成上轨和下轨。 基类:CtaTemplate 核心逻辑:Range Breakout (区间突破) 交易时段:日内交易,收盘前强制平仓 2. 核心参数 参数名 默认值 含义 k1 0.4 上轨系数 (用于做多) k2 0.6 下轨系数 (用于做空) fixed_size 1 每次下单手数 注意:k1 和 k2 可以不对称。如果 k1 < k2,说明做多更容易触发,适合多头市场;反之适合空头市场。 3. 策略逻辑详解 3.1 计算 Range (波动区间) 策略在每天开盘时(检测到日期变化),利用前一日的数据计算 Range。 1 2 3 4 5 6 7 if last_bar.datetime.date() != bar.datetime.date(): if self.day_high: self.day_range = self.day_high - self.day_low # 前一日振幅 # 计算今日突破轨 self.long_entry = bar.open_price + self.k1 * self.day_range self.short_entry = bar.open_price - self.k2 * self.day_range 上轨 (Long Entry) = 今日开盘价 + K1 * 昨日振幅 下轨 (Short Entry) = 今日开盘价 - K2 * 昨日振幅 3.2 盘中突破交易 在收盘时间 (exit_time, 14:55) 之前,策略持续监控价格是否突破上下轨。 ...

May 6, 2025 · 1 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

策略解析: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

策略解析:AtrRsiStrategy (ATR波动率结合RSI)

源码文件:vnpy_ctastrategy.strategies.atr_rsi_strategy 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)。 1 2 3 atr_array = am.atr(self.atr_length, array=True) self.atr_value = atr_array[-1] self.atr_ma = atr_array[-self.atr_ma_length:].mean() 入场前提:self.atr_value > self.atr_ma ...

May 3, 2025 · 2 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