一、前言
在期货交易中,主力合约是流动性最好、成交量最大的合约,也是量化交易者最常使用的合约。但主力合约会随时间变化而切换,如何自动获取当前的主力合约代码,是期货量化交易的基础问题。
本文将介绍:
- 什么是期货主力合约
- TqSdk中的主连合约代码
- 如何获取主力合约的实际代码
- 主力合约切换的处理方法
二、为什么选择天勤量化(TqSdk)
在众多期货量化工具中,**天勤量化(TqSdk)**是目前国内最受欢迎的开源期货量化框架之一。本文使用TqSdk获取数据,主要基于以下优势:
| 特点 | 说明 |
|---|---|
| 完全免费 | 开源免费,无需付费即可获取实时行情 |
| 数据全面 | 支持国内所有期货交易所的实时行情和历史数据 |
| 上手简单 | 几行Python代码即可获取数据,无需复杂配置 |
| 文档完善 | 官方文档详细,示例代码丰富 |
| 社区活跃 | GitHub开源,问题响应及时 |
安装方法:
pipinstalltqsdk快期账户:使用TqSdk需要注册快期账户(免费),访问 https://www.shinnytech.com 注册。
三、主力合约基础知识
3.1 什么是主力合约
期货合约有不同的交割月份,例如螺纹钢有rb2501、rb2502、rb2503等多个合约。其中:
| 概念 | 说明 |
|---|---|
| 主力合约 | 当前成交量和持仓量最大的合约 |
| 次主力合约 | 成交量和持仓量第二大的合约 |
| 近月合约 | 距离交割日期最近的合约 |
| 远月合约 | 距离交割日期较远的合约 |
为什么要交易主力合约?
- 流动性好:成交活跃,容易成交
- 滑点小:买卖价差小
- 深度好:挂单量充足
3.2 TqSdk的主连合约
TqSdk使用主连合约来表示主力合约,代码格式为:
KQ.m@交易所.品种代码常见主连合约代码:
| 品种 | 主连代码 | 说明 |
|---|---|---|
| 螺纹钢 | KQ.m@SHFE.rb | 上期所螺纹钢主连 |
| 铁矿石 | KQ.m@DCE.i | 大商所铁矿石主连 |
| 沪深300 | KQ.m@CFFEX.IF | 中金所IF主连 |
| 原油 | KQ.m@INE.sc | 上期能源原油主连 |
| PTA | KQ.m@CZCE.TA | 郑商所PTA主连 |
四、获取主力合约代码
4.1 最简示例
#!/usr/bin/env python# -*- coding: utf-8 -*-""" 功能:获取期货主力合约的实际代码 说明:本代码仅供学习参考 """fromtqsdkimportTqApi,TqAuth# 创建API实例api=TqApi(auth=TqAuth("快期账户","快期密码"))# 订阅螺纹钢主连quote=api.get_quote("KQ.m@SHFE.rb")# 打印主力合约的实际代码print(f"螺纹钢主连当前对应的合约:{quote.underlying_symbol}")# 关闭APIapi.close()运行结果:
螺纹钢主连当前对应的合约: SHFE.rb25014.2 代码解析
| 代码 | 说明 |
|---|---|
KQ.m@SHFE.rb | 螺纹钢主连的代码,KQ表示快期虚拟交易所 |
quote.underlying_symbol | 主连合约对应的实际期货合约代码 |
4.3 获取多个品种的主力合约
fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("快期账户","快期密码"))# 定义要查询的主连合约symbols=[("螺纹钢","KQ.m@SHFE.rb"),("铁矿石","KQ.m@DCE.i"),("沪深300","KQ.m@CFFEX.IF"),("原油","KQ.m@INE.sc"),("PTA","KQ.m@CZCE.TA"),("甲醇","KQ.m@CZCE.MA"),("豆粕","KQ.m@DCE.m"),("黄金","KQ.m@SHFE.au"),]print("="*50)print(f"{'品种':<10}{'主连代码':<20}{'实际合约':<15}")print("="*50)forname,symbolinsymbols:quote=api.get_quote(symbol)print(f"{name:<10}{symbol:<20}{quote.underlying_symbol:<15}")print("="*50)api.close()运行结果:
================================================== 品种 主连代码 实际合约 ================================================== 螺纹钢 KQ.m@SHFE.rb SHFE.rb2501 铁矿石 KQ.m@DCE.i DCE.i2501 沪深300 KQ.m@CFFEX.IF CFFEX.IF2501 原油 KQ.m@INE.sc INE.sc2502 PTA KQ.m@CZCE.TA CZCE.TA501 甲醇 KQ.m@CZCE.MA CZCE.MA501 豆粕 KQ.m@DCE.m DCE.m2505 黄金 KQ.m@SHFE.au SHFE.au2502 ==================================================五、主连合约的用途
5.1 直接用主连合约获取数据
主连合约可以直接用于获取K线和行情数据,会自动获取当前主力合约的数据:
fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("快期账户","快期密码"))# 直接用主连代码获取K线klines=api.get_kline_serial("KQ.m@SHFE.rb",60,data_length=100)# 获取主连行情quote=api.get_quote("KQ.m@SHFE.rb")print(f"当前主力合约:{quote.underlying_symbol}")print(f"最新价:{quote.last_price}")print(f"最近5根K线收盘价:")print(klines.tail()['close'].values)api.close()5.2 监控主力合约切换
主力合约会定期切换,通常在新主力合约的成交量和持仓量超过旧主力时发生:
fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("快期账户","快期密码"))quote=api.get_quote("KQ.m@SHFE.rb")current_underlying=quote.underlying_symbolprint(f"初始主力合约:{current_underlying}")whileapi.wait_update():ifapi.is_changing(quote,"underlying_symbol"):new_underlying=quote.underlying_symbolprint(f"主力合约发生切换!")print(f"旧主力:{current_underlying}")print(f"新主力:{new_underlying}")current_underlying=new_underlying六、指数合约
除了主连合约,TqSdk还提供指数合约,代码格式为:
KQ.i@交易所.品种代码| 类型 | 代码示例 | 说明 |
|---|---|---|
| 主连 | KQ.m@SHFE.rb | 当前主力合约 |
| 指数 | KQ.i@SHFE.rb | 所有在市合约的加权平均 |
指数的计算方式:根据在市期货合约的昨持仓量加权平均
fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("快期账户","快期密码"))# 获取主连和指数main_quote=api.get_quote("KQ.m@SHFE.rb")index_quote=api.get_quote("KQ.i@SHFE.rb")print(f"螺纹钢主连 最新价:{main_quote.last_price}")print(f"螺纹钢指数 最新价:{index_quote.last_price}")api.close()七、常见问题
Q1: 主连和具体合约有什么区别?
| 对比项 | 主连合约 | 具体合约 |
|---|---|---|
| 代码格式 | KQ.m@SHFE.rb | SHFE.rb2501 |
| 是否可交易 | 不可直接交易 | 可交易 |
| 数据连续性 | 自动拼接,连续 | 到期后无数据 |
| 适用场景 | 分析、回测 | 实盘交易 |
Q2: 主力合约什么时候切换?
天勤主力的切换标准:
- 新合约的持仓量和成交量均超过旧主力
- 在下一个交易日开盘后进行切换
- 切换后不会再切换回之前的合约
Q3: 如何用主力合约进行实盘交易?
需要先获取实际合约代码,再使用实际合约进行交易:
quote=api.get_quote("KQ.m@SHFE.rb")actual_symbol=quote.underlying_symbol# 获取实际合约代码# 使用actual_symbol进行下单八、总结
本文介绍了TqSdk获取期货主力合约的方法:
| 要点 | 内容 |
|---|---|
| 主连代码 | KQ.m@交易所.品种 |
| 获取实际合约 | quote.underlying_symbol |
| 指数代码 | KQ.i@交易所.品种 |
| 注意事项 | 主连不可直接交易,需获取实际合约代码 |
下一步学习:
- 查询合约的详细信息(交易时间、保证金、手续费等)
- 使用TqSdk计算技术指标
免责声明:本文仅供学习交流使用,不构成任何投资建议。期货交易有风险,入市需谨慎。
更多资源:
- 天勤量化官网:https://www.shinnytech.com
- GitHub开源地址:https://github.com/shinnytech/tqsdk-python
- 官方文档:https://doc.shinnytech.com/tqsdk/latest