摘要:基本面量化是应用量化研究领域的重头戏,财务数据的整理和加工是基本面量化的第一步。本文梳理了财务数据的基本知识,包括报表类型、数据来源、调整更正和使用原则等,并给出了单季度和TTM数据的计算流程。在本报告的基础上,可以搭建财务因子计算框架,为后续基本面量化研究铺好路。

1.财务数据

经典的有效市场理论认为,公司的一切信息都反映在了股价上面,基本面研究可能并无用武之处。然而近年来各种异象的发现,表明市场并没有那么有效。目前大量研究把精力放在交易数据的挖掘上,像工厂一样制造出了形形色色的因子;反而更加符合直觉的基本面研究,时常遭到莫名其妙的攻击。事实上,基本面量化是应用量化研究领域的重头戏,也是我们后续努力的方向之一。千里之行,始于足下,财务数据的整理和加工是基本面量化的第一步,也是本文要讨论的主要内容。

财务数据就是与企业财务有关的数据,主要是反映企业一定期间的经营成果和财务状况变动。交易所为了保护投资者的权益,要求上市企业定期公布财务报告,以便投资者了解其经营以及财务状况。

1.1报告期

在内地,《会计法》规定会计年度从1月1日开始,12月31日结束。一般要求上市企业一年定期披露四次财报,分别是一季报、中报、三季报、年报[1]。财务报告在披露日期上没有严格要求,只要在规定的截止日之前披露就行。每个报告期都有一个标识,一般用年份+季度末表示,如2018年三季报用“20180930”标识,2018年年报用“20181231”标识,具体定义见表1。

表1 财务报告期

数据来源:CQR

1.2财务报表

财务报告主要由财务报表构成[2],财务报表包括五表一附注,即资产负债表、利润表、现金流量表、财务状况变动表、附表和附注,具体定义和特点见表2。

表2 五表一附注

数据来源:CQR

1.3业绩预告和快报

业绩预告和业绩快报是财报预披露的两种形式,旨在提前释放重要的会计信息,减少股价波动。业绩预告主要是对公司当期净利润情况的预计,包括预告类型、净利润上下限、净利润变动幅度上下限和业绩变动原因等内容;业绩快报更加全面,一般披露公司主要的财务数据,包括营业收入、净利利润和总资产等关键科目,可以提前用来计算各类财务因子。

表3整理了业绩预告的基本规则,包括披露条件和披露时间;表4为业绩快报的披露规则。

表3 业绩预告披露规定

数据来源:CQR,上交所,深交所

表4 业绩快报披露规定

数据来源:CQR,上交所,深交所

1.4数据源

财务报告一般可通过上市公司官网或交易所网站进行查询,但要做量化研究则需要整理好的结构性数据。目前可以从多个数据源获取财务数据,表5整理了我们使用过的一些数据源及它们的优势劣势[3]。

表5 常见数据源

数据来源:CQR

2.调整和更正

2.1基准报告期

在最新报告期财务报表披露时,会同时披露对应的某个历史基准报表。不同报表对应的基准报表不同,资产负债表对应上年年报,如图1白云机场披露2018年三季报的时候,会同时披露年初余额(2017年年报);利润表和现金流量表对应为上年同期值,如图2白云机场2018年三季报现金流量表时,会同时披露上年同比报告期(2017年三季报)。

图1 白云机场2018年三季报资产负债表

数据来源:白云机场三季报

图2 白云机场2018年三季报现金流量表

数据来源:白云机场三季报

无论一季报、半年报、三季报还是年报,在每期资产负债表披露时,其对应的基准报表都为上年年报;而现金流量表和利润表,其对应的基准报表总为对应的同比报告期,对应关系见表6,表7给出了一个示例。

表6 基准报告期

数据来源:CQR

表7 基准报告期示例

数据来源:CQR

2.2调整和更正

财务报表披露后,由于某些原因可能会进行一些修正,更改原始的科目数值。修正按照时间频率分为两种,一种是调整,一种是不定期更正。

