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

在进行价差交易(套利)开发前,必须理解 vnpy_spreadtrading.template 提供的基础框架。与 CTA 策略不同,价差交易涉及多条腿(Legs)的同步操作,因此引入了“算法执行”的概念。 1. SpreadStrategyTemplate:策略的大脑 所有价差策略都继承自 SpreadStrategyTemplate。 1.1 核心回调函数 回调函数 触发时机 典型用途 on_init 策略初始化 初始化变量,加载历史数据 on_start 策略启动 标记状态 on_spread_data 价差行情更新 核心逻辑区:判断价差是否满足开平仓条件 on_spread_pos 价差持仓更新 监听持仓变化,决定下一步动作 on_spread_algo 算法状态更新 监听算法执行进度(如算法完成、停止) 1.2 算法启动接口 价差交易不直接发单(不调用 buy/sell),而是启动一个算法 (Algo) 来负责执行。 这是因为买入一个价差通常意味着“买入腿A + 卖出腿B”,必须保证原子性或滑点控制。 买入价差 (Long Spread): 1 self.start_long_algo(price, volume, payup, interval, lock) price: 价差限价 volume: 数量 payup: 超价跳数(用于保证成交) interval: 撤单重发间隔 lock: 是否锁仓(针对上期所) 卖出价差 (Short Spread): 1 self.start_short_algo(price, volume, payup, interval, lock) 1.3 停止算法 stop_algo(algoid): 停止特定算法 stop_all_algos(): 停止所有正在运行的算法 2. SpreadAlgoTemplate:执行的手脚 策略只负责“决定要做什么”,而 SpreadAlgoTemplate 负责“具体怎么做”。 ...

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