42

数字货币市场的量化交易工具有哪些?

 4 years ago
source link: http://www.hecaijing.com/article/show/15569590880743474.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

作者:VN.PY创始人 陈晓优

首先,说起数字货币,做量化的朋友们第一反应是什么?

庄家疯狂的屯币拉盘BTC

VZjMzer.jpg!web

传说中金将军都参与了的挖矿

6nyMNrI.jpg!web

眼花缭乱(部分是亮瞎狗眼)的ICO

BbyMZjE.jpg!web

一茬又一茬割不尽的韭菜?

YBFzmaq.jpg!web

这四张图大概能代表过去几年数字货币市场(下称"币圈")的发展路径(一夜暴富的方法),从屯币到挖矿再到ICO,惊人的财富聚集和眼球效应吸引来了一波又一波的韭菜。

以上这几个阶段,币圈和量化可以说几乎没什么交集(或者些微的应用),直到2017下半年。在前几个阶段积累了大量财富的个人,被赚钱效应逼得进场的各路投资机构(VC、自营、基金),机构投资者的数量快速上升,量变终于引起了质变:币圈量化的时代来了。

和传统金融市场的量化不同的是,这群机构投资者面临着三大主要的难题:

纷繁林立的交易所

由于种种原因(无监管门槛、大佬鼓吹、资本泡沫......),全球币圈可能已经有了数千家交易所(甚至更多)。

和外汇市场零售经纪商遍地走的情况表面看起来类似,本质上却有着很大的区别。传统金融市场的二级市场卖方,大多由第一层:流动性批发商(交易所、大型投行),以及第二层:流动性分销商(证券公司、期货公司),两层组成。外汇市场诸多的零售经纪商只是属于第二层,其最终的流动性还是汇聚在第一层的大型投行。

而币圈的交易所,则是同时扮演了第一层和第二层的角色,每家交易所都直接面向客户,且只能给客户提供自己家的流动性。各家交易所之间本身并没有任何互通机制,整个市场的流动性被严重割裂分散开了。机构投资者一些数量比较大的委托,可能需要拆散成多个小委托,发往不同的交易所成交,否则只使用单一交易所就要等待许久。

流动性的割裂又导致各家交易所完全相同的产品价格却可能持续性的存在偏差,价格的收敛需要由市场上的套利交易者来完成。从另一个角度来看,也可以说套利者其实在币圈扮演了流动性批发商的角色,所以在币圈套利策略的盈利水平,应该会长期远超传统金融市场。

交易所数量众多带来的另一个问题是交易规则的极度混乱:高端的交易所支持FAK、FOK、OCO等复杂委托类型,某些低端的交易所却可能连市价单都不支持;尽管几乎所有交易所都宣称自己的撮合规则是“价格优先,时间优先”,但我们还是多次看到市场上某些头部交易所出现过订单簿上,买一价格大于卖一的情况。

7x24的交易时间

RR7jAnF.jpg!web

从上面这张表里可以看到,币圈每周的交易时间高达168个小时,是国内A股交易时间的8倍多!!!

即使对比全球外汇市场,币圈也多了30%的时间,更不提外汇市场每天实际的交易量存在明显的时间分布特性(部分时间交易量和行情波动小到可以忽略)。

所以目前币圈某些交易量比较大的短线交易团队(自营或者私募),都不得不采用某些实体血汗工厂才有的“三班倒”工作模式。

极不成熟的技术体系

市场的快速发展,使得交易所既没有足够的时间来做技术升级,也没有意愿暂停印钞机的工作来做技术升级。截止目前币圈交易所的技术体系,和传统金融交易所相比,可以说还差的很远很远。上面两节里已经提到了一些技术缺陷导致的问题,再举一些例子:

某些交易所只有主动查询功能的REST API,所有的用户状态更新都要查、查、查(网页交易端背后的逻辑也是查),本身HTTP请求的开销就比较大,再加上交易所服务器的性能较差,进一步导致了下面的问题

为了避免用户的请求太多导致服务器卡死,交易所对用户的API调用几乎都做了限流处理(这个是很正常的),但是某些号称允许用户10秒100次请求的交易所,实际交易中确可能只有30秒10次,差了几十倍的水平(这个就严重影响用户交易了)

数据在互联网上传递时,总是存在一定的安全隐患(截获、篡改、丢失),因此交易API都需要对数据进行加密验证,传统金融中的API通常将数据加密功能封装在内部(对于用户来说是无感),而币圈用的REST API则不得不在外部由用户来实现(由于各种规则不清晰,用户可能折腾几周都搞不出来)

