本教程示例DolphinDB搭建行情回放服务的具体操作步骤如下所示:
本教程示例DolphinDB搭建的行情回放服务架构如下所示:
回放的原理是从数据库中读取需要的行情数据,并根据时间列排序后写入到相应的流数据表。读数据库并排序的性能对回放速度有很大的影响,合理的分区机制将有助于提高数据加载速度。基于用户通常按照日期和股票提交回放请求的特点,设计了上表的分区方案。
本教程实现的行情回放服务基于3类国内A股行情数据源:逐笔委托数据、逐笔成交数据、Level2快照数据,支持以下功能与特性:
行情回放服务架构
本教程的回放服务基于3类国内A股行情数据源:逐笔成交数据、逐笔委托数据、快照数据,均使用TSDB存储引擎存储在DolphinDB分布式数据库中。
数据源 | 代码样例中的分区数据库路径 | 代码样例中的表名 | 分区机制 | 排序列 | 建库建表脚本 |
---|---|---|---|---|---|
逐笔委托 | dfs://Test_order | order | VALUE: 交易日, HASH: [SYMBOL, 25] | 股票ID,交易时间 | 附录 逐笔委托建库建表脚本 |
逐笔成交 | dfs://Test_transaction | transaction | VALUE: 交易日, HASH: [SYMBOL, 25] | 股票ID,交易时间 | 附录 逐笔成交建库建表脚本 |
快照 | dfs://Test_snapshot | snapshot | VALUE: 交易日, HASH: [SYMBOL, 20] | 股票ID,交易时间 | 附录 快照建库建表脚本 |
1行情回放服务架构
搭建步骤
2回放服务搭建步骤
附录将提供部分原始数据的csv文件以及对应的示例导入脚本,以便读者快速体验搭建本教程所示的行情回放服务。
行情数据分区存储方案
本章的开发工具采用DolphinDBGUI,完整脚本见附录:行情回放函数。
行情数据接入:实时行情数据和历史行情数据可以通过DolphinDBAPI或插件存储到DolphinDB分布式时序数据库中。函数模块封装:数据查询和回放过程可以通过DolphinDB函数视封装内置,仅暴露股票列表、回放日期、回放速率、回放数据源等关键参数给行情服务用户。行情用户请求:需要进行行情回放的用户可以通过DolphinDB客户端软件调用封装好的回放函数对存储在数据库中的行情数据进行回放,用户还可以在客户端对回放结果进行实时订阅消费。此外,支持多用户并发回放。
在第六章将给出多用户多表回放、多天回放的性能测试结果。最后两章为开发环境配置与总结。
C++、Python客户端提交回放请求多个用户同时回放多个数据源同时有序回放在时间有序的基础上支持排序列有序发布回放结束信号对回放结果订阅消费
基于DolphinDB的行情回放服务
一个量化策略在生产环境中运行时,实时数据的处理通常是由事件驱动的。为确保研发和生产使用同一套代码,通常在研发阶段需将历史数据,严格按照事件发生的时间顺序进行回放,以此模拟交易环境。在DolphinDB中,用户通过replay函数可以实现对静态数据的回放,即将历史数据按照时间顺序以“实时数据”的方式注入流数据表中。对相同时间戳的数据还可以指定额外排序列,使数据回放顺序更接近实时交易场景。
此外,本教程的历史数据存储在三节点双副本的DolphinDB集群中,集群和副本同样可以提升读取性能,同时可以增加系统的可用性,分区的副本通常是存放在不同的物理节点的,所以一旦某个分区不可用,系统依然可以调用其它副本分区来保证回放服务的正常运转。
文章为作者独立观点,不代表股票交易接口观点