问题描述
在研究模块中:
获取权重
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 *。