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

JoinQuant 聚宽平台如何加前缀调用 get_bars 等 API?(解决 jqdata 报错)

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

问题描述

get_bars,get_price等方法如何加前缀来调用?

我尝试了用了本地数据调用,引用本地库包后,通常习惯是加前缀jq.来调用,一切正常。一般形式如下:
import jqdatasdk as jq
jq.get_bars(security='000001.XSHE', count, unit, end_dt, ...)

但代码有时需要拿到平台上来共享运行,
在聚宽网站上其实无需import jqdata是可以直接调用get_bars( ),get_price( )等方法的, 但我懒,不想每次修改代码,
我希望直接上传本地代买到平台就可以直接运行jq.get_bars()这正的形式。 于是我写了
import jqdata as jq
然后调用jq.get_bars()的形式来调用时,平台报错说没有这个方法:
AttributeError: module 'jqdata' has no attribute 'get_bars'.
难道get_bars不是在jqdata库里? 那我怎么写才能实现我的想法,给get_bars等方法的调用加上前缀?

解决方案

在 JoinQuant 聚宽平台上,get_barsget_price 等常用的 API 函数实际上是被直接注入到了策略和研究环境的**全局命名空间(Global Namespace)**中的。这就是为什么你在平台上不需要加任何前缀就可以直接调用它们的原因。

而你尝试使用的 import jqdata as jq 之所以会报错 AttributeError: module 'jqdata' has no attribute 'get_bars',是因为在云端环境中,jqdata 模块主要用于存放 jqdata.macro(宏观数据)、jqdata.finance(财务数据)等子模块,全局的行情 API 并不直接挂载在 jqdata 这个模块对象下(这与本地的 jqdatasdk 结构不同)。

解决方案:使用 kuanke.user_space_api

为了实现你的需求——不修改代码,直接在本地和云端都能使用 jq.get_bars() 的形式调用,你可以引入聚宽云端底层的 API 模块:kuanke.user_space_api

在聚宽云端,所有的全局 API 都存放在这个模块中。你可以通过 try...except 语句来编写一段兼容本地和云端的导入代码:

# 兼容本地 jqdatasdk 与 聚宽云端环境的导入方式
try:
    # 尝试导入本地的 jqdatasdk
    import jqdatasdk as jq
    # 如果在本地运行,可以在这里加上登录代码(云端运行会跳过)
    # jq.auth('你的账号', '你的密码') 
except ImportError:
    # 如果导入失败,说明当前在聚宽云端环境
    # 导入云端的底层 API 模块,并重命名为 jq
    import kuanke.user_space_api as jq

# 接下来你就可以在任何地方愉快地使用 jq. 前缀了!
# 无论是在本地还是上传到聚宽平台,下面的代码都不需要修改:

def initialize(context):
    # 示例:使用 jq. 前缀调用 API
    df = jq.get_bars(security='000001.XSHE', count=5, unit='1d', fields=['open', 'close'])
    print(df)
    
    # 其他 API 也同理
    price = jq.get_price('000001.XSHE', count=1, end_date=context.current_dt)
    print(price)

为什么这样写有效?

  1. 本地环境:本地安装了 jqdatasdktry 块执行成功,jq 成为 jqdatasdk 的别名,jq.get_bars() 正常工作。
  2. 云端环境:云端没有安装名为 jqdatasdk 的包(或者你没有调用 auth),触发 ImportError,进入 except 块。此时导入 kuanke.user_space_api as jq,这个模块包含了云端所有的全局函数,因此 jq.get_bars() 同样可以完美运行。

通过这种优雅的兼容写法,你就可以实现“一套代码,两端运行”,再也不用手动去删改前缀了!