如何用好基本面数据,提高量化策略收益?

文章配图

在量化交易当中,财务数据和行情数据有一个很大的区别,你今天去查某支个股的收盘价,和过几年再去查,这两个时间点的价格都是一致的。但是财务数据呢,某家企业去年的净利润是多少,今天查到的数值,却不一定等于三年后的数值。

下面举个栗子就明白了~

炒股年头儿长的小伙伴都应该听说过一个上市公司,叫獐Z岛,对,就是那个扇贝跑来跑去的公司。

这个公司呢,在2014、2015已经连续两年亏损,已经被实施退市风险警示,如果接着2016年再亏损,那就可以喜提毕业大礼包了,所以,2016年的经营结果对公司能否保壳十分关键。

2017年3月21日,獐Z岛披露了2016年度报告。按照年报当中显示,2016全年实现归母净利润7959w,终于扭亏为盈,保壳成功,胜天半子。

文章配图

但是,不出意外的话,就要出意外了,2019年7月,证监会经过调查,最终认定獐Z岛存在虚增利润,涉案金额达到1.3个小目标。经过追溯调整以后,公司2016年的净利润和归母净利润都双双转负,倒亏5000w+。

文章配图

更吊诡的是,明明这个公司的净利润数据已经修订过了,但在2026年的今天去查,还有好多行情软件上显示的是那个最初的造假金额。

TDX

文章配图

DFCF

文章配图

上面的例子想说的是,同一个报告期,同一家公司,同一个净利润科目,在不同的时间点,出现了两个完全相反的答案。

平常咱F10看财报数据,很多人都以为财报数据是静态的,发布出来后就不变了,其实不是的,财报数据是动态的,会随着日期发生改变的 ,除了那种造假被揪出来强制改正之外,日常上市公司也是会对之前的财报主动进行修订。

由于财报数据的动态性,稍不注意,你的基本面量化策略可能就在引入未来函数,今天回测2017年的基本面策略,查询到的是那调整后的亏损的5000w。

假设策略要求净利润必须为正,或者要求净利润同比保持一定增速,那么獐Z岛自然会被排除在候选股票池之外,策略在2017年就成功识别出了獐Z岛的经营问题,提前避开了后面财务暴雷的风险。

这样的回测结果看起来可能非常亮眼,但实际上经历了一次穿越时空的爱恋,2017年的策略不可能知道2019年的证监会的调查结果,更不可能提前使用2年后才出现的净利润调整结果,站在2017年,投资者能够看到的就是盈利7000w,而不是亏损5000w,这个财务造假的雷没有那么顺利避开。

要在量化中用好基本面数据,首先就要理解A股上市公司的财务报告是怎样披露的,通常情况下,一季报需要在当年4月底之前披露,半年报需要在当年8月底之前披露,三季报需要在当年10月底之前披露,年报则需要在次年4月底之前披露,所以每年4月你就可能前脚看到去年年报披露,后脚就看到今年一季报。

比较低级的错误就是,比如说,在2026年1月就调用2025年的年报数据,以为过完年就可以调数据了,这种就实在太低级了,但凡了解过交易所披露规则的都不会犯,就不在今天的讨论之列了。

用好财报数据,至少要了解3个时间概念,第一个是报告期,也就是财务数据描述的是哪个经营阶段。第二个是公告日期,也就是上市公司在什么时候把这份财务报告公开给市场看。第三个是修订日期,也就是公司在首次披露(公告日期)之后,什么时候对原来的数字进行了更正、追溯调整或者重新披露。

很多基础数据库只强调报告期,而量化回测真正关心的则是后两个时间,数据什么时候首次可见,以及后来发生的修订在什么时候开始可见。

咱以浓眉大眼的中X国际为例,“2024-12-31”是报告期,表示这份财务报告是年报,统计的是2024年1月1日至2024年12月31日的财务状况,“2025-02-12”是公告日期,表示它在这一天公开了自己2024年年报,修订标志为0,表示这是首次发布,“2025-03-28”是修订日期,别是它在这一天对自己的财报进行更正,将自己的净利润和归母净利润分别提高了1.93亿和2.19亿,修订标志为1,表示这是修订版本。

文章配图

从这里就可以看出来,公告日期和修订日期是让量化回测不要出现未来函数的关键变量,也给提高基本面利用效率打下基础。

以往很多人做基本面策略研究,为了避免未来函数,财务数据的使用都非常保守。比如说,2026年4月中旬这个时点,有的上市公司已经发了2025年报和2026一季报,有的则发了2025年报,有的则还停留在2025年的三季报,大部分是业绩不好不敢见公婆,非要压点的,为了避免未来函数,则4月只能取去年三季报的数据,要到5月初才能统一取今年一季度的数据,以此类推,9月初以后才能统一使用半年报,11月初以后才能使用三季报。

