🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

为什么在聚宽(JoinQuant)获取的茅台ROE数据是个位数?

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

问题描述

茅台roe数据不对

q = query(
indicator.pubDate,
valuation.pe_ratio,
indicator.roe,
).filter(
income.code == '600519.XSHG',
)
data = [get_fundamentals(q, statDate=quarter[i]) for i in range(1, len(quarter))]

Img

roe都是个位数
实际的roe都是20以上

聚宽里是不是有很多数据都不对?
大家有没发现?

解决方案

聚宽财务数据ROE“不准确”的原因解析

您好!聚宽平台的数据并没有错误,您遇到的“茅台ROE只有个位数”的问题,核心原因在于您查询的是“单季度ROE”,而您平时在行情软件上看到的20%以上的ROE通常是“年度ROE”或“TTM(滚动十二个月)ROE”。

在您的代码中,使用了 statDate=quarter[i](例如 2022q1, 2022q2 等)来获取财务数据。聚宽的 get_fundamentals 接口在传入具体季度(如 q1, q2)时,返回的是该单一季度的财务指标。贵州茅台每年的总ROE大约在30%左右,平摊到单个季度,自然就是7%~8%左右的个位数。


如何正确获取您想要的ROE数据?

根据您的需求,有以下三种正确的获取方式:

方法一:获取“年度ROE”

如果您想看茅台每年的总ROE,在传入 statDate 时,应该直接传入年份(如 '2021', '2022'),而不是季度。

# 查询茅台年度ROE
q = query(
    indicator.pubDate,
    valuation.pe_ratio,
    indicator.roe,
).filter(
    valuation.code == '600519.XSHG',
)

# 传入年份,获取年度财报数据
years = ['2020', '2021', '2022']
data = [get_fundamentals(q, statDate=y) for y in years]
for d in data:
    print(d)

方法二:获取“最新一期财报的ROE”

如果您不需要指定历史某个季度,而是想在回测的某一天获取当时能看到的最新ROE,请使用 date 参数代替 statDate。注意:这依然是最新一期财报的单季度或累计值,具体取决于财报类型。

# 使用 date 参数获取指定日期能看到的最新财务数据
df = get_fundamentals(q, date='2023-05-01')
print(df)

方法三:获取“ROE_TTM(滚动十二个月ROE)”(推荐)

在量化选股中,为了消除季节性影响并获得平滑的年化指标,我们通常使用 TTM(Trailing Twelve Months) 数据。聚宽的因子库中直接提供了 roe_ttm 因子,您可以直接调用:

from jqfactor import get_factor_values

# 获取茅台在指定时间段的 ROE_TTM 因子值
factor_data = get_factor_values(
    securities=['600519.XSHG'], 
    factors=['roe_ttm'], 
    start_date='2022-01-01', 
    end_date='2022-12-31'
)

# 打印结果,这里的ROE_TTM就会是20%~30%的年化水平
print(factor_data['roe_ttm'])

总结

聚宽的财务数据表(如 indicator, income, balance 等)默认是单季度数据。在进行基本面量化分析时,务必区分单季度数据(q1/q2/q3/q4)年度数据(YYYY)以及TTM数据。建议在截面选股时,多使用聚宽因子库(jqfactor)中已经处理好的 TTM 因子,以避免季节性偏差和未来函数。