【核心技术】功夫量化交易系统2.7 – 无限算力

董可人/CEO

三月初我们发布了功夫核心库2.4的开源版本,陆续收到了很多朋友的反馈,这次的开源版本代码复杂度有不小的提升,尤其是整个构造流程的工程复杂度非常大,但是看到不少朋友都能自行完成编译,非常感谢大家的热情关注和支持。功夫量化团队也在快马加鞭,相信关注我们网站的朋友已经发现,商用的标准版本的最新版2.7已经在线。

从2.7开始,功夫量化开始正式提供对在线计算的支持,从之前的专注于“交易执行”环节的低延迟交易系统,向着内涵更加丰富,能够涵盖量化交易从研究到实盘整个链路的完整形态发展演化。从产品直观上来说,2.7首发功能是内置的对全市场 Level2 数据的高精度逐笔回测,相比于之前市面上早已存在的众多优秀回测平台,我们确信这不是一个简单的重复造轮子的故事,其中既有我们对于数据专业性方面的认知,也有对于真正的量化基础设施应如何搭建的思考,下面会详细展开介绍;并且,我们认为回测仅仅是关于计算的应用的一种形态,除此之外,还有很多其他形态能够很好的纳入到量化的框架里,因此我们在设计上更多的考虑是如何把功夫的核心作为一个计算引擎,使得用户能够更容易的通过这个产品来获取算力上的支持;如果考虑到云端资源的合理应用,我们相信最终能够实现如题所述,对量化系统提供算力的无限供应。从2.7开始,希望能逐渐让你感受到这一点。

此外,系统内还新增了不少实用工具,例如可用来逐帧查看或回放策略运行细节的诊断工具、对 Python 策略文件进行二进制级编译的开发工具等,想要了解详细信息请至在线文档查看。

                              2.7新特性之一:诊断工具,支持逐帧查看、回放策略运行细节

关于回测

首先来说在具体的回测这个功能上我们的设计初衷。众所周知,市面上早已存在很多线上的回测平台;而功夫作为一开始定位于交易执行环节的产品,在多年之后终于考虑在产品内增加对回测的支持时,我们自然并不希望仅仅是做一些雷同的事情来增加回测平台这个领域的内卷程度。当我们在考虑初始的产品设计时,首先明确的是,回测功能的核心问题在于数据;而如何管理数据决定了整个产品的基调,自然的有以下几种选择:

  • 支持用户从外部导入数据,例如从某些SQL数据库,或者CSV文件中导入数据来驱动回测

这种方案的弊端在于很难预先对数据源的格式做任何的假设,也就意味着用户必定需要做某种繁琐的操作,才能最终实现数据导入这个功能;以及一旦数据源发生变化,大量的工作都需要重头来过。并且由于产品无法对数据格式做任何限定,必然会带来大量的细节问题难以在设计阶段考虑周全,最终一定是在使用上问题频出,维护成本非常高。一般来说只有完全开源的项目会采取这种做法,对于想要提供专业级支持的商用产品来说很难选择这条路。

  • 通过云端自主管理数据,通过统一的格式分发给用户,本地进行处理

这种方案能够避免掉数据格式维护的问题,也是在很多市面产品里常见的做法。但这样一来,产品的核心问题就变成了数据分发,需要解决诸如支持高并发下载之类的问题;而且对于用户来说,仍然需要自行管理下载到本地的数据,除非所需数据量较小,一块硬盘就能存完,但显然这绝非量化用户的常态,特别是考虑到 Level2 级别的数据量(单市场每天10GB以上),如果每个用户都来下载,一般的线上服务是很难支撑的;并且,对于下载到本地的数据,如果要进行大规模的并发回测处理,往往仍然需要自己设计开发支持并发的回测框架,甚至额外再购买用于计算的存储和计算设备,用户的潜在成本其实非常高。

基于这些问题,我们也能看到实际上市面上几乎是没有能够让普通用户自助就能使用的针对 Level2 数据的“高精度回测”。大家普遍能接触到的,也就是基于快照数据的简单回测;这种回测不仅和实盘交易在数据接口层面的差异非常大,也很难在数据质量上满足高精度的需求。

因此,当我们开始设计回测这个功能时,我们所考虑的是能否解决上述的这些问题,来使得用户真正无负担的能够用最高质量的数据来进行真正高精度的回测,并且这种服务也需要是在我们能够承担维护成本的前提下才有意义。而当我们审视已有资源时,发现有这样一些要素是我们所特有的:

  1. 功夫核心库所提供的“确定性状态机管理”机制,使得计算引擎能够对相同的数据总是给出相同的结果,这样就可以无差别的在本地和云端执行,用户完全不需要担心实盘交易和回测的数据接口有什么区别,因为事实上就是毫无区别;
  2. 基于1,当我们在云端执行一次高精度回测任务,实际上仅仅是一次对特定数据集的“无状态”计算,计算前和计算后都不涉及任何外部系统的状态管理,可以使用典型的无服务技术栈来实现;
  3. 基于2,计算实际上和数据存储已经解耦,这样我们只需要维护一份数据源,就可以弹性的支持任意多的并发计算任务(即用户提交的高精度回测任务),只要云端的算力充足,相当于为每个用户都能提供无上限的算力支持。