财务报表第一次披露时的值,称为原始报表;在后续定期报告中再次披露基准报表时,如果基准报表和原始报表科目数值出现了不同,则发生了调整。以中铁工业(600528.SH)为例,在2017/3/31首次公布了其2016年年报(原始报表),如图3所示;2018/3/28公布2017年年报时同时披露了2016年年报(基准报表),如图4所示。图3期末余额对应2016年原始报表,图4期初余额对应2016年基准报表。可以看到,货币资金、应收票据、应收账款和预付款项均进行了调整。

图3 2016年中铁工业合并资产负债表(部分)

数据来源:中铁高新年报

图4 2017年中铁工业合并资产负债表(部分)

数据来源:中铁高新年报

不定期更正指的是,由于会计政策变更或者会计统计差错等原因,对之前某期的报告进行更正。更正需要发更正公告,没有明确的时间规律。以柳工(000528.SZ)为例,其2018/8/30披露了2018年半年报,在2018/9/29日对半年报进行了更正,表8展示了利润表部分科目更正前和更正后的数值。

表8 柳工2018年半年报利润表更正

数据来源:CQR

2.3基本原则

在进行财务数据的量化研究时,调整和更正的存在会增加数据处理的复杂度。一个处理方式是,不考虑调整和修正,只使用第一次披露的数值。这种方式简单易实现,不会引入未来数据,逻辑上也讲得通;缺点是无法反映调整或更正等新信息,信息利用不充分。另外一种方法是始终采用调整后和修正后的最新数据,这种方式也简化了计算过程,缺点是历史回溯时会利用未来数据,导致结果偏差较大。

上面两种方式为了追求简单而牺牲了精确性,在实际应用中并不推荐。量化研究是一个精细的过程,事实上应该遵循以下原则:在当前时点利用可得的最新信息(point in time)。按照这个原则,既能保证充分利用最新的数据,例如考虑调整和更正,或者将业绩预告和业绩快报考虑进来,也可以完全避免使用到未来的信息。

2.4 数据存储

无论是Wind还是Tushare,三大表在处理调整和更正时采用了相同的步骤。以大智慧(601519.SH)2014年年报合并资产负债表为例,表9记录了其首次披露、调整和更正过程。

表9 大智慧2014年合并报表的调整和更正

数据来源:CQR

因此,底层表中同一个报告期可能会有多条记录,一般包括4条:类型1-初始报表(最新值)、类型2-基准报表(最新值)、类型3-初始报表(原始值)和类型4-基准报表(原始值)。这四种类型与wind和Tushare的对应关系如表10所示。

表10 合并报表在底层表中的四种记录类型

数据来源:CQR

需要注意的是:1)如果没有任何一个会计科目发生调整,则初始报表和基准报表记录相同;2)由于对上市公司财务报表披露规范的指定,1998之前的数据没有调整和更正,每个报告期只有一条记录;3)如果更正发生在基准报告之前,则只有三条记录:初始报表(最新值)、初始报表(原始值)和基准报表(最新值);4)如果更正发生在基准报告之后,则上面四条记录都有。

2.5如何使用

为了说明如何正确使用数据,图5展示了几种常见的情况。

第一种情况,如图5a所示,x年年报在t1日披露后,如果没有发生调整和更正,此时只有1条数据即类型1。t1日后如果要使用该财报数据,则提取类型1即可。

第二种情况如图5b所示,x年年报在t1日首次披露,在t2日x+1年年报披露时顺便再一次披露了x年年报(基准报表)。则在t1~t2日如果要使用该财报数据,提取类型1;在t2日后如果要使用该数据,则提取类型2。

图5c展示了第三种情况,即除了常规的初始报表和基准报表,还发生了数据更正,且更正发生在基准报表之前[4]。在t1日x年年报披露,此时记录为类型1;在t2时刻对年报进行了更正,此时更正后的数据记为类型1,更正前的数据记为类型3;在t3日披露调整数据,此时记录为类型2。因此,如果在t1~t2日要使用x年年报,应提取类型3;在t2~t3如果要使用该数据,则提取类型1;在t3之后,提取类型2即可。

