3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台中,get_fundamentals() 函数的设计初衷是获取指定日期(横截面)的财务数据快照,而不是获取时间序列上的历史连续数据。如果您在回测中发现只能获取到最近几个月(或几个季度)的数据,通常是因为对该函数的机制存在误解,或者使用了错误的 API。
get_fundamentals(query_object, date=None, statDate=None) 默认返回的是在 date 这一天能看到的最新一期财务报表数据。因为财报是按季度发布的(一年4份),它只会返回距离该日期最近的那一份财报数据,而不是过去几个月的连续数据。date 参数,默认值是 context.current_dt 的前一天。这意味着它总是随着回测时间的推进,动态获取当时的最新财报。如果您需要获取某只股票过去多个季度或多个年度的历史财务数据,应该使用以下两个专门的时间序列财务数据 API:
get_history_fundamentals()(推荐)该函数专门用于获取多个季度/年度的三大财务报表和财务指标数据。
优势:可以直接指定获取过去 count 个季度(或年度)的数据,非常适合做时间序列的财务分析。
代码示例:
from jqdata import *
def initialize(context):
g.security = ['000001.XSHE']
run_daily(market_open, time='09:30')
def market_open(context):
# 获取平安银行过去5个季度的营业总收入和现金等价物
df = get_history_fundamentals(
g.security,
fields=[balance.cash_equivalents, income.total_operating_revenue],
watch_date=context.current_dt.date(),
count=5,
interval='1q',
stat_by_year=False
)
print(df)
get_fundamentals_continuously()如果您需要获取连续多个交易日的财务衍生数据(如每天更新的市盈率 PE、市净率 PB、总市值等),应使用此函数。
代码示例:
from jqdata import *
def market_open(context):
# 查询平安银行过去5个交易日的换手率和总市值
q = query(valuation.turnover_ratio, valuation.market_cap).filter(valuation.code.in_(['000001.XSHE']))
# 获取连续5天的数据
df = get_fundamentals_continuously(q, end_date=context.previous_date, count=5, panel=False)
print(df)
get_fundamentals()。get_history_fundamentals()。get_fundamentals_continuously()。date(即 context.previous_date)或 watch_date,避免手动传入未来的 statDate(如在2015年1月强行请求 2015q1 的数据),否则会导致未来函数报错或获取到空值。