开发量化策略的第一个重要环节:如何获取数据?

开发量化策略所需要的数据,包括历史数据和实时数据。 特别指出,我们只介绍免费的数据源,以帮助大家降低成本。

先从股票开始,股票的历史数据,我们可以借用三方平台回测(例如优矿、聚宽、米筐等),相当于借用了平台的历史数据,但平台历史数据有一个问题:往往不能将全量数据下载到本地。想要自己搭建股票回测框架的话,推荐用tushare的数据,如果你是学生,tushare是可以免费使用的;而如果你有写blog的习惯,也可以写一些tushare相关的技术文,向tushare申请免费的积分以获取数据权限。

一个tushare获取数据的小栗子

对于实时数据,目前新浪财经、腾讯股票可以通过爬虫抓取实时数据,我们曾分享过如何通过新浪财经,以及Easyquotation(包含新浪、腾讯财经接口)获取数据的文章,传送门:

实时获取股票数据,免费!——Python爬虫Sina Stock实战

股票数据爬虫:进阶免费、开源的股票爬虫Python库,亲测真香

然后再看期货,期货数据根据数据周期可以分为K线数据和tick数据。期货的三方平台例如tbquant,提供了tbpy的接口。我们可以通过Python将平台提供的全量历史k线数据下载到本地,来进行本地的回测,可以说是极为友好了。此外,比如tqsdk(快期天勤的Py接口),以及上文提到过的tushare,也能提供期货的k线的历史数据接口。

对于高频策略需要用到的tick数据,就只能通过自编软件来收集了,目前我们没有看到三方平台或数据商有这一类免费的数据源提供。期货的实时数据,由于有ctp api这个完全免费、高度成熟的期货接口,任何人都可以通过这个接口接收交易所推送的标准行情数据,与此同时,我们可以配合mysql或mongodb,将数据落地,就形成了本地的tick级数据回测来源。

tick数据落地范例

最后是数字货币,数字货币的历史k线数据,可以通过cryptodatadownload网站获取到。而tick数据,和期货一样,全量的数据,只能通过自编代码收集。好在所有的主流数字货币交易所,都提供了api的接口,与期货所不同的是,数字货币的api接口,不仅有websocket的实时行情推送,还可以通过rest api去查询一定时间范围内的历史数据,可以将其落地,作为回测所需数据。关于数字货币历史数据的收集,我们也曾经分享过实用的操作文章,传送门

如何获取免费的数字货币历史数据


量化策略开发第二步:回测平台

开发量化策略的第二个重要环节:选择合适的回测平台/框架

量化策略的回测,我们既可以借助成熟的三方平台,也可以用例如Python等语言自行编写搭建回测框架。

先说三方平台,股票回测的三方平台,以聚宽、优矿、米筐这3个最常见,这3个平台都是Python API的结构,并且有完善的测试结果的可视化工具。

对于期货的回测,K线策略同样可以借助4大三方平台:tbquant、文华财经、金字塔、multicharts来实现,如果对于Python比较熟悉,也可以选择天勤的tqsdk或者vn.py来回测,其中vn.py需自行对接历史数据。

最后是数字货币,数字货币最出名的三方平台是FMZ,FMZ对回测来说是相对比较友好的,支持Python、JS、以及类似文华财经的易语言,但不建议用FMZ进行实盘,机器人托管费用实在是太高。除了FMZ,对于逻辑相对简单的K线策略,我们也可以采用TradingView来进行测试,TradingView可以理解为是网页版本的文华财经。TradingView的内置语言也比较简单,适合初学者。TradingView回测数字货币策略,可以参考

如何使用TradingView(TV)回测数字货币交易策略

三方回测平台的优势与劣势

然后,我们来分析一下三方平台的优势、劣势。首先是优势,第一点,三方平台把回测的基础框架都搭建好了,用户只需要专注最核心的策略逻辑部分,而不需要关注其他的底层;第二点,三方平台往往回测和实盘代码是同一套,回测、实盘的逻辑由三方平台自建的底层代码来做切换,给予用户编程最大程度的方便。

说完优势,我们再来看一下劣势,第一,三方平台封装好了底层,是一个双刃剑,在提供编程便利的同时,也把底层变成了黑盒,有些指标计算、开平仓价格的细节,无法通过代码去定位是否有潜在错误,导致回测结果变得不十分可信。代码控制的不好,很容易产生未来数据或偷价格等错误,导致回测出上帝视角的策略效果。第二,三方平台的回测速度,往往不如自编更快,因为三方平台需要兼顾许许多多客户的不同需求,增加越多通用性的功能,往往意味着性能上的妥协。第三,使用三方平台会产生一定的费用,例如需要购买历史数据、服务器磁盘空间、实盘权限等等(毕竟免费的三方回测,也不是做雷锋,总有其需要变现之处)。

总结一下,如果有一定的Python编写能力,或是对于策略的回测精度细节要求很高,基本上只能自己搭建框架来回测;而如果测试一些通用的策略,且编程是刚刚上手的,那么三方平台能尽快地帮助你去实现一些想法,并验证这些想法在历史上是否可行,以及是否有应用到实盘的价值。

我们在此前的直播中,分别分享了基于K线策略的自编Python回测框架,以及基于横截面策略的自编Python回测框架,感兴趣的朋友可以参考

【系列培训第三讲】魔改经典策略:变种肯特纳通道策略(完整录播版)

【系列培训第四讲】量价之外:期货基本面量化策略(完整录播)



量化策略开发第三步:实盘平台

开发量化策略的第三个重要环节:选择合适的实盘平台/API

首先是股票,股票目前监管较为严格,比较有名的像XTP,接入门槛在300万-500万起步;此外,市面上有一些类似外挂的接口,极不稳定,实盘请注意风险,不建议大资金使用,上述接口都是基于C++语言的。也有部分“科学家”用Python开发了类似按键精灵功能的伪接口,不算是完善的接口,实盘同样需要注意风险。

再说期货,期货入门门槛最低的是4大三方平台:tbquant、文华财经、金字塔、multicharts,这4个平台采用编程极为友好的easylanguage,建议编程初学者使用,但有需要支付额外手续费、速度慢等缺点;再难一点的是vn.py,开源的python平台,对于熟悉python的同学比较友好;然后更为复杂的就是C++ API了,大家用的最多的是ctp,速度更快的还有ctp mini、盛立、艾克朗科、恒生等。对于平台的选择,如果做的是中低频的策略,优选4大平台或vn.py,但如果做高频策略,C++是必须配置,ctp是起步要求,如果策略对于速度要求更高的话,选用盛立等以FPGA作为底层的平台更合适。FPGA为底层的交易系统(下图是一个典型的FPGA通路),可以将交易系统的响应速度提升到极致。

最后是数字货币,数字货币的三方平台都需要收取不菲的手续费,不建议大家使用。几乎所有数字货币交易所都提供了免费接口,而接口中Python又是最通用的语言。如果大家需要交易数字货币的策略,建议直接接入交易所的Python API,或借助三方Python库CCXT来接入。CCXT接入数字货币交易所可以参考传送门

如何利用CCXT交易数字货币合约

对于数字货币来说,不论是中低频还是高频策略,物理位置的延迟都远远大于语言的延迟,所以不像期货那样一定要用C++语言。举个例子,比如做火币和BitMex之间的套利,一个服务器在日本,另一个在欧洲,传输的物理时间是主要延迟,语言的延迟与物理时间的延迟,不在一个量级。因此,Python作为一个数字货币交易所通用型接口支持的语言,具有开发相对便捷、扩展性高的优势,是适合作为数字货币交易系统的实盘开发语言的。