苦力活:构建A股十年基础数据库
2010年4月5日,星期一,上午九点三十分。
车公庙,三十平米的办公室里,四台电脑同时开着。
陆方坐在最靠里的位置,面前三块屏幕,正在写代码。周寻坐在他对面,手里拿着一本翻旧了的《上市公司信息披露指引》,眉头紧锁。陈默挤在角落里的一张折叠桌旁,面前堆着厚厚一摞打印出来的Excel表格,正一行一行地核对数字。
窗外,泰然工业区的喧嚣一如既往——货车的轰鸣,餐馆的油烟,五金店切割金属的尖啸。但这些声音,在这间三十平米的房间里,像是被一层无形的玻璃隔开了。
没有人说话。
只有键盘敲击声,纸张翻动声,偶尔有人叹一口气。
这是“默石量化研究实验室”成立后的第五天。
五天前,他们挂牌时,陈默说目标是“打造一台在长期能稳定赚钱的机器”。周寻说先要“v0.1”。陆方说服务器只能跑一百个策略。
但所有这些,都建立在一个前提上:
有数据。
没有数据,就没有回测。没有回测,就没有策略。没有策略,就没有机器。
而数据,他们现在一分也没有。
不是完全没有——市面上有卖的数据库,但价格贵得离谱,起步价就要几十万。陈默问了一圈,最便宜的也要三十万,还是只有最近三年的数据,不包含财务指标,不包含宏观数据,不包含任何清洗过的因子。
三十万。
账户里只剩下六十三万现金,每个月还要付房租、发工资、还贷款。
陈默做了个决定:
自己做。
从零开始。
---
陆方的第一个任务:写爬虫。
目标:从公开的财经网站上,把A股过去十年的日线数据全部爬下来。
听起来简单,做起来才知道有多恶心。
那些网站的反爬机制五花八门——有的限制IP访问频率,有的用动态加载,有的在数据里掺假,有的直接封IP。陆方写了三天,被反爬机制封了七次。他不得不写一个代理池,每天从网上找几百个免费代理IP,轮着用。
“这些网站,”他一边敲键盘一边嘟囔,“不让爬就算了,还在数据里掺假。我昨天爬下来的平安银行,有一天的收盘价居然是88.88。明显是故意埋的坑。”
陈默站在他身后,看着屏幕上那些代码。
他不完全懂,但他能看懂陆方脸上的表情——不是烦躁,是专注。
那种“我一定要搞定你”的专注。
“能处理吗?”他问。
陆方点头:
“能。但得加一个清洗层。把所有明显异常的数据标记出来,回头人工核对。”
“需要多少人?”
陆方想了想:
“至少两个。专门干这个。”
陈默看了看房间里的人。
小林在研究周寻给的论文,小吴在整理过去的研究笔记,小周在学Python,王涛在调试那两台服务器。赵姐在算账,老刘在联系便宜的云服务商。
没有人闲着。
但也没有人能专门做数据清洗。
陈默沉默了几秒。
然后他说:
“我来。”
陆方抬起头,看着他。
“您?”
“我。”陈默说,“我干过这个。”
他走到那堆打印出来的Excel表格前,坐下来:
“1992年,我刚入市的时候,没有电脑,没有软件。所有的K线图,都是我手画的。每一根K线,开盘、收盘、最高、最低,一个一个从报纸上抄下来,然后用尺子画在坐标纸上。”
他看着陆方:
“现在有Excel了。比那时候强多了。”
陆方看了他几秒,然后点了点头。
没再说别的。
---
周寻的第一个任务:定标准。
爬虫爬下来的数据,乱七八糟。
同一天,不同网站的开盘价可能差几分钱。同一只股票,不同年份的股本可能变过好几次,不复权、前复权、后复权,根本对不上。财务数据更乱——有的公司用旧会计准则,有的用新会计准则;有的报表里“净利润”是归属于母公司的,有的是合并报表的;有的“每股收益”是摊薄的,有的是加权的。
周寻拿着一份自己整理的《数据清洗标准手册》,对着那一堆原始数据,一条一条核对。
“这里,”他指着屏幕,“2005年6月30日,招商银行。三个来源的数据,两个说收盘价是6.52,一个说是6.55。差三分钱。”
陈默凑过去看。
“三分钱,影响大吗?”
周寻摇头:
“单看一天,不大。但如果用来算年化收益,差之毫厘,谬以千里。”
他顿了顿:
“而且,如果三分钱的误差是系统性的,那整个回测结果都会偏。”
陈默沉默了几秒。
然后他问:
“那怎么办?”
周寻想了想:
“找第四个来源。如果还是对不上,就取中位数。然后把这个问题记下来,以后做敏感性分析。”
他看着陈默:
“所有类似的问题,都要记下来。不能假装不存在。”
陈默点头。
他拿起一支笔,在笔记本上写下第一行:
“数据问题清单”
下面,他写:
1. 2005.6.30 招商银行 收盘价 三个来源不一致 (6.52/6.55) 处理:取中位数6.53
2. ……
这本笔记本,后来成了“默石数据清洗史”的第一页。
整整三年后,他们才真正拥有一套干净的、可用的十年数据库。
而这本笔记本,已经写满了三百多页。
---
下午三点,陈默亲自开始核对数据。
陆方给他分配了第一批任务:2005年到2007年,上证50成分股的日线数据。
一共50只股票,三年,大约750个交易日。每只股票每天有开盘、收盘、最高、最低、成交量、成交额——六个字段。
总共225,000个数据点。
陈默坐在那张折叠桌前,面前摊着三份打印出来的表格——分别来自三个不同的数据源。
他的任务:一行一行比对,把不一致的地方标出来。
第一行,招商银行,2005年1月4日。
来源A:开盘8.52,收盘8.55,最高8.60,最低8.48
来源B:开盘8.52,收盘8.55,最高8.60,最低8.48
来源C:开盘8.51,收盘8.55,最高8.60,最低8.48
开盘价差一分钱。
陈默拿起红笔,在来源C那一列画了个圈。
然后他翻开笔记本,写下:
2005.1.4 招商银行 开盘 来源C=8.51 其他=8.52 差异0.01 暂以多数为准
第二行,2005年1月5日。
三份来源完全一致。
第三行,2005年1月6日。
来源A和C一致,来源B的成交量少了一个零。
陈默愣了一下。
他仔细看了看——来源B的成交量是“1,234,500”,来源A和C是“12,345,000”。差十倍。
他拿起红笔,在来源B那一行画了个大圈。
然后他站起来,走到陆方身后。
“这个,”他指着屏幕,“你看。”
陆方看了看,骂了一句脏话。
“这些网站,”他说,“有时候为了省空间,会把成交量的单位搞混。有的用‘手’,有的用‘股’,有的直接用省略写法,万、十万、百万混着来。”
他看着陈默:
“这种问题,爬虫处理不了。只能人工核对。”
陈默沉默了几秒。
然后他走回座位,继续核对。
一个下午,他核对了3000多个数据点。
发现了47处不一致的地方。
每一处,他都用红笔标出来,记在那本笔记本上。
下班时,他的手指因为一直握着笔,已经有点发僵。
他站起来,活动了一下手腕。
周寻走过来,看着他。
“陈总,”他说,“您今天核对了多少?”
“三千多个。”
周寻点了点头,没有说“辛苦了”,也没有说“这活不该您干”。
他只是说:
“明天还有两万多个。”
陈默愣了一下,然后笑了。
“好。”他说,“明天继续。”
---
傍晚六点,办公室里的人陆续走了。
赵姐最后一个离开,走之前把电热水壶的电源拔了,把窗户关好。
陈默还坐在那张折叠桌前。
桌上摊着那三份表格,红笔圈出来的地方密密麻麻。
沈清如推门进来。
她下午去处理别的事了,刚回来。
她看着陈默,看着他面前那堆表格,看着他手指上沾的红墨水印迹。
“累吗?”她问。
陈默想了想:
“不累。”
沈清如看着他。
“真的。”陈默说,“比看K线图轻松。”
他站起来,走到窗前。
窗外,车公庙的夜色已经降临。楼下的小餐馆亮起灯,几个人围在门口吃烧烤。远处的深南大道,车流如织,灯火通明。
“你知道吗,”他说,“我今天想通了一件事。”
沈清如走到他身边。
“什么事?”
陈默指着窗外那些灯火:
“那些数据,以前对我来说,就是数字。看一眼,涨了,跌了,过了。”
他顿了顿:
“但今天,当我一个一个去核对那些数字,去看那些不一致的地方,去想那些数据是怎么来的、怎么被记录的、怎么被处理的——我发现,那些数字,开始变得有生命了。”
沈清如没有说话。
“比如这个,”陈默翻开笔记本,指着其中一行,“2006年3月15日,某只股票,成交量的单位错了。如果不是今天发现,以后用它来算换手率,整个因子都会偏。”
他合上笔记本:
“以前,我以为量化就是跑代码,就是数学公式。但今天我才知道,最底层的,是这些最脏、最累、最无聊的活。”
他看着沈清如:
“如果连这些活都不愿意干,那上面建的所有东西,都是空中楼阁。”
沈清如看着他,很久。
然后她轻声说:
“你变了。”
陈默愣了一下。
“哪里变了?”
“以前,”沈清如说,“你只看结果。股价涨了就是好,跌了就是坏。决策对了就高兴,错了就难受。”
她顿了顿:
“但现在,你在看过程。看那些最细的、最不起眼的过程。”
陈默沉默了几秒。
然后他说:
“可能是被2008年教训的。”
他转过身,看着窗外:
“以前我以为,投资的关键,是做出正确的判断。后来我发现,正确的判断,也需要建立在正确的基础上。如果基础是歪的,再正确的判断,也会被带歪。”
沈清如轻轻握住他的手。
两人站在窗前,看着车公庙的夜色。
远处,深南大道上的车流还在流动。
近处,楼下的小餐馆里,有人正在吃烧烤,有人正在喝酒,有人正在大声聊天。
这就是生活。
这就是那些数据背后的、真实的生活。
陈默忽然想起周寻说过的一句话:
“垃圾进,垃圾出。”
最简单的道理,最容易被忽视。
而今天,他们终于开始,亲手把那些垃圾,一点一点清理出去。
---
深夜十一点,陈默最后一个离开办公室。
走之前,他在那块白板上写下几行字:
“2005-2007年数据清洗进度:
上证50成分股:3,000/225,000 (1.3%)
发现不一致数据点:47个
预计完成时间:未知”
他看着那行“未知”,笑了笑。
未知就未知吧。
反正他们有的是时间。
反正他们现在,什么都没有,只有时间。
他关掉灯,锁上门,走下楼梯。
车公庙的深夜,依然热闹。小餐馆还在营业,路边还有人在吃烧烤,远处偶尔传来货车的轰鸣。
他站在路边,等出租车。
抬头看了看天空。
深圳的夜空,看不见星星。
但没关系。
他知道,明天太阳还会升起。
他还要继续核对那些数据。
225,000个。
一个一个。
http://www.xvipxs.net/204_204872/71351184.html
请记住本书首发域名:www.xvipxs.net。VIP中文手机版阅读网址:m.xvipxs.net