3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在进行量化回测与因子研究时,经常需要获取某只或多只股票在一段时间内的连续财务数据(如市盈率、市值、换手率、EPS 等)。JoinQuant 提供了 get_fundamentals_continuously 函数,能够高效地一次性查询多日财务数据。
get_fundamentals_continuously(query_object, end_date=None, count=None, panel=False)
query_object:通过 query(...) 构造的 SQLAlchemy 查询对象,包含需要查询的表和字段。end_date:查询截止日期。在回测环境中默认为 context.current_dt 的前一天(避免未来函数);在研究环境中默认为最新可用日期。count:获取 end_date 之前 count 个交易日的数据。panel:由于 Pandas 0.24+ 已废弃 Panel 结构,强烈建议设置为 False,以返回等效的 DataFrame(默认为 True)。查询股票数量 × count < 5000。若超出限制,返回数据会不完整。valuation)则每日更新。以下代码展示了如何在 JoinQuant 中连续获取平安银行(000001.XSHE)与浦发银行(600000.XSHG)连续 5 个交易日的换手率、总市值与每股收益(EPS)。
from jqdata import *
# 1. 构造 Query 查询对象,指定要查询的表与字段以及目标股票
q = query(
valuation.code,
valuation.day,
valuation.turnover_ratio, # 换手率(%)
valuation.market_cap, # 总市值(亿元)
indicator.eps # 每股收益EPS(元)
).filter(
valuation.code.in_(['000001.XSHE', '600000.XSHG'])
)
# 2. 调用 get_fundamentals_continuously 获取连续 5 个交易日的数据
# 建议设置 panel=False
df_res = get_fundamentals_continuously(q, end_date='2023-12-29', count=5, panel=False)
# 3. 查看返回结果
print(df_res)
当 panel=False 时,返回的 DataFrame 包含形如 code、day 以及具体字段的多重列或索引,可通过 Pandas 的 groupby 或透视表轻松提取特定股票的数据:
# 筛选平安银行(000001.XSHE)的连续财务数据
payh_df = df_res[df_res['code'] == '000001.XSHE']
print(payh_df[['day', 'turnover_ratio', 'market_cap', 'eps']])
get_fundamentals 与 get_fundamentals_continuously 有何区别?get_fundamentals 用于获取单日的截面财务数据。get_fundamentals_continuously 用于获取连续多日的时间序列财务数据,避免循环调用单日 API,大幅提升运行效率。如果股票池较大(例如沪深300指数成分股 300 只),且需要获取 30 天数据(300 × 30 = 9000 > 5000),请将股票列表分批次(Batch)传入查询,最后使用 pd.concat 合并结果。