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

JoinQuant 回测调用 .py 文件 get_price() 报错 "name 'get_price' is not defined" 怎么解决?

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

问题描述

回测调用.py文件get_price()函数报错

我在回测时调用.py文件里的函数,函数使用了get_price() 函数,提示:name 'get_price' is not defined

在研究环境没有这个问题。有人知道这是怎么回事吗?

解决方案

在 JoinQuant 聚宽量化平台中,当您在回测环境中调用自定义的 .py 文件(即您放在研究根目录下的私人 Python 库文件)时,如果该文件中使用了聚宽的 API(如 get_pricehistory 等),必须在 .py 文件的开头显式导入聚宽的 API 库。

报错原因

在研究环境的 Jupyter Notebook 中,系统通常会自动注入一些常用的全局变量和 API。但在回测环境中,当您通过 import 引入自定义的 .py 模块时,该模块拥有自己独立的命名空间,系统不会自动将聚宽的 API 注入到您的自定义模块中。因此,Python 解释器在执行到 get_price() 时,会因为找不到该函数的定义而抛出 NameError: name 'get_price' is not defined

解决方法

您需要在自定义的 .py 文件(例如 mylib.py)的顶部,手动导入聚宽的 API。

根据 JoinQuant 官方文档的建议,请在您的 .py 文件中加入以下导入语句:

# -*- coding: utf-8 -*-
# 如果你的文件包含中文, 请在文件的第一行使用上面的语句指定你的文件编码

# 用到策略及数据相关API请加入下面的语句
from kuanke.user_space_api import *
# 或者使用
from jqdata import *

def my_custom_function():
    # 现在可以正常使用 get_price 了
    df = get_price('000001.XSHE', count=5, end_date='2023-01-01', frequency='daily')
    return df

为了兼容研究环境和回测环境,您也可以使用 try...except 块来导入:

try:
    from kuanke.user_space_api import *
except ImportError:
    pass

try:
    from jqdata import *
except ImportError:
    pass

总结

只要在自定义的 .py 文件头部加上 from kuanke.user_space_api import *from jqdata import *,就可以在自定义函数中正常调用 get_price 等聚宽 API 了。