以上的三个难题,基本构成了币圈量化的主要痛点,接下来我们以此为目标来看看一些币圈量化交易工具。

行情数据

工具名称:CoinAPI.io

工具类型:商业软件(在线服务)

针对痛点:交易所太多

看看这堆数字:接入96家交易所、每秒3156次数据更新、提供3080个币种,以及高达38TB的历史数据量,http://CoinAPI.io可能是目前币圈最专业的数据服务商。

提供的服务包括:

REST API:用于获取历史数据(Tick、K线、币种信息、交易所信息等等)

WebSocket API:用于获取实时数据(成交、盘口)

FIX API:用于大型金融机构接入内部系统获取实时数据

其中最实用的莫过于通过REST API获取历史数据,只要一套接口就可以方便的获取到市场各家交易所的几乎所有币种数据,而且经过数据清洗和变频整理,再也用不着自己苦哈哈的写一堆交易所接口,然后每天弄个云服务器收数据了。

WebSocket API则略微鸡肋,毕竟从交易所服务器到CoinAPI服务器再到用户,中间经过额外一次转发的时间,会显著影响数据的实时性。

交易接口

工具名称:ccxt

工具类型:开源软件

针对痛点:交易所太多 + 极不成熟的技术体系

从定位上看,ccxt是一套交易所REST API的标准封装接口:

目前已经支持128家交易所(OMG!!!)

主要作者是两位俄罗斯人(不愧是战斗民族)

提供了Javascript/Python/PHP三种语言(赌五毛支持PHP不是为了交易,猜测可能针对的某些网站用户?)

上文有提到,币圈各家交易所的REST API大同小异,但仅仅这一点点小异的部分已经足以虐得开发者死去活来,比如签名加密的JSON字符串排序问题、查询委托信息返回的信息可能不全等等。ccxt则是通过一套简洁清爽的API设计,把这些坑爹的细节隐藏在了内部,对用户来说简直不要太爽(想了解有多爽的可以试试手写火币的API,然后再来用ccxt对接火币~)。

但ccxt也有若干遗憾:

大部分交易所API的功能兼容度在60-80%,主要因为定位于底层交易接口,没有交易管理引擎的支持(无法实现复杂的数据缓存计算逻辑)

同步风格的API设计,对于复杂的量化交易策略需要用户自行实现异步算法,尽管Python 3版本可以通过asyncio来实现异步逻辑,但存在和多线程工作模式冲突的问题

回测框架

工具名称:Catalyst

工具类型:开源软件

针对痛点:7x24的交易时间

基于Zipline框架的币圈增强版本,使用Python开发。相比较于国内A股足足8倍多的每周累计交易时间,币圈无疑是个更理想的量化交易战场,或者说是一个机器比人的优势相对会更大的市场(谁不服的来个3x24不睡觉试试~)。

除了Zipline本身就相当好的策略示例、使用教程等常规资源外,Catalyst作为Enigma(一个公链项目)的下属应用,社区运作也做的比较充分。Catalyst还有一个去中心化的数据服务应用(使用token付费),不过个人觉得噱头的成分更大一些。

最后和Zipline比较大的一个区别,Catalyst可以直接用于实盘交易,目前支持Bitfinex, Bittrex, Poloniex和Binance四家交易所。不支持实盘也是我个人觉得Zipline最遗憾的地方,Catalyst能做到也算是从侧面提现出币圈的开放性吧。

交易系统

工具名称:Gekko

工具类型:开源软件

针对痛点:7x24的交易时间

说起Gekko,其实内心有点酸溜溜的感觉:差不多两年前第一次统计Github上开源量化交易项目的时候,这家伙还是个刚出现的小弟(大概才几百个Star,vn.py大概已经快2000),2018年8月5日 19点03分,Gekko的Star即将突破7000(6994),而vn.py才6184(还是最近积极更新奋起直追的结果),所以......不爽。

@杨丰恺 回答中提到的“痴迷于自动化和炫技,大都是forward looking的黑盒子”。

前半句我觉得完全赞同:Gekko完全符合一套满足自动化实盘交易的系统的要求:数据维护方案、回测工具、仿真交易、实盘运维、技术指标库等等。

后半句则有所异议:尽管主要针对的是单标的CTA类型的策略,但结合完善的策略开发体系(数据模型分析、样本内外验证、过度拟合检查等等),有经验的CTA交易员同样可以在Gekko上跑出漂亮的交易业绩。

多标的和多因子类型的策略,尽管从知识要求和开发难度上都要高于CTA策略,但目前在币圈因子数据还极为缺乏或者不稳定的情况下,CTA反而可能更接地气。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK