历史财务数据中存在一个巨大陷阱:‘追溯调整’,它让很多回测模型无意中‘开了天眼’。
每到财报季,很多做基本面分析的朋友就陷入了无尽的折磨。你是否遇到过这样的真实困境:
看到某只股票涨势喜人,想深入研究,却不知道从哪里找完整的历史财务数据?
想对比同行业50家公司的ROE变化趋势,手工复制粘贴到Excel,直到眼花崩溃?
想验证一个“高ROE+筹码集中”的选股策略在过去10年的表现,发现手工复盘根本不可能完成?
传统的投资研究往往依赖于在各大财经网站一只一只点开查询,或者下载PDF年报人工提取。这种“刀耕火种”的方式不仅效率低下,更致命的是缺乏系统性和可复制性。
今天,我们就来硬核科普一下,专业的量化投资者是如何通过程序化手段(以目前主流的QMT量化交易终端为例),一键打通A股基本面数据体系的。哪怕你现在还不会写代码,看完这篇文章,你也会对量化的降维打击有全新的认知。
![]() | QMT回测示例 QMT、Ptrade手册 关注公众号实时获取量化知识分享![]() |
一、量化系统里,藏着怎样一个“数据宝藏”?
上市公司的财务信息,在专业的量化系统中已经被规整为了极其结构化的核心维度。在QMT的财务数据字段表中,包含了以下全套“弹药库”:
1. 资产负债表 (ASHAREBALANCESHEET)
反映: 企业某一时点的财务状况快照(家底厚不厚)。
核心指标: 总资产、净资产、资产负债率、流动比率。
投资应用: 评估企业偿债能力、资产质量、财务安全边际。
2. 利润表 (ASHAREINCOME)
反映: 企业一段时期的经营成果。
核心指标: 营业收入、净利润、毛利率、净利率。
投资应用: 分析盈利能力、成长性,这里的超预期数据往往是市场炒作的直接导火索。
3. 现金流量表 (ASHARECASHFLOW)
反映: 企业现金的真实流入流出情况。
核心指标: 经营性现金流、自由现金流。
投资应用: 量化排雷必备。账面利润再好看,收不回真金白银也是白搭。
4. 股本与主要指标 (CAPITALSTRUCTURE / PERSHAREINDEX)
反映: 股权分布及经过计算的综合性指标。
核心指标: 总股本、ROE(净资产收益率)、EPS(每股收益)。
投资应用: 懒得自己算的话,这里直接提供算好的指标,非常适合快速构建多因子选股模型。
5. 股东结构数据 (TOP10HOLDER / SHAREHOLDER)
反映: 十大股东/流通股东持股明细,以及股东总数变化。
投资应用: 想知道社保基金或知名牛散在潜伏谁?直接通过代码遍历十大股东表。而“股东人数”更是量化里经典的“筹码集中度”因子,人数锐减往往暗藏主力吸筹的玄机。
二、从手工到程序化:几行代码的降维打击
知道了有哪些数据,接下来就是如何拿出来。QMT提供了 ContextInfo 系列API,让我们看看如何用几行代码完成原本需要数小时的工作。
场景1:行业龙头财务大比拼(截面与时间序列提取) 想对比白酒行业龙头的盈利能力?传统方式需要打开4个网页分别查询。而使用 ContextInfo.get_financial_data 函数,代码一跑即可完成:
# 对比白酒行业龙头的核心财务指标 liquor_stocks = ['600519.SH', '000858.SZ', '000568.SZ', '603369.SH'] # 一键获取主要财务指标表 indicators = ContextInfo.get_financial_data( stock_code=liquor_stocks, table_list=['PERSHAREINDEX'], # 主要指标表 start_date='20200101', end_date='20231231', report_type='report_time')
一行代码,你就能直接拉出这些公司过去三年的ROE变化、毛利率横向对比,极其直观。
场景2:结合最新股本,快速计算动态市值 在实盘交易过滤时,我们需要快速剔除“盘子太大”的股票。这里可以使用极简的股本函数:
ContextInfo.get_total_share(stock_code):获取目标股票最新总股数。
ContextInfo.get_last_volume(stock_code):获取最新流通股本。 将它与当天的实时股价相乘,不到1秒钟,就能在5000只股票里把“大象股”全筛掉。
三、进阶防坑:财务数据里隐藏的“未来函数”与API的真实用法
如果你看到这里,恭喜你已经超越了80%的业余研究者。但接下来要说的,才是量化投资中最核心的“严谨性认知”。
在使用财务数据做历史回测时,有一个巨大的陷阱:“追溯调整”。 设想一个坑:某公司在2023年并购了一家子公司,根据会计准则,它在发报表时会对2022年的历史数据进行“重新计算调整”。这就导致我们在普通软件或基础数据库中拿到的2022年数据,是“调整后”的完美数据。如果在回测时用了它,就相当于给模型“开了天眼”(引入了致命的未来函数),因为2022年的你在当时根本看不到这个包含并购业绩的完美数据!
很多刚接触QMT的朋友,会发现系统里有两个获取财务数据的函数:get_financial_data 和 get_raw_financial_data(获取原始财务数据),并误以为后者能解决未来函数的问题。
但作为一个严谨的量化老手,你必须知道真相: 这两个接口获取的实际上都是调整后的数据。它们唯一的区别在于“对每一天的数据如何处理”:
get_financial_data:会自动把季报数据向后填充到下一个季报发布前的每一个交易日。这极其方便你计算每一天的动态市盈率(PE)或构建日频因子。
get_raw_financial_data:不作任何填充,只在财报发布的那几个特定日期有数据。
因此,当你构建长周期历史回测策略时,必须在心里敲响警钟:由于调整后数据的存在,历史回测的表现可能会因为这种“被动引入的未来函数”而略微失真。 在量化界,明确知道自己用什么数据、数据的局限性在哪里,比单纯会写代码重要一百倍。
四、结语
看完这些,你会发现:量化交易,并不只是高频割韭菜的代码,它首先是一种系统性的“效率与严谨的结合体”。
如果你把“筹码集中度增加 + 核心机构新进 + 连续三年高ROE”的逻辑写成代码,按下运行键,几秒钟之内,一份剔除杂乱信息的股票池就会出现在你面前。这就节省了你99%的搬砖时间,让你能把精力真正花在“交易逻辑”的思考上。
在这个数据触手可及的时代,与其在信息茧房里凭感觉买卖,不如试着掌握一点量化工具,给自己的投资装上一套现代化的雷达系统。哪怕存在数据的局限性,用代码处理过的信息,也永远比手工整理来得更高效、更纯粹。
国金证券 李柯俊 S1130125070109投资有风险 入市需谨慎 投资者应对交易结果负责,系统仅提供辅助工具功能,请根据您的风险承受能力选择适当的量化交易工具!
![]() | QMT回测示例 QMT、Ptrade手册 关注公众号实时获取量化知识分享![]() |

QMT回测示例
QMT、Ptrade手册
关注公众号实时获取量化知识分享

QMT回测示例
QMT、Ptrade手册
关注公众号实时获取量化知识分享