最后一种情况见图5d,即更正发生在基准报表之后。t1日披露x年年报,此时记为类型1;t2日披露x年年报基准报表,记为类型2;t3日发出x年年更正公告,此时修改类型1和类型2为更正后的最新值,原来的数据分别记为类型3和类型4。因此,如果在t1~t2要使用该年报,则应提取类型3;在t2~t3要使用该数据,则提取类型类型4;t3之后提取类型2即可。

图5 调整和更正示例

数据来源:CQR

3.财务计算

3.1单季度数据

每年12个月可以分为四个季度,每个季度包含三个月份,单季度数据对每个季度作单独衡量。由于资产负债表是一个时点数据,因此单季度数据和对应的报告期数据相同;对于利润表和现金流量表,一季度数据和一季报相同,其余三个季度数据等于对应报告期减去环比报告期数据;如果环比报告期缺失,则无法计算单季度数据,单季度数据为空。具体对应关系见表11,计算流程图见图6。

表11 单季度指标计算

数据来源:CQR

图6 单季度指标计算流程图

数据来源:CQR

3.2 TTM数据

TTM是Trailing Twelve Months首字母的缩写,即滚动12个月数据,以消除季节性差异使得横向可比,具体计算流程图见图7。

对于资产负债表来说,由于其为时点数据,如果要计算其科目TTM数据,常见有三种算法:1)当前最新数据;2)最近四个报告期平均值;3)当前最新报告期和其同比报告期的平均值。

对于利润表和现金流量表来说,如果最新报告期为年报,则TTM数据即为年报数据;如果是其他报告期,则TTM数据等于当前最新报告期数据,加上上年年报数据,减去上年同比报告期数据;如果上年年报或同比报告期不存在,可以使用年化算法,即当前最新报告期数据乘以年化系数[5]。

图7 单季度指标计算流程图

数据来源:CQR

A股上市公司从2002年开始披露季度资产负债表和利润表,从2003年开始披露季度现金流量表

财务报表是财务报告中的标准数据,除了五表一附注外,财务报告还包括董事报告、管理分析和财务情况说明书等非标准内容

从wind接口提取会计科目或者财务指标,如果报表有过更正,只能提取到更正后的数据,例如柳工(000528.SZ),提取的每股收益和净利润/营业总收入,均是用更正后的数值计算。另外,从wind接口提取财务指标,财务指标均是用调整前的数据计算,例如中铁工业(600528.SH)的流动资产/总资产,虽然后面进行了追溯调整,但并没有用更新该指标的值。和wind一样,Tushare财务指标表中,如果有过更正,只能提取到更正后的数据;如果有过实质性调整,也不对指标进行更新。

还有一种极其特殊的情形,即更正公告和基准报表在同一日披露。这种情况比较少见,小差错往往在基准报告中就可以做修正调整,除非影响比较大。如股票600087.SH在2010年年报,初次披露日期为20110304,在20120412日披露了2011年年报及2010年年报基准报表,同一天也披露了2010年会计差错更正。这种情形在提取数据时,可以忽略掉会计更正记录,因为在新的基准报告中也会体现这种更正。

一季报、中报和三季报的年化系数分别为4、2、4/3

作者:Tushare挖地兔
链接:https://xueqiu.com/9103835084/122956701
来源:雪球

