【奕维量化第1期】量化交易的数据平台是如何搭建的

发布于: 雪球转发:0回复:2喜欢:1

数据君停更了一个多月,并不是“群主死了,可以抄底”,而是在忙着修改数据平台的基础架构。

所谓工欲善其事,必先利其器,无论你是设计指标,还是开发量化交易程序,你都离不开数据。而一套数据平台的开发难度,远远超出绝大部分人的想象。

这篇文章简单科普下搭建数据平台面临的基础架构问题。

1. 可交易股票列表

首先,你需要一份可以交易的股票列表,光是这个功能,要想做的完美,已经可以难倒一大批公司。为啥呢?

第一,纳斯达克官网和纽交所的官网数据都不完整,因为一只股票可以在其中一个交易所delist,而在另一个交易所还存在,所以需要merge。

第二,同一个股票,在不同平台的symbol展示可能会略有差异。比如

ABC$A

ABCPRA

ABCpA

ABC-A

ABC-PA

ABC.PA

ABC.PRA

ABC-PRA

ABC PRA

ABC'

...

你拿到的做空数据、基金持仓、期权等数据,包括你爬取的财经网站、购买的数据服务,都可能使用的是不同的symbol系统,你要想办法能对应起来,这个问题,目前数据君还没有发现任何一家厂商、任何一个量化交易员公开提到过。

2. Symbol重命名

股票名,我们一般称之为symbol(或者Ticker),比如AAPL就是一个symbol,symbol是会发生重命名的,比如ab会重命名为cd,所以通过symbol来追踪会有问题。比如,你将做空数据或者期权数据保存为ab.txt,第2天symbol变成了cd,你又保存为cd.txt,这样就没法跟踪到老数据。

3. Symbol重用

symbol是可以重用的。比如有家公司symbol为ab,你将做空数据或者期权数据保存为ab.txt,后来它退市了,ab代码就可以被其他公司使用了,假设又一家新公司上市使用了ab,这样你保存新数据时,如果还是使用ab.txt,那么就可能覆盖以前珍贵的老数据,以后使用的时候可能会读取到上一家公司的脏数据,脏数据的问题目前几乎存在于所有的公开网站,甚至包括很多券商。

4. ID

你可能会想到使用某个id来标识股票,而不是symbol,这样无论symbol怎么变,只要id不变,就能对应上。遗憾的是,当重命名,拆股,并购发生时,CUSIP,ISIN,SEDOL,FIGI,PermID等流行的ID都可能会发生改变,所以你需要自己建一个永远不变的ID,交易所,券商,彭博,路透等数据库都是这么干的。

5. 新股

你从交易所拿到的都是symbol列表,现在你需要自己建ID,假设你的记录文件是这样的:

id, symbol

1000, ab

1001, cd

...

现在你发现今天抓取到的股票列表里多了一个symbol:ab,有两种可能:

第一,id为1000的公司已经退市,这是一家新上市的公司,他重用了ab这个编码,应该给他创建一个新id。

第二,id为1000的公司已经退市,所以id为1001的公司cd可以重名为ab,那应该还是使用老的id - 1001,这样你才能把老数据对应上。

你需要想办法区分是哪种情况。

6. 上市日期

你需要记录下每只新股的上市日期,因为你用雅虎等网站去下载股票时,都是传入symbol,而如问题2345所述,目前公开的数据源,没有能完美解决symbol重用的问题,所以很多数据商下载的K线有可能是包含了上一家公司的脏数据,你需要用上市日期来过滤掉以前的脏数据。

还有一种情况,比如FVCB这个股,他2018年上市,你在富途这种交易软件上看到的也是2018年开始K线,但其实你去金融网站爬数据能爬到甚至2013年的k线数据,但它不是symbol重用错误,而是之前的k线数据是otc市场的。

7. 发行股数

只有拿到股票的发行股数才能用做空股数去计算做空比例。所以你需要一份发行股数数据(或者说公司市值和ETF净值)。

对于公司,不能使用财报文件里的股数,因为财报是季度更新的,而公司在两次财报之间,完全可以增发或拆股,所以你要能追踪到每天的公司股数

对于ETF,股数是每天在官网更新的,也可以自己去挖掘各种数据网站的接口,不过大部分都不准。

8. 拆股

拆股发生时,k线是要调整的,比如苹果发生1拆4,股价变成了原来的4分之1,你在富途等软件中看到当天的k线都是连续的,那是因为将之前的价格除以了4,股数乘以了4,这个就叫调整。

你从雅虎等网站那里下载到的都是调整后的k线,但是它不会告诉你发生了调整,所以你需要想办法自己去记录所有股票的拆股信息(纳斯达克官网、雅虎的、彭博的split数据是不全的噢~你要自己想办法)。

为什么这个很重要呢,比如,ARK持仓某只股票1000股,第2天该股发生了1拆2,所以第2天ARK持有的该股股数变成了2000股,但是其实ARK对该股没有任何操作,你如果直接计算会以为他买了1000股,是错误的,你应该对之前的持股数1000股进行调整变到2000股,这样才能看出持股的变化。

