专栏首页王的机器『金融数据结构』「1. 数据类型」

『金融数据结构』「1. 数据类型」

声明:这个 AFML 系列终于开始硬核将机器学习和量化投资结合在一起了,而且 Python 系列也派上用场了。

本系列不会写超级长文,一是内容较难不好消化,而是我现在也接了些量化投资、机器学习、Python 类的广告,太长时间发一篇容易掉粉

本系列在后期会和【量化投资与机器学习】合作,因为一个人写确实困难。这篇的基本面数据部分内容也是受 【量化投资与机器学习】老铁的笔记启发的。

本系列用的所有数据来自万矿和 Quantopian,一些高频交易的数据在用到时会注明。

这一系列能写完我会觉得很有成就感,需要你们激励着我!

LET'S GO!!!

1

介绍

数据越原始其含有的价值越高。被处理过的数据虽然用起来很方便,但当你使用时别人很可能已经使用过了。这句话也适用于金融数据 (financial data)。金融数据主要可分为四类,见下表总结。

接下来我们详细讨论它们的特征以及应用。

2

基本面数据

基本面数据 (Fundamental Data) 通常是会计数据 (accounting data),包括资产 (assets)、负债 (liabilities)、销量 (sales) 和盈利 (earnings) 等等,来源于按季度发布的财务报告。

下图展示了苹果第二季度的财务报表中的部分基本面数据(销量、销售成本、运营费用等等)。

在使用基本面数据时需注意数据发布日期 (release date) 和季度报告截止日期 (quarter-end reporting period) 不一样!前者一般晚于后者 6 周,有时个股的发布日期各不相同。

以茅台 (600519.SH) 举例来看一段万矿 (WindQuant) 的代码:

_, date = w.wsd( "600519.SH",
                 "stm_issuingdate", 
                 "2018-01-01", "2019-03-31",
                 "Period=Q;Days=Alldays;Fill=Previous", 
                 usedf=True )
WTable(data = date).plot()

这里 stm_issuingdate 代表「定期报告披露日期」。关于代码里的 wsd 的相关知识,请参考〖Pandas 上〗一贴。

对茅台 2018 年第一季度 (Q2) 来说,发布日期 (2018-08-02) 才是最重要的日期,因为只有发布之后大家才知道基本面数据值 (比如每股收益 EPS),用报告截止日期 (2018-06-30) 就会引进前视偏差 (look-ahead bias),因此在 2018-06-30 那天数据没有发布给大众,大众根本不知道 Q2 的 EPS 是多少。

万矿是取每个季度最后一天作为报告期,2018 年的报告期设置分别为

  • 一季报:2018-03-31
  • 半年报:2018-06-30
  • 三季报:2018-09-30
  • 年报:2018-12-31

下图展示了茅台 2018 年到 2019 年 Q1 的数据发布日期和报告截止日期。

用万矿来查看茅台 2018-06-30 的 EPS 值。

_, df = w.wsd( "600519.SH",
               "eps_basic_is", 
               "2018-01-01", "2019-03-31",
               "Days=Alldays;rptType=1", 
               usedf=True )
WTable(data = df).plot()

这里 eps_basic_is 代表「基本每股收益」。

我们可以看到 2018-06-30 对应 eps_basic_is 的值为 12.55。由上面日期对比图可知,这个 12.55 的 EPS 应该在 2019-08-02 才发布。因此推断出 2018-06-30 这天的12.55 是从 2019-08-02 那天回填 (backfill) 得到的。

知识点

公司披露年报或季报经常会在第一次披露之后发布多个修订版本,对原本缺失的一些数据进行回填。

继续深挖验证我们的推断。用万矿来查看 2018-08-02 (Q2 数据的发布日) 的 EPS 值。这时 wsd 函数中用参数 fa_eps_basic 而不是用 eps_basic_is,fa_eps_basic 代表「基本每股收益_PIT」。用万矿里的 API 选出 fa_eps_basic 即可,操作非常简单如下屏所示。

