在之前的推送中,我们给大家介绍了一套可以自己动手搭建的行情回放系统,多个用户可以同时通过 C++、Python 等客户端提交数据回放请求,通过工程化管理的方式来模拟交易环境,详情见《自己动手,搭一套行情回放系统》。
这套回放系统以 DolphinDB 分布式数据库和 replay 回放函数为核心,用户按照教程步骤即可快速搭建。
►►►
行情回放难点在哪?
不同结构的数据如何统一进行排序和注入以保证整体的顺序? 如何保证对多表回放结果的实时消费也是严格按照时序进行的?
►►►
N 对 1 多表异构回放
面对上述多表回放的难点,DolphinDB 提供了异构模式的多表回放,支持将多个不同表结构的数据表写入到同一张异构流数据表中。以下是异构模式的多表回放示例:
orderDS = replayDS(sqlObj=<select * from loadTable("dfs://order", "order") where Date = 2020.12.31>, dateColumn=`Date, timeColumn=`Time)tradeDS = replayDS(sqlObj=<select * from loadTable("dfs://trade", "trade") where Date = 2020.12.31>, dateColumn=`Date, timeColumn=`Time)snapshotDS = replayDS(sqlObj=<select * from loadTable("dfs://snapshot", "snapshot") where Date =2020.12.31>, dateColumn=`Date, timeColumn=`Time)inputDict = dict(["order", "trade", "snapshot"], [orderDS, tradeDS, snapshotDS])replay(inputTables=inputDict, outputTables=messageStream, dateColumn=`Date, timeColumn=`Time, replayRate=10000, absoluteRate=true)
输出表的表结构如下:

目标表中每行记录对应输入表中的一行记录,msgTime 字段是输入表中的时间列,msgType 字段用来区分来自哪张输入表,msgBody 字段以二进制格式存储了输入表中的记录内容。
在回放的过程中,这样的数据结构可以对多个数据源进行全局排序,因而保证了多个数据源之间的严格时间顺序。同时,异构流数据表和普通流数据表一样可以被订阅,即多种类型的数据存储在同一张表中被发布并被同一个线程实时处理,因而也保证了消费的严格时序性。
►►►
行情回放与消费场景

消费场景 1:在 DolphinDB 订阅中实时计算个股交易成本
使用 asof join 引擎实时关联逐笔成交与快照数据,计算个股交易成本并写入结果流数据表,查看结果如下:

消费场景 2:在 DolphinDB 订阅中将回放结果实时推送 Kafka
在终端查看发送结果返回如下:

消费场景 3:在外部程序中通过 C++API 实时订阅与处理
在终端查看程序实时打印的内容如下:

Explore More


文章转载自DolphinDB智臾科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。