这种用法虽然避免了未来函数,但从信息利用效率来看,过度保守同样会付出代价。假设一家公司在3月份的时候就发了去年年报,经营现金流、净利润和ROE都出现明显改善,而策略直到5月初才能使用这一part数据,那么财报公布后的2个月里,策略仍然把它当成一家只披露到去年三季报的公司,市场已经开始根据年报重新定价,策略却仍然停留在旧数据上。

反过来,一家公司3月份公布的财报如果明显恶化,继续使用旧数据也可能导致策略继续错误持有,原来的ROE、利润增速和现金流或许还符合标准,但新财报已经表明经营质量下降。如果策略必须等到统一时点才更新,基本面风险就无法及时进入选股程序。

所以啊, 从信息利用率的角度出发,可以不要求所有股票在同一个交易日使用相同报告期 ,假设策略在4月中旬调仓,有些上市公司可能尚未发布年报,只能继续使用上一年三季报,有些公司已经发布年报,可以使用年度数据,还有极少数公司可能已经披露一季报,可以进一步使用一季报。

除非你是要做报告期横截面建模,不然不同上市公司使用不同报告期也不算是口径混乱,反而更加符合当时真实的信息环境,真正需要统一的并不是报告期,而是“所有数据在决策时都已经公开”这一条规则。

哦豁,废话太多了,总结一下,在量化入门期,想用好基本面数据,记住三个基础要点就够了。

(1)基本面数据不是F10里面看到的那种静态横截面,而是会不定时动态改变的。

(2)要记住和区分报告期、公告日期和修订日期这3个概念,不踩未来函数的坑和提高效率就都靠这哥仨。

(3)取数规则不用太保守,只要在决策时财报已公开就大胆用,不要求必须是统一报告期。

都说到这儿了,那就利用这些规则对上期的绩优红利策略进行改进一下,是骡子是马牵出来溜溜。

这个红利策略是作为小市值互补的防空洞策略,主打的是纯基本面选股,逻辑神经大条,中规中矩保持每年正向收益, 类似于GARP(Growth at a Reasonable Price)策略,用合理的价格买成长型公司,只不过这些基本面只是用来做股票池筛选,最终还是在候选池子当中买股息率最高的前N支股票,具体构建过程请见上月的文章 两个群的人都瞄上了这个策略

现在来回顾一下策略绩效,作为改进对比的基准。

选股5支

文章配图

文章配图

选股10支

文章配图

文章配图

一般情况下,红利策略跟小市值策略是跷跷板效应,但 这俩冤家之前都是被AI拿去当血包,被狂抽流动性,成难兄难弟了,最近AI拉胯,资金回流,红利跟小市值就开始分化了,目前是小市值苦一苦,红利板块开路虎。最近小市值策略也是遇到了2次行业冥灯,算是信号互相印证了。

在原始版的红利策略当中,用来过滤选股池的基本面因子用的是最保守的取数规则,也就是统一报告期,5月才能对一季报全部可见。

在改进版的策略中,就采用时效性更高的取数规则,不统一报告期,具体来说就是, 在1月至4月,改进版会同时查询上一年三季报、上一年年报和当年一季报;在5月至8月,同时查询当年一季报和半年报;在9月至10月,同时查询半年报和三季报;11月至12月则查询三季报。

这样的财报候选范围覆盖了当前月份中可能提前披露的新财报,同时又保留了尚未披露新财报公司的上一期数据。然后根据公告日期和修订日期进行判断,如果昨日及之前可见,那么就取可见范围内的最新财报的最新数据,为了避免未来函数,默认所有财报公布后都只能是第二天可见。

来看一下改进版的策略绩效。

选股5支

文章配图

文章配图

选股10支

文章配图

文章配图

从中可以看出来, 选股5支,改进版红利策略年化收益从25.30%提升到26.34%,夏普率从0.9103提升到0.9497,最大回撤从26.37%下降到26.04%。 选股10支,改进版红利策略年化收益从20.45%提升到21.92%,夏普率从0.8019提升到0.8705,最大回撤从23.31%下降到23.18%

有一丢丢的提升作用,但效用不是特别明显,主要的原因是,该策略当中最核心的选股因子股息率,原本就是日级别更新的TTM数据,基本面取数规则的改进对它没有影响,影响的是用来进行股票池过滤的基本面因子,因此最大的效用就没有发挥出来,看来下次还是得找个更保守的基本面策略才行。

再来进行一个分年收益统计,依旧是中规中矩。

文章配图

文章配图

好了,这个绩优红利策略的改进说完了,如果之前有用原始版进行魔改/模拟/实盘的小伙伴,建议改用新版的,下面是参数设置的要点。

文章配图

ACCOUNT_ID :就是你自己的股票账户的资金账号,回测的时候可以不填或乱填,实盘的时候一定要填自己正确的账号。

ACCOUNT_TYPE :因为要使用股票账户进行交易,所以该参数固定为“STOCK”。

ACCOUNT_MODE :就是你打算用多少钱来跑这个策略,可选值为MONEY和RATIO。选MONEY就表示按照ACCOUNT_MONEY设定的金额,选RATIO就表示使用总账户ACCOUNT_RATIO那么多比例的资金。

