3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台中使用 get_history_fundamentals API 进行多报告期财务数据查询时,watch_date 与 stat_date 是控制时间维度的两大关键参数。搞清二者的区别对于规避未来函数和准确提取历史财报至关重要。
watch_date 和 stat_date 只能二选一指定,不能同时使用。
| 参数名称 | 核心定义 | 适用场景 | 未来函数风险 |
|---|---|---|---|
| watch_date | 观察日期(实际看数据的时点) | 回测、模拟实盘、因子选股 | 低(安全):仅返回在该日期及之前已发布的最新财报 |
| stat_date | 统计报告期(财报对应的季度/年份) | 财报专题研究、历史报表对比 | 高:直接按报告期查询,若在未披露前使用会引入未来数据 |
2023-05-01)站立的时间点。# 获取 2023-05-01 时点能够看到的最新 4 个季度的财报数据
df = get_history_fundamentals(
security=['000001.XSHE'],
fields=[income.total_operating_revenue, balance.cash_equivalents],
watch_date='2023-05-01',
count=4,
interval='1q'
)
'2022q4'、'2023q1' 或 '2022'(需配合 stat_by_year=True)。stat_date,就会精准定位到该报告期。2023-01-15 的回测逻辑中使用了 stat_date='2022q4',由于此时 2022 年四季报尚未披露,就会引入未来函数,导致回测失真。# 精准查询 2022q1 及其之前的 4 个季度财报数据
df = get_history_fundamentals(
security=['000001.XSHE'],
fields=[income.total_operating_revenue],
stat_date='2022q1',
count=4,
interval='1q'
)
stat_date=context.current_dt.strftime('%Yq%q')。context.previous_date 或 context.current_dt。watch_date;若要分析固定报告期,传 stat_date。stat_by_year=True,此时 interval 必须为 '1y',stat_date 必须为年份字符串(如 '2022'),不能传入 '2022q4'。在因子回测策略中的标准安全调用方式:
from jqdata import *
def market_open(context):
# 推荐使用 watch_date 传入上一交易日或当前日期,确保零未来函数
df = get_history_fundamentals(
security=['000001.XSHE', '600000.XSHG'],
fields=[balance.cash_equivalents, income.total_operating_revenue],
watch_date=context.previous_date,
count=4,
interval='1q'
)
# 按股票代码分组处理
mean_revenue = df.groupby('code')['total_operating_revenue'].mean()