上图操作完成之后,查看茅台 2018-06-30 的 EPS_PIT 值 (用的 fa_eps_basic) 的代码自动生成出来。

_, df = w.wsd( "600519.SH",
               "fa_eps_basic", 
               "2018-01-01", "2019-03-31",
               "Days=Alldays;rptType=1", 
               usedf=True )
WTable(data = df).plot()

PIT 全称是 point-in-time,没有找到很好的中文翻译,就理解成「数据发布的时点」吧。

从下图发现 2018-08-02 的 EPS 值为 12.55,可以确定 2018-06-30 的 EPS 值是回填得来的。

此外,我们还发现 12.55 对应的起始日 2018-08-02终止日 2018-10-28,它们不正是 Q2 的发布日期Q3 的发布日期前一天吗?下图就是2018 Q2 到 Q3 的 PIT 数据。

由于 12.55 是 Q2 截止日 2018-06-30 时 EPS 的值,但是在 Q2 发布日 2018-08-02 才公布于众,直到 2018-10-28。后一天 2018-10-29 是Q3截止日 2018-09-30 时 EPS 的发布日,那么 EPS 也会被更新。

下图给出了一年的 PIT 数据。

使用 PIT 数据可以避免「前视偏差」,自己收集 PIT 的数据太过繁琐,而购买提供 PIT 的数据商又太过昂贵。万矿做得真心不错,免费提供 PIT 数据。


国内有万矿,国外有 Quantopian,下面截屏蓝色高亮那部分说的就是 Quantopian 也考虑了 PIT 而消除了「前视偏差」。

在 Quantopian 用代码看看 Facebook 的基本面数据发布日期 (file_date) 和报告截止日期 (period_ending_date)。关于代码里的 Pipeline 相关知识,请参考〖张量 101〗一贴。

DataFrame 的前五行是 2018 年 1 月 2 日到 8 日的数据要看 2017-09-30 (Q3) 的数据,而其发布日是 2017-11-02。

DataFrame 的后五行意思是 2018 年 12 月 24 日到 31 日的数据要看 2018-09-30 (Q3) 的数据,而其发布日是 2018-10-31。

总结:基本面数据频率低,监管严,易获得,价值可被挖掘的差不多,通常是把基本面数据和其它类数据一起使用。

3

市场数据

市场数据 (Market Data) 包含交易所有类型产品时收集到的数据,包括现货价格 (spot price)、期货价格 (futures price)、利率 (interest rate)、汇率 (exchange rate)、波动率 (volatility)、成交量 (volume) 等等。

在交易中,市场数据以限价定单簿 (limitorder book, LOB) 的形式呈现。每个市场参与者都可从中看到订单信息 (order information)。

以阿里巴巴股票 (BABA) 为例的 LOB 如下图所示。

在 LOB 中,卖家看 Bid,买家看 Ask。LOB 里面有四个重要参数,合称为最佳买卖报价 (Best Bid and Offer, BBO),分别是

  • 买价 (bid price):卖家可以卖到的最高价 (160 美元)
  • 买量 (bid quantity):卖家可以卖的数量 (500 股)
  • 卖价 (ask price):买家可以买到的最低价 (161 美元)
  • 卖量 (ask quantity):买家可以买的数量 (600 股)

在每个时点LOB可以显示三种不同层次的信息。

L1 信息

如果只看 BABA 的最佳买卖价 (Best Bid and Offer, BBO),那么它是一维数据 (price),通常称为 Level 1 (L1) 信息。

卖家可以从市场中以 160 美元卖出 500 股,买家可以从市场中以 161 美元买进 600 股。

L2 信息

如果还看 BABA 的非最佳买卖价 (Not Best Bid and Offer, NBBO),那么它是二维数据 (price+depth),通常称为 Level 2 (L2) 信息。

卖家可以从市场中以 160 美元卖出 500 股,吃完最佳买价 (hitting the bid) 之后,卖家可以继续从市场中以 159 美元卖出 550 股…

