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

VN.PY CTA 策略模板与通用接口详解

在编写 CTA 策略前,必须理解 vnpy_ctastrategy.template 提供的基础框架。本文将拆解核心接口。 1. CtaTemplate:策略的灵魂 所有 CTA 策略都继承自 CtaTemplate。 1.1 生命周期回调 策略在不同阶段会自动触发以下函数,你需要重写它们来实现逻辑: 回调函数 触发时机 典型用途 on_init 策略初始化时 加载历史数据 (self.load_bar(10)),初始化指标 on_start 策略启动时 标记状态,打印日志 on_tick 收到 Tick 数据 高频逻辑,或合成 K 线 (bg.update_tick(tick)) on_bar K 线合成完毕 核心逻辑区:计算指标、判断信号、发单 on_order 委托状态变化 追踪订单状态(未成交/部分成交/全成/撤单) on_trade 成交推送 更新持仓均价,记录交易日志 1.2 交易指令(原始接口) 在 CtaTemplate 中,发单函数是“方向”与“开平”的组合: 买入开仓 (Long): self.buy(price, volume) 卖出平仓 (Sell): self.sell(price, volume) 卖出开仓 (Short): self.short(price, volume) 买入平仓 (Cover): self.cover(price, volume) 注意:只有当 self.trading = True 时(即策略启动后),这些函数才会真正发出委托,否则只会返回空列表。 2. TargetPosTemplate:目标仓位管理 对于复杂的组合策略,手动管理开平仓极其繁琐(需要判断当前持仓是多还是空,是平仓还是反手)。 TargetPosTemplate 解决了这个问题。 ...

May 1, 2025 · 1 min