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

如何解决 JoinQuant 研究环境中 indicator 指标调用报错问题?

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

问题描述

研究环境下indicator指标调用报错

研究环境indicator中的指标不能调用了吗?

代码如下:
import jqdata
q = query(indicator.roe).filter(indicator.code.in_(['000001.XSHE']))
get_fundamentals(q)

报错:
AttributeError Traceback (most recent call last)
< ipython-input-130-7850bed1acd4> in < module>
1 import jqdata
----> 2 q = query(indicator.roe).filter(indicator.code.in_(['000001.XSHE']))
3 get_fundamentals(q)

AttributeError: 'function' object has no attribute 'roe'

解决方案

在 JoinQuant(聚宽)的研究环境中,出现 AttributeError: 'function' object has no attribute 'roe' 的报错,通常是因为命名空间冲突导入方式不正确导致的。

在您的代码中,您使用了 import jqdata,此时直接调用 indicator.roe 会导致 Python 无法正确识别 indicator 这个 SQLAlchemy 表对象(它可能被当前环境中的某个同名函数覆盖,或者必须通过 jqdata.indicator 来显式调用)。

解决方法

方法一:使用 from jqdata import *(推荐)
这是聚宽官方文档中最标准的导入方式,它会将 queryindicatorvaluation 等常用的财务表对象直接引入到当前命名空间中。

# 正确的导入方式
from jqdata import *

# 构建查询语句
q = query(indicator.roe).filter(indicator.code.in_(['000001.XSHE']))

# 获取财务数据
df = get_fundamentals(q)
print(df)

方法二:显式指定 jqdata. 前缀
如果您坚持使用 import jqdata,则在调用表对象时需要加上 jqdata. 前缀:

import jqdata

# 显式调用 jqdata.indicator
q = jqdata.query(jqdata.indicator.roe).filter(jqdata.indicator.code.in_(['000001.XSHE']))

df = jqdata.get_fundamentals(q)
print(df)

💡 扩展提示

  1. 避免变量名冲突:在研究环境中,请确保不要将自定义的函数或变量命名为 indicatorqueryvaluation 等聚宽内置关键字。
  2. 指定查询日期:在研究环境中调用 get_fundamentals 时,如果不指定 datestatDate 参数,默认会获取最新一期的财务数据。为了避免未来函数或保证回测/研究结果的一致性,建议显式传入 date 参数(例如 date='2023-01-01')。