ACCOUNT_MONEY :策略金额,单位是“元”,根据自己的资金情况设置。

ACCOUNT_RATIO :占总账户资金的比例,数值在0~1.0之间,0.3表示占30%比例。

STRATEGY_TRADETIME :策略进行交易的时间,因为该策略是日线策略,一天那么长,所以需要指定一个具体的时间进行下单交易,必须是在交易时间段内。

ORDER_TIMEOUT :订单超时时间,默认是60秒,下单后超过60秒没有全部成交就是超时, 策略程序会自动检查出超时的委托单,然后撤单重下 。

STRATEGY_PATH :策略相关文件的存储路径,策略程序会在STRATEGY_PATH这个路径底下再新建一个名为STRATEGY_NAME的文件夹,策略相关的持仓文件和交易日志文件都会保存在这个文件夹底下,这些文件是做仓位隔离和信息回溯的关键。

STRATEGY_NAME :策略名称, 一旦开启实盘之后,策略名称不要随意修改 ,不然就无法识别策略持仓文件,如果在盘中修改然后重启策略的话,就识别不了修改之前下的委托单和成交单。 特别说明就是,策略名称除了中文和英文之外,不要含有任何特殊字符,不然就无法正确识别券商柜台的委托回报。

SELECT_NUM : 每一次选择多少支符合条件的股票作为目标持仓,这里默认是5支。

PE_HIGH :基本面估值筛选时,市盈率PE指标的上限。

PB_HIGH : 基本面估值筛选时,市净率PB指标的上限。

PEG_HIGH : 基本面估值筛选时, 市盈增长比率 PEG指标的上限。

ROE_LOW :基本面盈利筛选时, 净资产收益率‌ROE 指标的下限。

PROFIT_YOY_LOW : 基本面成长筛选时,净利润增长率‌的下限。

MONTH_DAY :每个月的第几个交易日进行交易,默认是第1个交易日。

TOKEN : 因为这里用到Tushare数据源,所以这里要填入自己Tushare的token,关于如何在QMT当中安装tushare,详见文章 《QMT自带的基本面数据这么拉胯,量化大神是怎么用它来实盘的》

本次绩优红利 策略改进版 的回测/实盘源代码,已经分享在『量化达摩院』社群当中,群友请原路径自取,还不会使用QMT进行策略回测和实盘的小伙伴,请参照社群知识库第二章的第3和第4部分进行操作。

文章配图

根据之前的规则约定,带V1字样的是回测版,仅支持回测,主要是代码少,方便看策略逻辑,带V2字样的是回测实盘一体版,同时兼顾实盘和回测,方便对比回测实盘之间的差异,后缀py的是策略源码文件,rzrk是QMT当中的策略备份文件,在QMT中导入后,除了能看到源码外,还会带有策略回测时的各项参数,因此墙裂建议量化萌新通过rzrk导入的方式使用策略,会非常省心省力。

下期见~


往期回顾

------量化社群------

量化达摩院

量化藏经阁Max

量化藏经阁2026

------量化策略------

桥水全天候策略 风险平价策略

聪明钱 TrendModelSys 张坤策略

RSRS 北向资金 F-Score 鱼身策略

TrendPattern 波动率收敛 RSJ策略

期货Alpha 跨品种套利 GARP策略

MACD形态 导数策略 Trendflex

绩优小市值 漂亮50 操盘手 Rumi

AI择时 K线面积法 零代码策略

贴水策略 概率密度策略 一致预期

RSRS复现1 RSRS复现2 ICU均线

野路子策略 ETF轮动 ETF轮动2

菜场大妈&马科维茨 多赚200%

美债&A股择时 价比斜率套利

黄金价格预测 量化兵器库

十年零回撤 红利策略 数字信号

------心得杂谈------

入门路径 量化书单 量化神作

打开黑箱 量化手册 量化攻略

个人量化 量化误解 高收入背后

西蒙斯 雪球爆仓 量化交易邪术

量化网站1 量化网站2 量化狠人

年化577倍 抄底&摸顶 策略开发

未来函数 回测&过拟合 回测&实盘

Alpha&风险因子 MACD参数

资金流 吃贴水 回测提速 量价背离

自学路径 文章合辑 151个策略

chatGPT选股 量化注册制

5年131倍 量化编程神器

4000因子 因子库 量化神集

量化深坑 老胡炒股 私募上班

机器学习算法Top10 微盘股

量化的一天 失败的Quant

十年8万倍 五穷六绝 一月之殇

_ Tip:点击关键字可以直接查看对应文章。 _

END

如果对本文有疑惑,或是想聊聊

亦或是围观朋友圈当点赞之交

戳我,让我们一路同行

吃瓜吐槽写代码

文章配图

文章配图

风险提示:市场有风险,投资需谨慎。所有策略思路和策略源码仅供参考和学习,不构成投资建议,策略回测仅代表历史收益,不代表未来收益。

— 全文完 —

本文由量化君原创。转载时请注明作者及出处。

在微信公众号阅读原文 ↗