青铜时代:中本聪之惑 袁浩瀚,Quant, Geek, Actuary, Photographer * 本文不代表我所任职机构的任何观点 ** 本文不提供任何交易建议 *** 本文在技术层面上完全属实 序 我最后一次的登录上了那些在云端服务器,把在运行的进程一个个 kill 掉,再把交易的 log 一个个备份到本地,最后我用一个 rm -rf 的命令删除了残留的所有文件。然后我拨通了龙大的电话,说:F.I.A.S.C.O (大逃亡)。至此,一场旅途结束了。 壹 4 月的伯克利天气还没有转热的迹象,在酒吧里面,学生们依旧 hoodies 为主。当时我刚刚毕业,还没有完全离开学校,在给 Stochastic Calculus 这门课做 TA。还逗留在伯克利的几位同学约着来 Shattuck Ave 上面的小酒馆打桌球,聊天。之中 Kevin 是个很有个性的同学,他很少来上课,几乎不写 group homework,每次在家找到他也是埋在啤酒罐中。那天他反常的很亢奋,跟我们说他之前花一万美金买的一千个比特币最近让他已经赚了 20 倍了,毕业第一年是不是工作无所谓了。Kevin 大谈比特币的通缩本质对于普通人战胜通胀的意义,以及自己坚定要持有到 500 美金 / 每个比特币再抛售的信念。 当时有一件事情吸引了我,就是比特币在若干不同的交易所交易,而这些交易所都是民间爱好者自己搭建起来的网站,我觉得采集这些价格数据会很有意思,于是准备回家写一些爬虫抓数据。当时比特币对于我完全是技术上的吸引,我当时刚刚读完书,笃信市场有效性在绝大部分时候存在,加上手上闲余的钱也不少,对金钱感觉比较淡薄。 后来一周悟空来找我下载美国股票的高频数据。由于我属于商学院,可以免费弄到这些数据。悟空是一个很有意思的人,他在伯克利统计系做博士研究,但是一心只爱做交易,尤其是高频交易。从来没人给他钱,他也到处找数据,月复一月每个周末自己 clean data,期望可以做出一个 sharpe ratio 高的策略来带着去投奔某个对冲基金,或者自营交易公司。 那天拷贝数据后,我跟悟空聊到了比特币,我说股票市场竞争太激烈,你不如看看比特币,也许有些好玩的,我这里还有些比特币数据,自己抓的,你看看吧。然后我就继续给学生改作业去了。 过了好几天我都不记得此事了,悟空打电话给我,非常亢奋的说,这不 make sense,这东西交易所之间价差太大了,为什么没有人套利。我说那肯定有隐藏的限制你不知道的,不然市场的割裂(market segmentation)不会那么大。 于是我们两个人开始研究具体如何套利,或者说,如何搬砖。很快我们发现了几个核心的限制: 1. 大部分的交易所因为法律问题关闭了注册; 2. 比特币的转账链(两个交易所之间)需要 5 到 60 分钟(这个耗时跟比特币的原理有关)——这段时间的价格波动足以消磨掉大部分的利润; 3. 当时最大的价差在中美交易所之间,但是人民币管制,不容易形成回复(美元 ->比特币 ->人民币 ->美元 ->...) 我们当时想出了一系列对策: 1. 争取找到可以注册的交易所,当时比特币交易所多入牛毛,总有继续让人注册的 2. 如果交易所之间价差够大,就不怕这 5-60 分钟的波动了——大概率我们会有盈利 3. 有很多办法可以找到换汇渠道,这一点应该有希望解决 熟悉后,我说,咱们去实际交易一笔吧,看看到底有哪些问题。 贰 当时找不到可以直接美元买入的网站,但是人民币有很多交易所,最大的是比特币中国(btcchina)。我们搜索了很久,发现了一个网站叫做 Local BTC,大概思路就是你可以预定比特币,然后形成潜在交易后,网站帮你冻结卖家一部分比特币,等你转账后,这部分比特币就归你了。相当于 Local BTC 承担了一个支付宝的功能。 比较再三,我们选了一个埃及的卖家,准备开始我们的第一单。当时两个人很怂,特别怕被骗,于是安排一个人留在家里跟卖家 Skype,忽悠住卖家,一个人跑去转账。于是我就跑出来去银行给卖家转账。这样可以卖家打款后第一时间我们在中国地交易所上卖掉。 第一笔交易我们买了 0.94 比特币,这数字太难忘了。当我走出银行打电话给悟空说已经交款时瞬间有种天桥下卖马克卖英镑的外汇贩子的即视感。 第一单最后赚了 30%,这让我高兴得中饭加了个鸡腿。当时我们就想在美国哪里可以买到大量的比特币。Local BTC 上面都是零售商,数量太小,而美国最大的几个交易所,比如 Mt. Gox 都关闭了注册。这时候我们发现加拿大的交易所 Virt Ex 有可能注册,但是要注册公司,于是我们就联系加拿大的朋友办理注册公司的有关事项。 还在我们热火朝天准备去多伦多开公司时,我们发现国内的比特币玩家用已经在疯狂地挤压现有的利润空间。当时两地的比特币价差长期维持在 30%-50%,于是很多国内有美国交易所账户的比特币玩家,大量买入比特币,在中国卖掉后在淘宝用 8:1 的汇率换回美金(当时中美汇率已经是 6.2X 了),继续套利,这让两边价差迅速缩减。我们感觉等不到我们办好加拿大账户利润空间就不会存在了。 叁 这时候我的爬虫已经收集了接近一个月的数据了,悟空仔细分析了一下,发现人民币的几个交易所:BTC China、火币网、Okcoin 之间经常也有不小的价差,而且三个开户都很方便。同时国内的交易所率先开始提供借入比特币的功能,这让悟空开始设想是否可以就做人民币交易所之间的套利。 那么是直接在价格低的交易所买入,然后直接转账去价格高的交易所,再卖出吗?这看起来很简单,但是同样你需要承受那个 5-60 分钟的转账价格波动,因为你没有对冲。 这时候悟空想出了全新的套利方式,有一个例子来说就是: 一开始你左右手各有一个苹果,各有 10 元,此时两边的苹果价格都是 10 元 然后左右手的苹果价格变化了,左手的变成了 8 元,而右手的变成了 12 元 你觉得这个价格波动已经足够大 这时候你就可以在左手买入苹果,右手卖出苹果 这样你左手有两个苹果,2 元现金,右手没有苹果,22 元现金 你的苹果数量一定,但是你的现金多了 4 元。交易还没有结束 那怎么继续交易呢,等左右手价格关系逆转,比如左手变成了 11 元,右手变成了 10 元,就可以往回搬砖: 左手卖出两个苹果中的一个,剩一个苹果,现金 13 元,右手买入一个苹果,剩一个苹果,现金 12 元 现在苹果分配归零到原点,但是现金多了 5 元,你可以继续如此反复搬砖。 那么这两个苹果的价值变化呢?虽然我们还是有两个苹果,但是苹果可能贬值了啊。这就要用到国内比特币交易所创新的“融资融券”功能了: 只要我们拆解一定数量的比特币,那么就可以没有风险的做这个交易了,因为苹果本身的价值已经无关。 可是最核心的问题是,有时候两个交易所价格不会真的逆转,比如 BTC China 长期比火币网价格高,这时候怎么办?这时候你要算出两边价差的平均水平了,在价差大于平均水平时候搬苹果到一边,在价差小于平均水平时搬回来。搬过去的过程是赚钱的,但是搬回来有可能是亏钱的,总体还是盈利。如下图: 假设两个交易所的差价均值在 100,但是稳定的震荡于这个均值附近,你就可以在离群点(outliers)做对应的正反向搬砖了。这时,从单笔交易来看可能是亏损,但是从一个交易回路来看,统计上显著盈利。 肆 到了这一步,这个交易已经不是一个纯套利了,而是一个统计套利——我们赌两个市场的价差稳定在一个水平附近,而且价差的波动率也稳定。从数学的角度上来看,两个交易所的价格(P1 和 P2)符合以下关系: 确定了这个交易的方式,我就开始实现这套跨交易所的交易系统了。本着没有好名字就没动力好好编程的精神,我先命名了所有的组件: 简单而言,这套系统由四个组件构成,主体由 Python 编写,GUI 全部 Web-based,后台数据库 redis+mongodb: Optimus:擎天柱大哥,看盘终端,GUI Nirvana:涅槃,数据抓取系统——比特币网站的接口那个烂,经常 crash,用涅槃寄寓我们希望稳定抓数据的心愿 Einstein:主程序,做主要的算法交易逻辑 Achilles:阿基里斯,下单系统 其中 Achilles 是最有意思的,当时很多比特币交易网站都没有 API,所以只能够用 Javascript 注入的办法下单,简而言之,就是一个机器人,模拟人登录网站,模拟人点鼠标下单。当时做起来非常恶心,很多边际情况。经过大量的实验,我个人强烈推荐两个好用的库: ariya/phantomjs · GitHub Selenium - Web Browser Automation 当然用 Node.js 直接包裹 V8 来操作也是非常黑科技的做法。只是当时赶时间,没有机会继续深入研究了。 这套系统开发了 3 周时间,我一个人码的 code,之前在学校里面完全没有机会去实践的写一套交易系统,还是碰到了很多的问题。当时最大的难点是,每次搬砖都需要两个交易所同步下单,但是两边的成交数量可能不一样,这样后面就需要追单。我们提出了两种解决办法: 线性下单,先下单价格变化快的交易所,得到成交数量了,再下单变化慢的交易所 追单,同步发单,然后每次逻辑循环检查整个系统的风险敞口,如果不为零就在单边补单——如果要买比特币就去低价交易所,要卖比特币就去高价交易所 今年国内的分级基金套利非常的火热,我想也有类似的问题,同时下单 A、B 基金,技术上如何操作,最简单就是线性下单——先买入 B 级,因为 B 级动得相对比较快,再根据成交数量买入 A 级。但是要追求极致的滑点,就必须同步下单了——欢迎进一步的讨论。 Miscellaneous for geeks: 开始交易后,一天早晨,我正要看昨夜的收益情况,发现自动重新登录系统被火币网封锁了——我们的系统会每 20 分钟自动登出登入一次防止下单时 session 过期——是的,他们给设了验证码。早上碰到这种事情心情一下子很 kuso,突然一下脑洞大开,我想到了他们还有一个移动网页端(m.huobi.com),check 了发现移动客户端没有验证码,于是我让程序去移动端登出登入,获取了 session 后,再切回桌面端下单。那个早上瞬间心情无比美好。 之前我们的程序一直在我本地交易,延时在 300ms 左右,因此我们测试了阿里云、盛大云等很多云服务,最后发现盛大云 ping 他们服务器的 latency 最小,在 10ms 左右,于是我们全部切换去盛大云交易了,完成了“co-location”。 伍 由于所有的交易所都在国内,我和悟空也一段时间不在国内了,没法自己去处理转账这些事宜,于是我找了发小“龙大”。龙大自己在国内运营一家 PE、VC 公司(如果有对融资感兴趣的朋友,戳:唯通资本),相对于有点学究的我们,非常的接地气,实在是国内 operation 的不二人选。在听我非常激动地胡言乱语了一通后,龙大虽然不完全明白我们的策略,也很靠谱的准备去了。 都准备好了以后,我们就开始交易了,当然无论是策略还是系统都遇到了相当多的细节问题,此处需要省略数万字调试过程。由于我们不停地加仓和增加频率,很快我们单个交易所的交易量就达到了一个天文数字: 虽然看着很吓人,但是每笔交易的利润是非常薄的,而且如此套利的容量很有限,多少有点赚了吆喝没赚钱的感觉。但是过了前一个月后,我们基本无需操心了,该干嘛干嘛,早上起来收点小零花钱就好了。从 0 搭建一个交易系统的快感你只有自己体验了才会懂。 后来逐步把 PnL 查看也弄得高大上了 运营到 2014 年的 2 月份,当时比特币界发生了一件大事,就是总部位于日本的交易所 Mt. Gox 倒闭了,给全球的比特币价格带来了巨大波动性。 结果那段时间成了我们盈利能力最强的时间,因为各个交易所之间价格经常脱钩 100 元以上,单次套利的利润空间变得非常大。当然最万幸的是,我们没有在 Mt.Gox 交易,不然也是血本无归了。 尾声 在运行了近 8 个月后,我和悟空最终决定把这套系统关闭。当时主要有三个原因: Mt. Gox 倒闭后,大家一度对比特币信心锐减,交易量也在到顶峰后开始暴跌。我们的利润空间越来越小了 我和悟空都慢慢开始全职工作了,也不应该在外面做自己的交易了 传闻央行要限制国内比特币交易所的存取款通道了,这样资金也会越来越不安全 但是这 8 个月留给我很多 enlightenment,也让我和悟空成了无话不说,经常一起讨论市场的好朋友。最后我们两个一起总结的时候,发现我们策略和交易系统的年化利润率是 280%,而 Sharpe Ratio 在 11 左右。 之前我从来不相信有 Sharpe Ratio 超过 5 的策略,但是自己实现后发现原来真的存在—— Sharpe Ratio 10 以上基本代表你的策略全年没有几天在亏损,而方差完全来自于每日盈利的多少的差别了。 后来我自己开始做美国利率市场的自动化交易,也认识了越来越多做各种“奇异资产”套利的朋友——包括 Diablo 游戏道具、在线德州扑克,发现了一个有意思的规律: 准入门槛(资金上、技术上、政策上)越高的东西,策略越简单,而门槛越低的东西,策略越复杂 美国的利率、国内的股指期货,都是进入门槛并不高的资产,因此交易策略的设计和调优相对复杂很多,而比特币、Diablo 游戏道具这种,由于搭建一个像样的交易系统都需要费很多功夫,里面需要的策略并不复杂。 所以,一个套利或者交易的团队,需要能够准确估计投入产出的能力。假设自己技术实力很强,但是策略能力不强,就可以多介入比特币这种奇异市场,利用技术力量去抹平市场间的无效性;如果策略能力强劲,则可以做中低频的常见资产;如果技术和策略实力都非常强劲,则可以去尝试各种活跃资产的高频 Alpha 交易——这需要科技和策略的完美结合——这也正是高频交易的迷人之处。 一年后(2015 年),大老板 MD 安排我带哈佛 CSE 专业的学生做一个 Industry Project (Course 297r,Applied Computation 297r. Computational Science and Engineering Capstone Project),我想起了比特币的这段经历,于是把之前的数据找出来,给他们研究比特币的交易策略。除了我们做的这种 Pairs Trading 的策略,他们还研究了 Hidden Markov Chain 和其他技术指标交易办法。如果对结果有兴趣的,欢迎查看他们的 Report 2015 年夏日于纽约 ——————————————— 发自知乎专栏「一蓑烟雨」