🚀 AI 一键生成 joinquant 策略代码

解决本地Python环境(Spyder/Anaconda)无法调用JoinQuant attribute_history 函数的问题

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

问题描述

为什么我在anacomda中的Spyder中无法引用attribute_history函数呢?

解决方案

问题原因分析

您在本地 Anaconda 的 Spyder 中无法引用 attribute_history 函数,根本原因是:attribute_history 是 JoinQuant(聚宽)平台云端回测/模拟交易环境的专用 API

这个函数高度依赖于聚宽云端服务器的上下文环境(如 context 对象、云端数据库连接等)。当您在本地独立的 Python 环境(如 Spyder、Jupyter Notebook 等)中编写代码时,并没有这些云端环境的支持,因此 Python 解释器会报错提示找不到该函数(NameError: name 'attribute_history' is not defined)。

解决方案

如果您希望在本地环境(Spyder)中获取聚宽的数据进行量化研究,您需要使用聚宽提供的本地数据接口库 JQData (jqdatasdk),并使用对应的本地 API 来替代 attribute_history

1. 安装并登录 JQData

首先,您需要在 Anaconda 环境中安装 jqdatasdk

pip install jqdatasdk

然后在您的 Spyder 脚本中导入并登录(需要您在聚宽官网申请 JQData 账号):

import jqdatasdk as jq

# 使用您的聚宽账号和密码登录
jq.auth('您的手机号', '您的密码')

2. 使用 get_priceget_bars 替代 attribute_history

在本地 jqdatasdk 中,没有 attribute_history 函数。您应该使用 get_priceget_bars 来获取历史行情数据。

示例:获取平安银行过去5天的收盘价

在聚宽云端回测中(使用 attribute_history):

# 云端回测代码
close_data = attribute_history('000001.XSHE', 5, '1d', ['close'])

在本地 Spyder 中(使用 get_price 替代):

import jqdatasdk as jq
import datetime

jq.auth('账号', '密码')

# 本地获取数据需要明确指定结束时间 (end_date)
# 获取平安银行截至今天的前5个交易日数据
df = jq.get_price('000001.XSHE', count=5, end_date=datetime.datetime.now(), frequency='daily', fields=['close'])

print(df)

3. 核心区别总结

特性 attribute_history (云端回测) get_price / get_bars (本地 jqdatasdk)
运行环境 仅限聚宽官网回测/模拟交易 本地 Python (Spyder, PyCharm 等)
时间上下文 自动根据回测的当前逻辑时间 (context.current_dt) 往前推算,无未来函数 需要手动传入 end_date,如果不传默认取最新数据
是否包含当天 按天获取时,不包含回测当天的数据 包含 end_date 指定时间之前的数据

总结

如果您只是想在本地做数据分析和策略研究,请使用 jqdatasdk 配合 get_price。如果您想利用聚宽的回测引擎测试策略逻辑(包含 initializehandle_data 等框架),请直接在**聚宽官网的“我的策略”**中编写和运行代码,那里可以直接使用 attribute_history