基于这三点,功夫量化的回测产品的整体构思就成型了。具体的细节,可以参考我们的核心设计师亲自写的系列文章:

关于数据

一直以来,功夫都定位于要达到工业级的标准。在实盘交易执行方面,我们已经证明了可以通过标准化的软件产品就能达到微秒级的延迟响应,并且不需要任何的特殊部署,在功夫量化的官网(https://www.kungfu-trader.com)上就可以直接下载安装验证;甚至不需要像一般的高性能后台产品那样需要用户掌握一定的 Linux 运维技术,直接在我们跨平台的图形界面上操作,你就能感受到这一点。同样的,我们希望在计算服务方面也能达到这样的标准,让大家能够使用最高等级的数据来验证自己的交易思路。

目前市面上的数据服务种类很多,既有免费的开源数据,也有需要付费使用的商业化数据。但是在免费的普通数据,和昂贵的高质量数据之间,存在一个非常大的真空地带。等于说,要么你在使用的是免费或者非常廉价的普通数据,要么就需要花费至少十万左右才能用上高质量的数据(包括数据授权、设备搭建等)。这导致很多人实际从来都没有考虑过去使用昂贵的优质数据来进行研究或者驱动交易。如果你仔细思考这一点,不难发现,在金融交易这种角斗场,这样很大程度上实际在起跑线就已经输了。在粗粒度的普通数据中再怎么挖掘,也很难找到只有在细粒度数据中才存在的线索。

因此,当我们在筹备数据时,我们希望能够尽可能的让你在无需支付高昂成本的时候,就能立刻开始体验使用最高质量的数据来进行研究或是计算。质量方面,我们已经准备了全市场基本的 Level2 数据,包括股票、期货、可转债等主流交易品种;通过在线计算的形式,这些数据不仅仅是用来回测测了,还能支持多种多样的计算方式,包括数据分析、因子研究等形态很快也会一一推出:

                      通过内置的在线回测引擎,以最低的价格让你立刻开始体验 Level2 数据

关于产品

设计思路明确下来,还需要有具体的产品来兑现。在底层的实现上,功夫的回测是基于核心库的 mmap 机制来加载数据和驱动策略。这样,策略层的驱动和实盘的区别很小,主要是系统时间管理上使用了一些技巧,使得策略通过系统API拿到的时间能够在回测时对应历史数据的时间,在实盘时则对应真实时间。同时由于严格遵守确定性的状态机管理原则,使得策略的内部状态机在回测和实盘时可以保证严格的一致性,这样只要在回测时输入高质量的数据,就能无限的接近实盘效果。

最终交付的产品是这样,当你在功夫内添加好策略,只需要点击运行,选择数据日期,就能立刻接入云端的数据和算力,可以实时查看日志输出,也能看到包括委托和成交记录在内的详细可视化报告:

                                       无需数据准备,界面上一键启动回测并查看结果报告

关于未来

2.7是一个开始,意味着功夫在产品内开始提供由数据和算力驱动的一系列线上计算服务。2.7首发的回测,仅仅是这个系列的起点。从产品的角度来说,回测功能的学习和使用门槛相当高,或许并不适合作为首发功能点;但是就像我们七年前首先开始从交易执行这个更难的环节开始一样,为了实现对产品专业化的追求,我们认为所有交付的功能都必须扎根于坚实的基础,如果我们的回测API最终不能无缝接入到速度最快的执行系统,就一定无法满足专业用户的需求;同样的,如果我们的计算服务不能无缝连接到回测环节,就很难说服专业用户们认可这些服务的价值。

而当我们在每一个基础环节都打下坚实的基础,接下来版本发布的速度会越来越快。预计在一两周之内,我们就会推出能够支持更细力度的因子计算的版本,同时开放更多的API来支持你在不同的场景里使用这些计算能力。如果你对当前的2.7版本仍然感觉有一定的学习难度,别紧张,保持关注新版本,很快就会有更有趣的事情发生。

最后附上我们的公众号和微信群,欢迎对高频因子研究感兴趣的朋友关注,加入(微信搜索 功夫量化,关注后可扫码入群 ),对于产品的使用有任何疑问,可以在公众号后台直接回复,功夫小伙伴们会第一时间为你解答: