前言国内期货除了单品种趋势还有跨期价差交易例如同时关注螺纹钢近月与远月做多近月、做空远月赚的是价差变化而不是单腿涨跌。程序化里这叫套利或价差策略。执行上有两条路一是直接交易交易所挂牌的价差组合合约代码里常带 SP、SPD 等前缀二是近月、远月两个具体月份各下一个天勤TargetPosTask自己维持「多 1 手近月、空 1 手远月」的比例。天勤量化TqSdk对组合合约与单腿合约一样提供get_quote、get_kline_serial、TargetPosTask。但组合 quote 的last_price通常表示价差报价不是某一腿的单价双腿成交也可能不同步一腿成交、另一腿没成交时名义上是价差策略实际变成单腿裸露方向。下面从执行层说明要建几个 task、如何用get_position核对腿比例、部分成交后怎么办。组合代码应从快期客户端复制勿手拼。一、先弄清几个名词名称是什么执行层注意什么跨期价差近月与远月价格之差及其交易要维持两腿比例SP/SPD交易所定义的组合合约代码一口价表示价差规则因品种而异腿组合中的一条具体月份合约双腿策略有两个 symbolsymbol合约代码如SHFE.rb2510每腿独立get_quote行情快照组合与单腿 last 含义不同last_price最新价组合上多为价差单腿上为合约价TargetPosTask调仓到目标净仓每个具体 symbol 单例set_target_volume(n)目标净仓 n 手近月 1、远月 -1 要两个 taskget_position().pos净持仓两腿分别读再比比例部分成交报 3 手只成 1 手破坏 1:1 比例reconcile团队自写的修复逻辑暂停加仓或平未成腿二、两种执行架构怎么选架构task 数量优点风险组合单 SP1 个symbol组合代码交易所定义价差一口价流动性、规则特殊需查品种说明双腿近月、远月各 1 个 task比例灵活成交不同步要持续核对同一具体合约只能一个TargetPosTask实例双腿即两个 symbol、两个 task。三、组合单怎么写示意fromtqsdk.libimportTargetPosTask sp_symDCE.xxx# 从快期客户端复制真实组合代码勿手拼task_spTargetPosTask(api,sp_sym,priceACTIVE)task_sp.set_target_volume(1)# 含义以交易所规则为准可能是价差手数日志里标明price_typespread避免与近月last_price混淆。读volume_multiple、涨跌停前查该品种组合合约说明。四、双腿比例如何核对目标结构示例多近月 1 手、空远月 1 手。pos_nearapi.get_position(near_sym).pos pos_farapi.get_position(far_sym).pos ok(pos_near0andpos_far0andabs(pos_near)abs(pos_far))ifnotok:log(leg_mismatch,near_sym,pos_near,far_sym,pos_far)reconcile_legs()reconcile_legs由团队定义例如暂停远月再加、先平掉未成腿、或告警人工。应在wait_update()后检查尤其在is_changing(pos, pos)或 K 线datetime变时。部分成交是常态一腿先成比例破坏不能以「我以为两边都成了」继续跑必须以get_position为准。五、单腿剧烈波动时某一腿急涨急跌价差策略常需成对减仓勿只平一腿留下另一腿方向裸露否则从套利变成单边投机。六、回测与实盘路径要一致回测若用双腿两 symbol 成交实盘勿突然改交易组合单反之亦然。信号用主连、执行用具体月双腿时执行层 symbol 要落到可交易月份。总结期货价差 SP 策略的执行难点不在于会不会set_target_volume而在于 task 架构选定之后能否持续用get_position核对两腿比例。天勤无论是组合一个TargetPosTask还是近远月两个都要在wait_update后校验比例部分成交后及时 reconcile日志里区分组合价与单腿价。需要记住的是价差不是两个无关的趋势单而是比例结构成交细节弄错就从套利变成赌单边。FAQ1组合单能用 PASSIVE 排队吗可以薄价差或涨跌停附近慎用可能久不成交。2一腿拒单怎么办读该腿order.last_msg勿在另一腿继续加仓。3SP 和 SPD 区别以交易所挂牌说明为准代码从客户端复制。4如何用 TqSim 试小仓位订阅真实组合或双腿代码打印两腿 pos 观察比例。风险提示以上内容用于价差执行参考不构成投资建议。