3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台中,get_fundamentals_continuously 函数用于查询多日的财务数据(如市盈率、换手率、每股收益等)。由于 Pandas 在 0.24 及后续版本中彻底废弃了 Panel 数据结构,直接使用默认参数可能会导致代码不兼容或报错。
本文将详细介绍 get_fundamentals_continuously 的参数说明、避免 Panel 弃用的最佳实践以及具体代码示例。
get_fundamentals_continuously(query_object, end_date=None, count=None, panel=True)
query_object: SQLAlchemy 的 Query 对象,指定要查询的财务数据表及字段(如 valuation、indicator 等)。end_date: 查询的截止日期,支持字符串(格式为 'YYYY-MM-DD')或 datetime.date/datetime.datetime 对象。在回测中默认取 context.current_dt 的前一天。count: 获取 end_date 之前 count 个交易日的数据。panel: 布尔值,是否返回 pandas.Panel 对象。
True(默认): 返回 pandas.Panel 对象(Pandas 新版本中已弃用)。False(推荐): 返回等效的 pandas.DataFrame,避免 Panel 废弃带来的兼容性问题。注意:为了保证查询性能,平台限制返回总条数不超过 5000 条(即
查询的股票数量 × count < 5000)。
由于新版 Pandas 已移除 Panel,建议在调用 get_fundamentals_continuously 时明确设置 panel=False,以获取包含 MultiIndex 或标准结构的 DataFrame。
from jqdata import *
# 1. 构建 Query 查询对象
q = query(
valuation.code,
valuation.turnover_ratio, # 换手率
valuation.market_cap, # 总市值
indicator.eps # 每股收益
).filter(
valuation.code.in_(['000001.XSHE', '600000.XSHG'])
)
# 2. 查询截止 2018-01-01 前 5 个交易日的财务数据,并设置 panel=False
df = get_fundamentals_continuously(q, end_date='2018-01-01', count=5, panel=False)
# 3. 查看返回的 DataFrame 数据结构
print(df)
股票数量 × count >= 5000,返回的数据会被截断或不完整。建议分批次或分时间段查询。end_date 默认取 context.current_dt 的前一天,确保策略不会引入未来的财务数据。.in_([...]) 方法,例如 valuation.code.in_(['000001.XSHE', '600000.XSHG'])。