1功能要点
2读取性能测试
相比MongoDB,DolphinDB的速度提升效果是比较明显的,足以支持我们下决心采购这套商业系统。我们在使用其他开源系统时,比如做大数据并行时遇到过不少问题,但是无法及时得到解决。DolphinDB的技术支持团队在数据入库和分区等方面为我们提供了很多方案,可以保证及时、专业的技术支持。
但是在使用DolphinDB后,研究变得非常方便。所有节点的总内存是0TB,DolphinDB处理这个规模数量级的数据是比较稳定快速的,可以自动进行分布式计算。
主要研究level2的公开数据,包括每只股票每3秒钟的快照数据,每10毫秒采集多笔的逐笔成交数据和逐笔委托数据。通过数据商获取实时采集数据和盘后数据,数据范围是全市场,包括股票、债券、商品期货、金融期货和期权等。
相比传统数据采集方案,本套系统采用性能优秀、可靠性高的架构设计,可以实现高速、自动采集证券或期货的历史数据。借助AirFlow工作流平台全自动调度处理金融资产高频历史数据。结合实时行情为多因子量化投资策略等工具提供高效完整的数据计算基础。使用高性能分布式数据库DolphinDB进行数据存储。采用ETL方案统一数据结构,保证了数据质量和前后依赖关系,同时确保数据的一致性和稳定性。扩展性强,支持Python、C++、C#、Java等接口对接第三方系统。
借助DolphinDB专有的流计算引擎,在实际使用中可以实现10毫秒内因子计算,比如获取行情,将行情数据转换成计算因子如均线、K线等然后进行存储,同时按照需求订阅需要的多个合约和因子数据。
我们将这两种数据汇总在一起,对数据进行备份、比对,清洗和入库。在目前的研究中,我们入库了2013年到现在的市场全景数据,原始数据总计在60TB左右。
分别测试同等硬件条件下,采用MongoDB和DolphinDB两种数据库存储数据的系统采集入库上海期货交易所一周Tick数据的性能。具体测试数据如下:
测试系统实时计算的性能,具体测试结果如下:
4性能测试
数据采集:支持CSV文件,系统可以采集SQL、Orcale、万德、国泰安、通联、聚宽等数据源的历史行情、实时行情及基础数据。数据存储:使用DolphinDB存储包括流模式和库模式的Ticks和Bar、合约信息、基类、因子及自定义合约。PostgresSQL存储数据中心的日志、任务、自动或手动计划及门户前端数据库信息。数据处理:Builder实现历史及实时Ticks拼接MinBar和HourBar,连续合约和配对合约。Validator校检日线数据和Tick数据的准确性。上层应用:主要分管理后台和采集任务管理。管理后台提供合约管理功能,包括查询、自定义合约、连续合约和因子等。采集任务管理包括自动或手动采集管理数据,计划任务管理及数据完整性检查。状态应用:提供AirFlow调度平台的运行状态、日志服务及通知网关。对外接口:支持Python,C++,C#等API接口。
用基于DolphinDB研发的量化高频数据中心系统读取深市某股票一年数据,具体测试结果如下:
在做高频量化交易时,模型和参数的迭代是很快的,选取以周为单位、一年的历史数据已经在单机上占用了很大内存。我们之前使用512GB内存的服务器研究有关市场结构的课题,想以整个市场截面查询很多证券的操作情况,需要的数据量大概在500GB左右,经常会超限。
1写入性能测试
2数据类型
我们在总结经验后建立了系统,可以直接存储HDF5文件同时实现直接检索,但是该系统响应速度慢、无法动态管理数据。
量化高频数据中心系统的中心功能主要分六大模块:数据采集、数据存储、数据处理、上层应用、状态监控和对外接口。数据中心功能模块的展示如下:
之前使用MongoDB入库一周tick级的数据需要1000秒钟左右。重构系统后使用DolphinDB多线程采集宏汇的数据源,在保证整个原始任务的逻辑关系的基础上进行入库保存。因为DolphinDB目前还不支持同区多线程写入,所以我根据DolphinDB的特性编写了入库程序进行任务分派,入库上海期货交易所一周tick级的数据仅需要120秒钟左右。
个性化需求:行情厂商标准数据无法提供自定义的MinBar、HourBar、连续合约及自定义合约等拼接规则,导致量化策略无法实现。历史数据采集现状:数据量大,采集慢,访问慢。采集一年数据可能要耗时几天,无法保证数据没有遗漏。行情实时处理现状:缺乏高效的内存型数据库,无法实时计算因子。自建系统困难:自建数据库采集工具成本高,高频处理系统开发难度高。
所以我们需要做一套分布式的处理系统,这对我们团队的代码编写和程序设计能力有很高的要求。由于我们不是并行处理方面的专家,我会用Python或者MATLAB在多节点中分开计算,但面对数据在500GB以上的场景时还是比较力不从心,需要用小的截面反复去做,然后统计所有截面数据寻找相关性。这块工作的强度很大,并且需要花费不少时间。
3功能架构
基于DolphinDB研发的量化高频数据中心系统很好地满足了每天进行实时策略回测、模拟交易等业务的需求。不管是学校的科研项目,还是与券商、基金公司等合作的项目,尤其在高频量化场景等重要场景中,都会使用这套系统来开发相应的策略和应用。
数据中心使用AirFlow通过TaskID、JobID调度整个系统的运行顺序和状态。TaskID和JobID可以保证数据采集的完整性和出错重做机制。将采集的数据写入DolphinDB集群和内存中以方便调用,同时对数据进行拼接和校验。系统提供Exporter输出接口,通过Manager后台对整体进行配置和管理。数据中心系统的架构如下:
DolphinDB的性能很好。我们在2018年采购了5台256GB内存、十几TB硬盘的服务器和一套服务系统,主要研究市场微观结构,比如研究融资融券,思考交易如何影响市场。再比如识别、探究订单户数据时,数据量大概在每天八千万到一亿条。之前我们每天要花大概3个小时去处理数据,修改数据非常困难。现在使用DolphinDB提供的一站式服务只需要花30分钟即可完成处理,使用变得非常便捷。
3实时数据计算性能
DolphinDB上手快,学习门槛低。因为DolphinDB的脚本语言是类SQL的逻辑,我会安排学生先学习SQL,学会用SQL读取数据后,再学习使用DolphinDBScript进行复杂操作。由于学生都有Python基础,在学习SQL后大概一个礼拜就能上手DolphinDB。教学内容包括数据导入、查询、策略回测和DolphinDB的一些特性操作如表拼接等。对于学金融和量化投资的学生来说,DolphinDB是一套上手容易、使用友好的数据库。
之前是在每台机器两块硬盘的情况下进行测试,将所有数据放入一个库中进行处理。现在根据DolphinDB技术专家的建议,提出对数据进行分区分表的新方案。目前的实际速度要比表中的速度更加快。
之后我们尝试了Hadoop的hive系列,发现该系统不能高效研究结构化数据,需要将结构化问题转化为MapReduce脚本后进行处理。
DolphinDB写入速度超过MongoDB近8倍
文章为作者独立观点,不代表股票交易接口观点