快照行情合成 K 线的规则
最高价和最低价的处理
当日最高价(HighPrice)在当前计算窗口内发生变化,但是当前计算窗口内的所有最新价(LastPrice)并不包含发生在当前计算窗口内的当日最高价。

当日最低价(LowPrice)在当前计算窗口内发生变化,但是当前计算窗口内的所有最新价(LastPrice)并不包含发生在当前计算窗口内的当日最低价。

最低价计算规则说明
成交量、成交额和成交笔数的处理

开盘以后没有成交
部分成交不活跃的股票和基金,09:15:00 开始交易后一直没有成交,但是快照行情会正常推送。

开盘没有成交的股票或基金的快照行情
盘中计算窗口内没有成交

以上情况的处理规则均已包含在 DolphinDB 提供的解决方案中。
基于实时快照行情数据合成 K 线

实时行情数据可以通过 DolphinDB 行情插件、消息中间件插件或各种语言的 API 接入数据库。
基于实时快照行情数据合成 K 线的过程中共涉及3个流处理引擎与3张流数据表:
流数据表1为原始快照行情表,用于接收实时快照行情,并将增量数据及时推送给流处理引擎1。 流处理引擎1是 DolphinDB 的响应式状态引擎 ReactiveStateEngine,主要功能是针对输入数据做滑动窗口处理,即对每一条输入引擎的数据按照指定的计算逻辑处理,实时完成原始行情的加工。
流数据表2用于接收引擎1处理的结果数据,即对原始快照行情加工后的数据,并发布至流处理引擎2。
流处理引擎2是 DolphinDB 的日级时间序列聚合引擎 DailyTimeSeriesEngine,主要功能是基于加工过的快照行情数据做步长和窗口为1分钟的滚动窗口计算。
流处理引擎3同样使用了DolphinDB 的响应式状态引擎 ReactiveStateEngine,用于填充处理缺失的行情。正常情况下,流处理引擎2的输出是每个股票或基金每分钟都有一条数据,但是特殊情况下,例如非常不活跃的股票或基金可能会在某一分钟内不存在行情快照数据,此时流处理引擎2统一用0进行填充。为了符合 K 线的计算规则,比如计算窗口缺失快照行情的 K 线,OpenPrice, HighPrice, LowPrice, ClosePrice 用前一根 K 线的 ClosePrice 填充,流处理引擎3就是在处理这类异常情况。
流数据表3用于接收流处理引擎3最终的输出,即1分钟的 K 线数据。它可以被外部应用订阅,如 Python, C++, Java, C# 等。
注意:
在注册流处理引擎时,由于从流处理引擎2到流处理引擎3用到了引擎级联的功能,所以需要先定义流处理引擎3,然后定义流处理引擎2的时候,才可以指定其输出为流处理引擎3的输入。
流数据表中的数据需要存入分区表才能满足永久保存的需求,将流数据表中实时增加的数据存入分区表的详细代码可参考阅读原文。
同时,DolphinDB 提供了便捷的可视化数据面板配置,基于本方案教程合成的 K 线数据配置数据面板效果如下:

实时计算性能测试


基于历史快照行情合成 K 线
与基于实时快照行情数据合成 K 线类似,在创建数据库和分区表、导入 csv 测试数据后,同样需要对原始行情快照数据进行处理、针对处理后的快照行情进行1分钟窗口和1分钟步长的聚合计算、以及填充缺失的快照行情计算窗口。同时,用户只需对代码进行封装后运行,即可通过并行计算高效合成分钟 K 线。
批量并行计算性能测试


测试证明,DolphinDB 在海量数据的批计算性能上同样表现优异。基于16个 CPU 核心完成1天沪深全市场24,285,866 行原始快照行情的降频 K 线计算只需4.7秒,输出1分钟 K 线数据量为 1,555,440 行。
在此方案基础上,用户亦可使用一套代码实现流批一体 K 线合成,以满足产研一体化需求。用户只需根据教程中基于实时快照行情数据合成 K 线的部分,全速回放全量历史数据,然后将回放所得的 K 线计算结果存入分区表中,即可实现基于历史快照行情合成 K 线。实盘实时计算,则按前文所述,接入实时行情数据即可。
点击阅读原文,可获取测试数据及完整脚本。实践过程中若遇到资源不足,或计算结果与所属计算规则不符等情况,请及时添加小助手(dolphindb1)反馈~
Explore More



扫描二维码,添加 DolphinDB 小助手





