在进行价差交易(套利)开发前,必须理解 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 负责“具体怎么做”。

2.1 默认算法逻辑

VN.PY 默认提供的算法逻辑通常是 Sniper(狙击)Maker/Taker 模式的变种。 通常流程:

  1. 检查主动腿(Active Leg)是否有盘口满足价格条件。
  2. 发出主动腿委托。
  3. 主动腿成交后,立即发出被动腿(Passive Leg)的对冲委托(Hedge)。
  4. 循环直到目标数量全部成交。

2.2 关键参数

  • payup (超价): 为了保证被动腿能迅速成交,通常会以对手价 + N跳的价格发单。
  • interval (间隔): 如果委托未成交,隔多久撤单重发。

3. 数据获取

  • get_spread_tick(): 获取价差的合成 Tick(买一价、卖一价等)。
  • get_spread_pos(): 获取当前价差的净持仓。
  • get_leg_tick(vt_symbol): 获取单腿的原始 Tick。