买家可以从市场中以 161 美元买进 600 股,吃完最佳卖价(lifting the offer) 之后,买家可以继续从市场中以 162 美元买进 800 股…

L3 信息

如果在一个价位上,还想区分不同人下单的量 (比如 600 股有 200 是我下的,400 是小明下的,我比小明先下单),那么它是三维数据(price+depth+size),通常称为 Level 3 (L3) 信息。

通常数据商提供的是像金融信息交换协议 (Financial Information eXchange, FIX) 类似的原始数据,可以搭建出每个时点的交易账簿 (order book),更精确点的描述是限价定单簿 (limit order book, LOB)。

CME Globex 是世界上第一个期货电子交易系统,下图是 Globex 里 FIX 的数据结构说明。

从上面表格可看出:

  • 第 1 行显示价格的层位(为构建 L2 信息)
  • 第 2 行显示信息发送时间
  • 第 3-4 行显示买价和买量
  • 第 5-6 行显示卖价和卖量
  • 第 7 行显示数据更新状态,0 代表插入新信息,1 代表更新现有信息;2 代表删除老信息
  • 第 8 行显示某层价位的订单数 (为构建 L3 信息)

等等。。。

用第 1 到 9 行的信息可以从 FIX 表格重建 L3 的 LOB。

  • side S - 分买入 (bid) 和卖出 (ask)
  • class – 包含价格 (price) 和成交量 (size)
  • price level M - LOB 的深度

伪代码如下:

而第 7 行和 10 到 15 行用来做交易匹配 (trade matching) 的。

总结:基本面数据相比,市场数据更规范,而且频率更高,数据量更大,处理起来也更困难,但是价值更大。

4

分析数据

类比金融产品的原生资产和衍生品的关系,分析数据 (Analytics Data) 是原始数据的衍生品,即由原始数据加工得来的。原始数据可以是基本面数据和市场数据,甚至还可以是下节讨论的另类数据。

我们可用

  • 销量、成本、运营费用等「基本面数据」来评估一个公司的盈利能力和运营质量,并推荐买卖其股票
  • 限价定单簿和交易信息等「市场数据」来预测冰山单 (iceberg order) 的大小和概率
  • 新闻舆情、财报公告、卫星图像等「另类数据」来做情感分析 (sentiment analysis) 和经营预测

下图总结各类原始数据和对应的分析数据。

使用「分析数据」有利有弊

  • 优点是特征和信号已经从原始数据中提取出来,使用起来方便
  • 缺点是价格昂贵,而且处理方法不透明 (opaque) 也可能存有偏差 (bias)

5

另类数据

另类数据 (Alternative Data) 包括传统数据之外的新的数据,主要成分如下图。

个人数据

个人数据 (Individual Data) 是由个人网上行为产生的,它还可细分为

  • 社交网络数据 (social media data): Twitter, LinkedIn, 微信
  • 新闻舆论数据 (news & reviews data): 新闻、产品舆论
  • 网页搜索数据 (web search data): 谷歌搜索、百度搜索、邮件

案例:

  • iSentium 提供交易股票时用到的 Twitter 上的情绪数据指标
  • RavenPack 提供交易债券、外汇和股票时用到的新闻情绪数据指标

商业数据

商业数据 (Business Process Data) 是由商业流程产生的,它还可细分为

  • 交易数据 (transcation data): 主要是消费者交易数据 (Square,Intuit, Xero 等)
  • 公司数据 (corporate data): 主要是行业数据 (AROQ, Edmunds, SNL Financial, Smith Travel 等)
  • 政府机构数据 (government agency data): 国际级别(IMF, WTO, World Bank),国家级别(美联储, 人民央行)

案例

  • Eagle Alpha 提供交易个股时用到的用户电子邮件收据。

传感数据

传感数据 (Sensor Data) 是由手机、无人机、卫星上的传感器产生的,它还可细分为

  • 卫星图像数据 (satellites images data): 卫星、无人机
  • 地理定位数据 (geolocation data): GPS、手机 APP
  • 天气数据 (weather data)

