欢迎光临
我们一直在努力

【期货量化入门】自动获取期货主力合约代码(TqSdk完整教程)

一、前言

在期货交易中,主力合约是流动性最好、成交量最大的合约,也是量化交易者最常使用的合约。但主力合约会随时间变化而切换,如何自动获取当前的主力合约代码,是期货量化交易的基础问题。

本文将介绍:

  • 什么是期货主力合约
  • TqSdk中的主连合约代码
  • 如何获取主力合约的实际代码
  • 主力合约切换的处理方法

二、为什么选择天勤量化(TqSdk)

在众多期货量化工具中,**天勤量化(TqSdk)**是目前国内最受欢迎的开源期货量化框架之一。本文使用TqSdk获取数据,主要基于以下优势:

特点说明
完全免费 开源免费,无需付费即可获取实时行情
数据全面 支持国内所有期货交易所的实时行情和历史数据
上手简单 几行Python代码即可获取数据,无需复杂配置
文档完善 官方文档详细,示例代码丰富
社区活跃 GitHub开源,问题响应及时

安装方法:

pip install tqsdk

快期账户:使用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 -*-
    """
    功能:获取期货主力合约的实际代码
    说明:本代码仅供学习参考
    """

    from tqsdk import TqApi, TqAuth

    # 创建API实例
    api = TqApi(auth=TqAuth("快期账户", "快期密码"))

    # 订阅螺纹钢主连
    quote = api.get_quote("KQ.m@SHFE.rb")

    # 打印主力合约的实际代码
    print(f"螺纹钢主连当前对应的合约: {quote.underlying_symbol}")

    # 关闭API
    api.close()

    运行结果:

    螺纹钢主连当前对应的合约: SHFE.rb2501

    4.2 代码解析

    代码说明
    KQ.m@SHFE.rb 螺纹钢主连的代码,KQ表示快期虚拟交易所
    quote.underlying_symbol 主连合约对应的实际期货合约代码

    4.3 获取多个品种的主力合约

    from tqsdk import TqApi, 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)

    for name, symbol in symbols:
    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线和行情数据,会自动获取当前主力合约的数据:

    from tqsdk import TqApi, 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 监控主力合约切换

    主力合约会定期切换,通常在新主力合约的成交量和持仓量超过旧主力时发生:

    from tqsdk import TqApi, TqAuth

    api = TqApi(auth=TqAuth("快期账户", "快期密码"))

    quote = api.get_quote("KQ.m@SHFE.rb")
    current_underlying = quote.underlying_symbol
    print(f"初始主力合约: {current_underlying}")

    while api.wait_update():
    if api.is_changing(quote, "underlying_symbol"):
    new_underlying = quote.underlying_symbol
    print(f"主力合约发生切换!")
    print(f"旧主力: {current_underlying}")
    print(f"新主力: {new_underlying}")
    current_underlying = new_underlying

    六、指数合约

    除了主连合约,TqSdk还提供指数合约,代码格式为:

    KQ.i@交易所.品种代码

    类型代码示例说明
    主连 KQ.m@SHFE.rb 当前主力合约
    指数 KQ.i@SHFE.rb 所有在市合约的加权平均

    指数的计算方式:根据在市期货合约的昨持仓量加权平均

    from tqsdk import TqApi, 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
    赞(0)
    未经允许不得转载:171主机测评 » 【期货量化入门】自动获取期货主力合约代码(TqSdk完整教程)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址