量化投资,你需要了解的A股财务数据的更多相关文章

  1. Python量化投资知识总结贴

    Ricequant 量化社区的初衷让各位爱好量化的人士可以碰撞思维,在分享和争辩中学习到有用且实战的量化知识.有赖于各位在社区中贡献满满的干货以及有质量的讨论,从编程入门教学到技术指标再到多因子选股. ...

  2. Python与金融量化分析----金融与量化投资

    一:金融了解 金融:就是对现有资源进行重新的整合之后,进行价值和利润的等效流通. 金融工具: 股票 期货 黄金 外汇 基金 ............. 股票: 股票是股份公司发给出资人多的一种凭证,股 ...

  3. 量化投资学习笔记01——初识Pyalgotrade量化交易回测框架

    年初学习量化投资,一开始想自己从头写,还是受了C/C++的影响.结果困在了计算回测数据那里,结果老也不对,就暂时放下了.最近试了一下python的各个量化投资框架,发现一个能用的——pyalgotra ...

  4. 《量化投资:以MATLAB为工具》连载(2)基础篇-N分钟学会MATLAB(中)

    http://www.matlabsky.com/thread-43937-1-1.html   <量化投资:以MATLAB为工具>连载(3)基础篇-N分钟学会MATLAB(下)     ...

  5. 《量化投资:以MATLAB为工具》连载(1)基础篇-N分钟学会MATLAB(上)

    http://blog.sina.com.cn/s/blog_4cf8aad30102uylf.html <量化投资:以MATLAB为工具>连载(1)基础篇-N分钟学会MATLAB(上) ...

  6. Python金融应用编程(数据分析、定价与量化投资)

    近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...

  7. 量化投资技术分析工具---ipython使用

    量化投资实际上就是分析数据从而做出决策的过程python数据处理相关模块NumPy:数组批量计算pandas:灵活的表计算Matplotlib:数据可视化 学习目标:用NumPy+pandas+Mat ...

  8. 量化投资与Python

    目录: 一.量化投资第三方相关模块 NumPy:数组批量计算 Pandas:表计算与数据分析 Matplotlib:图表绘制 二.IPython的介绍 IPython:和Python一样 三.如何使用 ...

  9. 1、量化投资—为什么选择Python?

    Python在量化领域的现状 就跟Java在web领域无可撼动的地位一样,Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现. 在量化投资(证券和比特币)开源项目 ...

随机推荐

  1. 怎样使一个INPUT框里的文字在框被点击后自动全选或清除?

    $("#smsContent").focus(function(){ this.select(); }); <input name="keywords" ...

  2. c++指针参数是如何传递内存的

    参数策略 如果函数的参数是一个指针,不要指望用该指针去动态申请内存.如下: void GetMemory(char *p, int num) { p = (char *)malloc(sizeof(c ...

  3. 玩转phpstorm之terminal

    启动快捷键  Alt+F12 启动之后,像这样 第一次进入这个配置默认显示的是cmd窗口,现在我们将其换成git 命令行窗口,毕竟git才是boss first 将cmd换成我们是先在电脑上安装完成的 ...

  4. Ogre 中使用OIS的两种模式

    关于OIS的输入 要开始考虑游戏输入的问题了,以及开始加入CEGUI也要考虑加入输入的问题.先把OIS的输入简单回忆一下. OIS有两种输入模式:非缓冲输入以及缓冲输入. 无论用哪种输入方式,都应该有 ...

  5. 剑指OFFER之二叉树的镜像(九度OJ1521)

    题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的 ...

  6. [Xcode 实际操作]八、网络与多线程-(21)延时启动画面:使用Thread线程对象的延时方法

    目录:[Swift]Xcode实际操作 本文将演示如何使用线程对象的延时方法,让线程休眠一段时间,暂停动作的执行. 在项目导航区,打开启动画面的故事板[LaunchScreen.storyboard] ...

  7. 关于Dictionary的优化用法

    今天突然想到了解一下Dictionary,于是在博客园上看到了一篇关于用TryGetValue的文章,原来用TryGetValue要比用ContainsKey更快,快一倍.

  8. 黑马方法引用学习 Stream流 函数式接口 Lambda表达式 方法引用

  9. DBUtils C3P0 阿里巴巴德鲁伊连接池工具的下载

  10. C# 委托之把委托从委托链(多播委托)移除

    运用“-”运算符将委托从委托链移除 class HelloWorld { //定义委托类型 delegate void DelegationChain(); static void Main(stri ...