案例:

  • Advan Research 提供交易个股时用手机记录的地理位置数据 (根据人流量预测零售)
  • RSMetrics 提供交易个股时用无人机拍的停车场和仓库图像数据 (根据车位占满率预测员工)

使用「另类数据」有利有弊

  • 优点是没被处理过,也没有为其他使用者提供,因此有很高的价值等待发掘,深度学习里的「计算机视觉」和「自然语言处理」的技术可以用来处理图像和文本数据
  • 缺点是「获取昂贵」和「隐私忧患」

6

总结

金融市场数据可分四类,基本面数据、交易数据、分析数据和另类数据。

前三类属于结构性数据 (structured data),即可以用二维数据表 (excel, DataFrame 等) 储存的;而最后的另类数据属于非结构性数据(unstructured data),在使用前通常要转换成结构性数据。

  • 处理「基本面数据」最容易 (人人可做),但剩余可发掘的价值也不太高了。
  • 处理「另类数据」最困难 (鲜有人做),一旦你做了对你的价值是唯一的。

有价值的东西做起来从来不容易,如果太容易,大概率没什么价值。有人开玩笑说,如果一套数据集让数据科学家处理起来时很头疼,这套数据集很可能价值很高。

下帖讲如何对数据采样 (bar sampling)。Stay Tuned!

本文分享自微信公众号 - 王的机器(MeanMachine1031),作者:王圣元

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 『金融数据结构』「3. 基于事件采样」

    在上贴〖从 Tick 到 Bar〗里,我们已经会从「异质」的 tick 数据采样出「同质」的 bar 数据。当数据太多时,传统 (非深度) 机器学习算法的表现会...

    用户5753894
  • 盘一盘 Python 系列 9 - Scikit-Plot

    当机器学习工具 Scikit-Learn 遇上了可视化工具 Matplotlib,就衍生出 Scikit-Plot。

    用户5753894
  • 金融工程高度概览

    整个流程图分为 6 大模块,除了开始的“数据参数”模块,后 5 个模块都有相对应的函数。

    用户5753894
  • 重磅来袭 | AFML系列开启,我们相信会成为经典~

    AFML系列 终于开始硬核将机器学习和量化投资结合在一起了,而且 Python 系列也派上用场了。

    量化投资与机器学习微信公众号
  • 2018年大数据趋势

    笔记本电脑、智能手机、传感器,都为物联网带来了大量数据。这是获得竞争优势(或者保持竞争力)的重大机遇,前提是企业足够灵活,可以管理好数据并把数据变成有用的商业智...

    华章科技
  • 如何区分数据科学家、数据工程师、统计学家和软件工程师

    谈到数据科学家、数据工程师、软件工程师和统计学家之间的区别,这可能会令人感到困惑。虽然都与数据有关,但他们的工作内容却存在着根本性差异。

    CDA数据分析师
  • 如何区分数据科学家、数据工程师、统计学家和软件工程师

    作者 Ronald van Loon 编译 Mika 本文为 CDA 数据分析师原创作品,转载需授权 观看更多国外公开课,点击"阅读原文" 谈到数据科学家、...

    CDA数据分析师
  • 想成为排名第一的AI公司?建立一支“数据军团”,雇佣这些人吧

    人工智能不仅有光明的前景,而且走在了商业的前沿。人工智能显然是机器人、电子商务、分析和云计算管理的一个构成因素。即使是人才挑选、定制化市场营销和许多其他业务,现...

    大数据文摘
  • 企业中的大数据安全问题

    大数据有望大大改善业务运营,并允许组织为每个客户提供量身定制的服务。通过社交媒体和连接的传感器生成的信息量激增,包含了可以转化为有形商业利益的隐藏洞察力模式。这...

    大数据杂货铺
  • Docker 容器的数据管理

    docker的理念之一就是将应用和运行的环境打包,因此docker容器的生存周期通常都是与在容器中运行的程序相同的,而我们对数据的要求是持久化,docker容器...

    程序员果果

扫码关注云+社区

领取腾讯云代金券