又比如,一只股票某期权合约的开仓数是1000,第2天股价1拆2,则股数翻倍,期权开仓数也应该翻倍,第2天收盘时,这只合约的开仓数据是2500,请问,新增了开仓多少?

9. 期权

市场上每天大概有100万份期权合约,(一个合约就是:symbol+到期时间+行权价),光是SPY就有1万份合约,每份合约都有一个k线数据,所以这个数据量非常大,数据商只会提供原始数据。

如前所述,你如果要分析OI和成交量,你就需要自己做数据调整。

数据商提供的期权数据都是以symbol标识的,我们前面提到过symbol可以重命名和重用,所以你要根据symbol和日期来定位到对应的id。

10. 基金持仓数据

ETF的持仓文件报告是类似这样记录的:

symbol1, cusip1, 持仓数

symbol2, cusip2, 持仓数

symbol3, cusip3, 持仓数

。。。

而对冲基金持仓报告(13f文件)中不包含symbol,只有cusip

公司名1, cusip1, 持仓数

公司名2, cusip2, 持仓数

公司名3, cusip3, 持仓数

可以看到,这些持仓报告文件刻意地提供cusip编号,就是为了担心使用symbol会造成误解(Symbol可以重命名和重用)。

cusip编号是用于标识股票的,由标普公司和美国银行家协会发行,但它并没有解决问题,因为我们前面提到了,重命名、拆股、并购发生时,cusip都可能发生改变,甚至企业什么特殊事件都没有,就能申请一个新的cusip。

所以你要想办法能将你自己的id和cusip对应上,这样cusip改变了,你也能将前一期和这一期的持仓股票对应上。

光是整理symbol和cusip的映射功能,就有专门的数据公司做了,收费300刀左右一年。

11. 日历

你需要一个能判断是否交易日的数据,只有在交易日你的量化程序才运行。

你还需要一份财报日历数据:比如,你有个策略是专门针对近期即将发行或已经发行财报的股票。

12. 板块

你需要一份股票所属行业和板块的数据。比如,你希望能监控到板块资金的流向。

13. 股票类型

你需要一份股票类型数据,比如普通股、ETF、封闭式基金、MLP等。比如你的策略是只针对普通股。

14. 数据错误清洗

不要以为SEC(美国证监会)就不会出错,SEC有过财报文件格式错误、压缩错误。SEC早期的数据格式很不规范,最近几年好多了。

不要以为交易所就不会出错,交易所的k线、市值、做空数据都有不少错误。

不要以为彭博,WRDS,CSRP这些机构,数据就不会出错。它们会经常修正自己的股票id,而且都有CUSIP不全或者错误的情况。

所以这些数据源的数据,不是不能用,但是要知道里面有哪些坑,哪些是可以忍受的错误,并且通过奇技淫巧来修正的。


以上,是一些最最基础的数据平台搭建的技术问题。数据君这一个月每天忙到凌晨2、3点,已经找到了大部分问题的解决方法,虽然仍然不完美,但是有底气说这套数据整合系统已经比一些商业机构都要好得多。


各位先不要急着说:“不用这么复杂,不需要什么期权阿、做空、持仓、板块阿这些,我也不用多完整的股票列表,只要能拿到90%的股票,用K线数据就够了。”

你的这种想法,我几年前也有过,然而避不开K线脏数据问题。目前绝大部分金融数据网站,都没有能完美解决symbol重用导致的脏数据。彭博和路透我没有用过,可能稍微好点,但是指望小散买得起吗?

但脏数据还不是最主要的问题,少量的脏数据错误可以忍受,第2个问题才是老大难 - 怎么还原历史数据?请期待下篇文章。


最后,近期各种美股群都有不少收费的、开班的,其中有不少骗子。

在此声明,奕维目前没有任何的收费群、课程班、万能指标,任何打着奕维招牌来推广这些项目的,一律是骗子。

奕维有一个投资基础知识网站,course.yiwiz.com,上面内容皆为免费,欢迎反馈。而ARK的持仓数据更新,仍然可以在奕维官网上yiwiz.com查看,一般在美西时间晚上9点以后更新。

公众号以后不会再发一些其他媒体都能看到的大众新闻,而是专注介绍平台的数据功能,策略开发中遇到的各类问题。

全部讨论

奕维科技2021-12-12 10:22

WRDS,CSRP和路透,他们20多年成百上千的人都解决不了的问题都被你都解决,你应该成立一个公司然后发布美股数据:我能完美解决问题symbol重用、split、日线和盘前盘后数据。相信用不了多久全球的对冲基金都是你的客户

apx1231232021-12-11 14:32

看看数据仓库的书,这些问题都已经有很成熟的方案解决了。处理多源异构数据,我有很多经验,私信我,可以聊聊合作