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

如何在JoinQuant研究模块中解决 get_trade_days 未定义报错?

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

问题描述

问个get_trade_days的问题

在研究模块中:

获取权重
weight_dic=get_weights(index_id, start, end)

运行时会报错:
NameError Traceback (most recent call last)
< ipython-input-9-a4dc865c30a0> in < module>
1 # 获取权重
----> 2 weight_dic=get_weights(index_id, start, end)

< ipython-input-3-789f331f1b29> in get_weights(index_id, start, end)
14 def get_weights(index_id, start, end):
15 weight_dic = {}
---> 16 tradeList = get_trade_days(start_date=start, end_date=end)
17 for trade in tradeList:
18 weight_dic[trade] = get_index_weights(index_id, trade)['weight'].values

NameError: name 'get_trade_days' is not defined

请问是什么原因?

解决方案

出现 NameError: name 'get_trade_days' is not defined 报错的原因是没有导入聚宽的数据包 jqdata

在 JoinQuant 的回测环境中,系统通常会自动加载一些常用的 API 函数;但是在**研究模块(Jupyter Notebook)**中,所有的 API 函数都需要您显式地导入后才能使用。

解决办法

在您的代码最上方(或者在调用该函数所在的 Cell 的最上方),添加以下导入语句:

from jqdata import *

修改后的完整代码示例

# 导入聚宽数据包,这是解决报错的关键
from jqdata import *

def get_weights(index_id, start, end):
    weight_dic = {}
    # 现在可以正常调用 get_trade_days 了
    tradeList = get_trade_days(start_date=start, end_date=end)
    for trade in tradeList:
        weight_dic[trade] = get_index_weights(index_id, trade)['weight'].values
    return weight_dic

# 获取权重
index_id = '000300.XSHG'
start = '2023-01-01'
end = '2023-01-31'
weight_dic = get_weights(index_id, start, end)
print(weight_dic)

总结: 在研究模块中,只要用到获取数据的 API(如 get_trade_days, get_index_weights, get_price 等),请务必确保已经执行了 from jqdata import *