共计 3449 个字符,预计需要花费 9 分钟才能阅读完成。
本文作者:上海财经大学试验核心副主任、金融学院副教授 谢斐
之前上海财经大学应用的零碎在数据存储、压缩、调用和运算等方面存在很大问题,须要消耗大量工夫进行数据整顿。为摸索如何存储 CTP 数据,教研团队编写了一套专门存储大量二进制文件的压缩零碎,但在应用时发现零碎无奈解决多起源冗余等问题。
咱们在总结经验后建设了零碎,能够间接存储 HDF5 文件同时实现间接检索,然而该零碎响应速度慢、无奈动静治理数据。
之后咱们尝试了 Hadoop 的 hive 系列,发现该零碎不能高效钻研结构化数据,须要将结构化问题转化为 MapReduce 脚本后进行解决。
针对持续增长的时序数据,咱们心愿搭建一套优良的、使用方便的新零碎。
我和钻研团队用 Python 编写的基于 DolphinDB 的量化高频数据中心零碎总体性能良好,次要解决长时间采集少数据点、实时因子计算和高频数据采集等问题。目前这套零碎曾经成为教学和科研中的重要工具。接下来本文将从研发背景、数据类型、性能架构、性能测试、抉择 DolphinDB 和综上所述等方面对量化高频数据中心零碎进行介绍。
1 研发背景
- 个性化需要:行情厂商规范数据无奈提供自定义的 MinBar、HourBar、间断合约及自定义合约等拼接规定,导致量化策略无奈实现。
- 历史数据采集现状:数据量大,采集慢,拜访慢。采集一年数据可能要耗时几天,无奈保证数据没有脱漏。
- 行情实时处理现状:不足高效的内存型数据库,无奈实时计算因子。
- 自建零碎艰难:自建数据库采集工具老本高,高频解决零碎开发难度高。
2 数据类型
次要钻研 level2 的公开数据,包含每只股票每 3 秒钟的快照数据,每 10 毫秒采集多笔的逐笔成交数据和逐笔委托数据。通过数据商获取实时采集数据和盘后数据,数据范畴是全市场,包含股票、债券、商品期货、金融期货和期权等。
咱们将这两种数据汇总在一起,对数据进行备份、比对,荡涤和入库。在目前的钻研中,咱们入库了 2013 年到当初的市场全景数据,原始数据总计在 60TB 左右。
3 性能架构
3.1 性能要点
- 相比传统数据采集计划,本套零碎采纳性能优良、可靠性高的架构设计,能够实现高速、主动采集证券或期货的历史数据。
- 借助 AirFlow 工作流平台全自动调度解决金融资产高频历史数据。
- 联合实时行情为多因子量化投资策略等工具提供高效残缺的数据计算根底应用高性能分布式数据库 DolphinDB 进行数据存储。采纳 ETL 计划对立数据结构,保障了数据品质和前后依赖关系,同时确保数据的一致性和稳定性。
- 扩展性强,反对 Python、C++、C#、Java 等接口对接第三方零碎。
3.2 核心功能模块介绍
量化高频数据中心零碎的核心性能次要分六大模块:数据采集、数据存储、数据处理、下层利用、状态监控和对外接口。数据中心功能模块的展现图如下:
- 数据采集:反对 CSV 文件,零碎能够采集 SQL、Orcale、万德、国泰安、通联、聚宽等数据源的历史行情、实时行情及根底数据。
- 数据存储:应用 DolphinDB 存储包含流模式和库模式的 Ticks 和 Bar、合约信息、基类、因子及自定义合约。PostgresSQL 存储数据中心的日志、工作、主动或手动打算及门户前端数据库信息。
- 数据处理:Builder 实现历史及实时 Ticks 拼接 MinBar 和 HourBar,间断合约和配对合约。Validator 校检日线数据和 Tick 数据的准确性。
- 下层利用:次要分治理后盾和采集工作治理。治理后盾提供合约治理性能,包含查问、自定义合约、间断合约和因子等。采集工作治理包含主动或手动采集治理数据,打算工作治理及数据完整性查看。
- 状态利用:提供 AirFlow 调度平台的运行状态、日志服务及告诉网关。
对外接口:反对 Python,C++,C# 等 API 接口。
3.3 架构介绍
数据中心应用 AirFlow 通过 TaskID、JobID 调度整个零碎的运行程序和状态。TaskID 和 JobID 能够保证数据采集的完整性和出错重做机制。将采集的数据写入 DolphinDB 集群和内存中以不便调用,同时对数据进行拼接和校验。零碎提供 Exporter 输入接口,通过 Manager 后盾对整体进行配置和治理。数据中心零碎的架构图如下:
4 性能测试
4.1 写入性能测试
别离测试等同硬件条件下,采纳 MongoDB 和 DolphinDB 两种数据库存储数据的零碎采集入库上海期货交易所一周 Tick 数据(712 万条)的性能。具体测试数据如下:
DolphinDB 写入速度超过 MongoDB 近 8 倍
之前应用 MongoDB 入库一周 tick 级的数据须要 1000 秒钟左右。重构零碎后应用 DolphinDB 多线程采集宏汇的数据源,在保障整个原始工作的逻辑关系的根底上进行入库保留。因为 DolphinDB 目前还不反对同区多线程写入,所以我依据 DolphinDB 的个性编写了入库程序进行工作分派,入库上海期货交易所一周 tick 级的数据仅须要 120 秒钟左右。
相比 MongoDB,DolphinDB 的速度晋升成果是比拟显著的,足以反对咱们下决心洽购这套商业系统。咱们在应用其余开源零碎时,比方做大数据并行时遇到过不少问题,然而无奈及时失去解决。DolphinDB 的技术支持团队在数据入库和分区等方面为咱们提供了很多计划,能够保障及时、业余的技术支持。
4.2 读取性能测试
用基于 DolphinDB 研发的量化高频数据中心零碎读取深市某股票一年数据,具体测试后果如下:
之前是在每台机器两块硬盘的状况下进行测试,将所有数据放入一个库中进行解决。当初依据 DolphinDB 技术专家的倡议,提出对数据进行分辨别表的新计划。目前的理论速度要比表中的速度更放慢。
4.3 实时数据计算性能测试
测试零碎实时计算的性能,具体测试后果如下:
借助 DolphinDB 专有的流计算引擎,在理论应用中能够实现 10 毫秒内因子计算,比方获取行情,将行情数据转换成计算因子如均线、K 线等而后进行存储,同时依照需要订阅须要的多个合约和因子数据。
5 抉择 DolphinDB
首先,DolphinDB 的性能很好。咱们在 2018 年洽购了 5 台 256GB 内存、十几 TB 硬盘的服务器和一套服务零碎,次要钻研市场宏观构造,比方钻研融资融券,思考交易如何影响市场。再比方辨认、探索订单户数据时,数据量大略在每天八千万到一亿条。之前咱们每天要花大略 3 个小时去解决数据,批改数据十分艰难。当初应用 DolphinDB 提供的一站式服务只须要花 30 分钟即可实现解决,应用变得十分便捷。
在做高频量化交易时,模型和参数的迭代是很快的,选取以周为单位、一年的历史数据曾经在单机上占用了很大内存。咱们之前应用 512GB 内存的服务器钻研无关市场构造的课题,想以整个市场截面查问很多证券的操作状况,须要的数据量大略在 500GB 左右,常常会超限。
所以咱们须要做一套分布式的解决零碎,这对咱们团队的代码编写和程序设计能力有很高的要求。因为咱们不是并行处理方面的专家,我会用 Python 或者 MATLAB 在多节点中离开计算,但面对数据在 500GB 以上的场景时还是比拟力不从心,须要用小的截面重复去做,而后统计所有截面数据寻找相关性。这块工作的强度很大,并且须要破费不少工夫。
然而在应用 DolphinDB 后,钻研变得十分不便。所有节点的总内存是 1.0TB,DolphinDB 解决这个规模数量级的数据是比较稳定疾速的,能够主动进行分布式计算。
其次,DolphinDB 上手快,学习门槛低。因为 DolphinDB 的脚本语言是类 SQL 的逻辑,我会安顿学生先学习 SQL,学会用 SQL 读取数据后,再学习应用 DolphinDB Script 进行简单操作。因为学生都有 Python 根底,在学习 SQL 后大略一个礼拜就能上手 DolphinDB。教学内容包含数据导入、查问、策略回测和 DolphinDB 的一些个性操作如表拼接等。对于学金融和量化投资的学生来说,DolphinDB 是一套上手容易、应用敌对的数据库。
6 综上所述
基于 DolphinDB 研发的量化高频数据中心零碎很好地满足了每天进行实时策略回测、模仿交易等业务的需要。不论是学校的科研项目,还是与券商、基金公司等单干的我的项目,尤其在高频量化场景等重要场景中,都会应用这套零碎来开发相应的策略和利用。目前 DolphinDB 曾经正式成为我的量化投资和程序化交易课程中十分重要的一部分。我认为 DolphinDB 好学、好用、好保护,非常适合 IT 力量薄弱的机构。咱们与 DolphinDB 的单干是相互尊重、敌对踊跃的,诚挚心愿将来能够有更多的单干机会。