🚀 AI 一键生成 joinquant 策略代码
立即体验

joinquant 期货 API:如何使用 get_future_contracts 获取指定品种的所有可交易合约?

joinquant | 发布时间: 2026/7/28
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 期货 API:使用 get_future_contracts 获取品种可交易合约

Question: 如何在 joinquant 中获取当前日期某个期货品种(如螺纹钢或沪深300)的所有可交易合约?

解决方案

joinquant 期货 API:使用 get_future_contracts 获取品种可交易合约

在聚宽(JoinQuant)量化交易平台进行期货策略开发时,由于期货合约存在生命周期与交割日,策略往往需要动态获取当前交易日某品种下所有处于上市交易状态的合约代码。聚宽提供了 get_future_contracts API 来满足这一需求。


1. API 语法与参数说明

get_future_contracts 用于获取某期货品种在指定日期的可交易合约标的代码列表。

函数原型

get_future_contracts(security, date=None)

参数说明

  • security (str): 期货合约品种代码,如 'RB'(螺纹钢)、'IF'(沪深300股指期货)、'CU'(铜)等。
  • date (str / datetime.date / datetime.datetime, 可选): 查询日期。
    • 在回测环境中:若不填写,默认使用当前回测逻辑日期(context.current_dt)。
    • 在研究环境中:若不填写,默认使用最新日期。

返回值

  • 返回一个 list,包含当前日期该品种所有可交易的具体合约代码(如 ['IF2309.CCFX', 'IF2310.CCFX', ...])。

2. 代码示例

示例 1:在研究环境中查询

from jqdata import *

# 查询 2023年6月1日 沪深300股指期货(IF)的可交易合约
if_contracts = get_future_contracts('IF', date='2023-06-01')
print("沪深300股指期货可交易合约:", if_contracts)
# 输出示例: ['IF2306.CCFX', 'IF2307.CCFX', 'IF2309.CCFX', 'IF2312.CCFX']

# 查询 2023年6月1日 螺纹钢(RB)的可交易合约
rb_contracts = get_future_contracts('RB', date='2023-06-01')
print("螺纹钢可交易合约:", rb_contracts)

示例 2:在回测策略中动态获取合约

import jqdata

def initialize(context):
    # 设定期货交易账户
    set_subportfolios([SubPortfolioConfig(cash=1000000, type='futures')])
    # 设置定时运行函数
    run_daily(daily_check, time='09:30', reference_security='RB9999.XSGE')

def daily_check(context):
    # 获取螺纹钢品种当前可交易的所有合约
    contracts = get_future_contracts('RB')
    log.info("今日螺纹钢可交易合约总数: %d", len(contracts))
    log.info("具体合约列表: %s", contracts)

3. 注意事项与常见问题

  1. 不能直接对主力合约或指数合约使用get_future_contracts 接收的 security 参数应为品种简称(如 'RB''IF'),而非主力代码(如 'RB9999.XSGE')。
  2. 配合主力合约查询:如果需要获取当前主力合约,请配合使用 get_dominant_future(underlying_symbol, date=None) 函数。
  3. 交易后缀说明:返回的合约代码均带有交易所后缀:
    • .CCFX: 中金所(如 IF2306.CCFX
    • .XSGE: 上期所(如 RB2310.XSGE
    • .XDCE: 大商所
    • .XZCE: 郑商所
    • .XINE: 上海国际能源交易中心