3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
这不是聚宽系统的 bug,而是由于研究环境与回测环境的 API 命名空间差异导致的。
在 JoinQuant 平台中,get_trade_days() 属于纯数据获取接口,包含在 jqdata 模块中;而 get_all_securities() 等函数不仅是数据接口,还属于策略与回测环境的全局 API。当你在研究环境的根目录下创建自定义的 .py 文件(如 mydata.py)时,仅仅使用 from jqdata import * 是无法导入所有策略环境专用的 API 的。
要在自定义的 Python 库文件中使用策略及数据相关的全局 API(如 get_all_securities、history、order 等),你需要显式地导入 kuanke.user_space_api 模块。
请在你的 mydata.py 文件的开头加上以下导入语句:
# -*- coding: utf-8 -*-
# 如果你的文件包含中文, 请在文件的第一行使用上面的语句指定文件编码
from jqdata import *
# 导入策略及数据相关全局 API
# 为了兼容研究环境和回测环境,建议使用 try...except 导入
try:
from kuanke.user_space_api import *
except ImportError:
pass
def func():
# 现在可以正常调用了
days = get_trade_days()
securities = get_all_securities()
return days, securities
在回测环境的主代码编辑区,系统在底层已经自动为你注入了 kuanke.user_space_api 中的所有函数,所以你可以直接调用。但是,当你通过 import mydata 引入你自己写的外部模块时,Python 的模块隔离机制使得 mydata.py 无法自动获取这些注入的全局函数。因此,必须在 mydata.py 内部手动导入 kuanke.user_space_api,才能让该文件识别到 get_all_securities 等函数。
修改导入语句后,重新编译运行你的量化策略,报错就会消失了。