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

如何在 JoinQuant 中获取一段时间内的期货主力合约?(解决 get_dominant_future 参数报错)

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

问题描述

get_dominant_future参数问题

请问get_dominant_future(underlying_symbol,date , end_date )中的end_date按照说明:end_date:指定日期参数,获取自date到end_date的主力合约(pandas.Series格式)。默认值为 None,不填则返回 date 参数指定日期的主力合约标的。

但是实际使用过程中提示图中错误:TypeError: get_dominant_future() got an unexpected keyword argument 'end_date'。 请问这个怎么可以解决?我怎么可以获得一段时间主力每天对应的主力合约代码?谢谢!

解决方案

您好!出现 TypeError: get_dominant_future() got an unexpected keyword argument 'end_date' 这个错误,是因为 JoinQuant(聚宽)官方的 get_dominant_future API 实际上并不支持 end_date 参数

根据聚宽最新的 API 文档,该函数的标准用法为:

get_dominant_future(underlying_symbol, date=None)

它每次只能返回**指定某一天(date)**的主力合约字符串(例如 'IF1608.CCFX'),无法直接通过传入 end_date 来获取一个时间段的 Series。

解决方案:如何获取一段时间内的主力合约序列?

如果您需要获取一段时间内每天对应的主力合约代码,可以通过结合 get_trade_days(获取交易日列表)和 get_dominant_future(循环获取每天的主力合约)来自定义一个函数实现。最后将其转换为 pandas.Series 格式即可。

以下是为您编写的实现代码:

import pandas as pd
from jqdata import *

def get_dominant_future_series(underlying_symbol, start_date, end_date):
    """
    获取指定时间段内某期货品种每天的主力合约代码
    
    :param underlying_symbol: 期货品种代码,如 'IF', 'AG'
    :param start_date: 开始日期,如 '2023-01-01'
    :param end_date: 结束日期,如 '2023-01-31'
    :return: pandas.Series,索引为交易日,值为当日主力合约代码
    """
    # 1. 获取指定时间段内的所有交易日
    trade_days = get_trade_days(start_date=start_date, end_date=end_date)
    
    # 2. 遍历交易日,逐日获取主力合约
    dominant_futures = []
    for date in trade_days:
        dom_contract = get_dominant_future(underlying_symbol, date=date)
        dominant_futures.append(dom_contract)
        
    # 3. 组合成 pandas.Series 并返回
    dom_series = pd.Series(dominant_futures, index=trade_days)
    return dom_series

# ================= 测试示例 =================
# 获取沪深300股指期货(IF)在 2023年1月 的主力合约序列
# dom_series = get_dominant_future_series('IF', '2023-01-01', '2023-01-31')
# print(dom_series)

代码原理解析:

  1. get_trade_days(start_date, end_date):获取您所需时间段内的有效交易日列表,避免在非交易日查询导致数据异常。
  2. for date in trade_days::通过循环,将每一天作为 date 参数传入 get_dominant_future,获取当天的正确主力合约。
  3. pd.Series(...):将获取到的列表与交易日时间轴对齐,打包成您期望的 pandas.Series 格式,方便后续进行向量化计算或数据对齐。

您可以直接将上述 get_dominant_future_series 函数复制到您的研究环境或策略代码中使用。