期货量化主连和具体合约怎么切:天勤 KQ.m 与 KQ.i 用法

前言

做趋势回测时我用主连很顺手,上模拟却忘了换成具体月份,持仓和信号对不上,收益曲线完全两回事。天勤 TqSdk 里主力连续 KQ.m@、指数 KQ.i@ 与具体 SHFE.rb2510 并存,研究链和交易链要分清。

下面说明主连/指数在行情里的角色、回测与实盘如何映射、换月时策略要注意什么。合约代码写法、移仓执行流程宜分开对照,一起看更完整。

一、主连、指数、具体合约各干什么

类型 符号形态(示意) 典型用途
主力连续 KQ.m@ 如 KQ.m@SHFE.rb 长历史回测、信号研究
指数 KQ.i@ 如 KQ.i@SHFE.rb 平滑价格、指标研究
具体合约 SHFE.rb2510 模拟、实盘下单

主连把历史主力拼接,方便看长期趋势,但成交价不是历史上每一刻真实可成交的单一合约价。指数类似,更平滑。实盘报单必须落到有流动性的具体合约。

二、研究用主连、执行用具体月

常见分工:

  1. KQ.m@ 上算信号(均线、突破等)
  2. 信号触发时,查当前主力对应的具体合约(通过 quote 的 underlying_symbol 等字段,以文档为准)
  3. insert_orderTargetPosTask 只对具体合约操作

若全程只订主连、又对主连下单,模拟成交规则可能与真实交易差异很大。

python 复制代码
from tqsdk import TqApi, TqAuth, TqSim

api = TqApi(TqSim(), auth=TqAuth("账户", "密码"))
cont = "KQ.m@SHFE.rb"
q_cont = api.get_quote(cont)
api.wait_update()
# 具体交易合约以 quote 字段为准,下例名需按 wait_update 后实际值替换
trade_sym = q_cont.underlying_symbol
q_trade = api.get_quote(trade_sym)

不同版本字段名可能为 underlying_symbol 或文档中的其它名,以你打印 q_cont 对象为准。

三、回测与实盘收益对不上的常见原因

  • 回测全程主连,实盘交易 2505 却仍在看 2501 的行情
  • 换月日主力切换,信号仍用旧合约持仓
  • 手续费、滑点按主连手数算,实际开在远月

对策:回测末期用具体合约复跑一段;或回测里就用「主力映射表」记录每日交易合约(工作量大,但更贴近实盘)。

四、换月检测思路

工程上可每日比较 underlying_symbol 是否变化,变化时触发移仓逻辑(平仓旧月、开新月),移仓顺序要单独写进策略。不要假设主连 symbol 不变就不用管换月。

五、和 get_kline_serial 一起用

get_kline_serial("KQ.m@SHFE.rb", 60) 做信号,get_kline_serial(trade_sym, 60) 做执行层价格参考时,要保证时间戳对齐意识:两根 K 线来自不同合约序列,合并信号要谨慎。

入门可先「信号与交易同一具体合约」,主连只用于离线研究,减少阶段混用。

总结

主连和指数适合研究与回测连续性,具体合约适合模拟和实盘。天勤同时支持几类符号,选型关键是链条上哪一段用哪类 code,并在换月时有显式处理。

建议团队写进规范:回测默认用什么、模拟改什么、换月谁负责改配置,避免每人一套习惯导致收益无法复现。

FAQ

1)能否只对主连做 TargetPosTask?

不建议作为实盘方案;模拟规则也可能与具体合约不一致。

2)指数和主连选哪个?

趋势信号常用主连;需要更平滑曲线可看指数。

3)foreign 品种呢?

以 TqSdk 当前支持列表为准。

4)回测主连后如何找对应实盘月?

用主力 quote 的映射字段,或维护换月日历表。

风险提示

本文用于合约与数据使用技术说明,不构成投资建议。

相关推荐
zzzzzz31018 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐18 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱1 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海1 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱2 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽2 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码2 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵2 天前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学