暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

性能提升30倍 | 深度不平衡、买卖压力指标和波动率计算优化案例

376

本案例基于证券交易的 Level 2 快照数据,开发了10分钟频率的深度不平衡、买卖压力指标和波动率的计算脚本。在指标计算函数的处理中,我们通过优化,将计算耗时从450秒降至最低15秒,性能提升了约30倍,一起来看看吧~


本案例所用样本数据与教程代码均已公开发布,可点击阅读原文查看详细内容。


金融场景下往往需要进行指标计算,有时会涉及大量数据和高维多列的复杂运算,因此计算过程的优化水平将决定资源利用率和开发耗时。
针对这一需求特性,DolphinDB 中提供了数组向量(Array Vector),用以存储可变长度的二维数组,这种存储方式可显著简化某些常用的查询与计算。
例如,若不同列中含有大量重复数据,使用数组向量存储可以提高数据压缩比提升查询速度
目前,仅内存表与使用 TSDB 存储引擎的分布式表支持数组向量,OLAP 存储引擎暂不支持数组向量。

01

数据与样本说明

  • 字段:快照中的部分字段,包括股票代码、快照时间、申买十价、申买十量、申卖十价、申卖十量。

  • 样本:2020年上证50指数的成分股,共约28.75亿条快照数据。

  • 分布式表数据总量:2,874,861,174

  • 上证50指数的成分股数据量:58,257,708

  • 逻辑 CPU 核数:8

02

指标定义

  • Weighted Average Price(WAP):加权平均价格

    
  • Depth Imbalance(DI):深度不平衡指标

    
  • Press:买卖压力指标

    
  • Realized Volatility(RV):波动率(定义为对数收益率平方和的平方根,本案例中用加权平均价格代替股价进行计算。)

    
    

03

一图带你读懂优化升级

本案例基于上述计算场景,开发了四份 SQL 代码,下图为大家展示了这四种不同存储计算方式下的性能差异,完整代码可点击阅读原文跳转查看。

04

OLAP 到 TSDB 性能提升原因

本案例中,可以看到 TSDB 存储引擎相比于 OLAP 引擎计算性能有了很大提升,主要原因在于:
  1. OLAP 存储引擎下,成分股涉及的分区内无关证券的数据也需要从磁盘加载到内存,然后进行数据解压、过滤和计算。而 TSDB 方式下,只需将成分股的数据从磁盘加载到内存,进行数据的计算操作。

  2. 针对上交所 Level 2 快照数据,采用 Array Vector 存储后,压缩比可以提升至 9-11;在没有任何缓存的前提下,与多列存储方案相比,单位时间内从磁盘上读取的数据条数提升。

  3. 多档量价数据采用 DolphinDB V2.00 TSDB + Array Vector 方式存储后,实现了在分布式表的某列某行中存储一个向量对象,所以矩阵运算中取某一列的多行数据返回的对象就是一个矩阵,与多列存储方案相比,省去了矩阵拼接过程


点击下方视频查看演示过程:

Explore More



扫描二维码,添加 DolphinDB小助手
点击阅读原文,查看案例详细教程
文章转载自DolphinDB智臾科技,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论