十年期货股票行情数据轻松处理——TDengine在同心源基金的应用
同心源(三亚)基金 刘健 Dec 08, 2021 / 分类 Chinese、 用户案例、 置顶推荐

小 T 导读:同心源(三亚)基金管理有限公司是一家致力于采取科学方法,在二级市场进行投资的私募公司。公司的团队成员均来自于国内外优秀大学,创始人具有计算机博士学位,有多年的算法研究、软件系统开发的经验。

从我司的业务模式出发,业务人员主要通过数据挖掘和自动模式识别这两种方式来发现市场的交易规律。因此,我们的工作场景是基于大量的金融数据之上的,主要包括如下几类:

国内期货市场的实时高频数据,逐笔数据等
国内期货市场的历史高频数据,逐笔数据
国内股票市场的高频数据,逐笔数据等
国内股票市场的历史高频数据,逐笔数据
依据以上数据产生的更大量级衍生数据

经过多年发展,股票市场数据量十分庞大,随着每日新数据的清洗写入,总量变得更加水涨船高。对于十几TB的数据量,单是进行存储已经不易,如果还要对数据进行查询下载等操作,更是难上加难。这些问题横亘眼前,也让我们对市面上的主流数据库逐渐丧失信心。

后来,经过专业人士的引荐,我们尝试了TDengine,没想到它轻轻松松地就适配了我们的当前业务。

具体实践与落地效果

选好数据库之后我们马上开始了搭建,并选择了当时最新的2.1.3.2的版本部署落地,不同数据种类对应的数据库分别如下:

1)股票高频数据库,包括股票市场的历史数据+每日新增数据:

这类数据每日通过Python连接器的方式,在收盘后批量导入再做分析。其中每个表代表一个股票,共85列,以Float数据为主,共32311张。

根据上述表结构计算,当前情况每行大概有408字节的长度,然后我们用脚本对所有表进行了行数查询,大概是320亿行。

以上述数据为基础对入库的总数据量进行下估算,粗略计算为408*320亿行,大概12TB左右,后面经过统计最终实际占用磁盘空间却只有2T左右,这令我们十分震惊——压缩率高达16.7%。

众所周知,Float类型的数据压缩一直是数据库领域的一个难题,尤其是对于行式存储的数据库更是困难,高兴之余也非常感谢TDengine的列式存储,帮助我们完美解决了这个棘手的问题。

之后从官方人员处我们得知,在后续版本中,TDengine还对浮点类型数据做了更进一步的算法优化,压缩率还能获得大幅提升。只不过目前需要手动编译,具体操作方式可以联系官方人员。

2)期货库:

期货库是部署在另一个服务器上的,有如下三个:期货高频数据库、期货X频率数据库、期货Y频率数据库。他们分别代表着国内全部期货的高频数据和不同时间频率的聚合数据:

期货高频数据库:实时记录交易所发送的tick数据
期货X频率数据库:根据时间周期X设定,记录聚合后的数据
期货Y频率数据库:根据时间周期Y设定,记录聚合后的数据

以上三个库分别包含3351、5315、5208张子表,与股票库一样,它们同样包括长期的历史数据以及实时数据。

具体的表结构如下所示:

在查询方面,由于当前我们的查询只是针对单表进行,因此逻辑比较简单,代码如下:

此外,由于期货不存在连续多年的行情,所以对于长期的数据展示,我们选择用多段的每X个月数据进行拼接,查询效率非常快。例如:在TDengine客户端服务器使用Python从服务端拉取连续两个月的期货行情数据,耗时仅需0.16秒。

下图为因子1在期货菜粕上的收益曲线,从这张图中我们也可以看出,一些其他常用的函数比如max、last,基于TDengine的缓存等技术也都实现了毫秒级返回数据。

从“两点问题”到深入合作

细心的读者可能也留意到了文章中的两个小问题:

为什么我们在估算原数据量时,是通过脚本来统计所有子表行数,再将其乘以单行字节,而不是直接通过TDengine的“超级表”?
又为什么在文章开头的数据分类描述中,1-4条都在后文中都看到了实际对应的数据库,但是唯独没有出现第5条——依据以上数据产生的大量衍生数据?

其实是这样,由于项目初期没有多表聚合查询的需求,外加为了降低数据迁移的复杂度,因此在环境搭建初期时我们并没有选择超级表。

但是随着业务的不断完善,我们将会需要更大量的数据来做更复杂的分析,这也就出现了第5条的数据种类——依据以上数据产生的更大量级衍生数据。所以说,这部分数据将来源于我们后面的待上线业务中。

届时,我们将会更深入地用到TDengine的其他核心特性,如超级表、众多计算函数等等。但仅就当下而言,TDengine强大的存储能力和快速查询已经非常令我们惊喜,也让我们对未来更加深入的合作充满期待。

关于作者:

刘健,北京航空航天大学模式识别专业硕士学历,曾经供职于中国航天科技集团从事软件研发工作。2014年与朋友一起创业从事外汇、期货、股票ETF的自动交易至今。着重致力于通过数据挖掘、自动模式识别等方式在国内二级市场中进行自动量化交易。

十年期货股票行情数据轻松处理——TDengine在同心源基金的应用相关推荐

  1. 【数据知多少】一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)

    金融量化交易几种免费获取股票行情数据的方法 一.免费行情数据获取方式介绍 1.Tushare 简介 安装 代码仓库 说明文档 2. AKshare 简介 安装 代码仓库 说明文档 3. baostoc ...

  2. python 行情数据,拼多多股票:Python获取股票行情数据的一种方法

    Python获取股票行情数据的一种方法 拼多多股票 本号帮大家找了一个可免费获取股票行情数据的接口. Tushare社区目前主要维护新版本:tushare pro,数据更稳定拼多多股票质量更高,可获取 ...

  3. 爬取东方财富网股票行情数据和资讯

    爬取东方财富网股票行情数据和资讯 这个需求源于我的一个练手项目 本篇博客参考:https://zhuanlan.zhihu.com/p/50099084 该博客介绍的东西本博客不做论述 使用技术: 语 ...

  4. 【读书笔记】抓取深圳或上海股市,或香港美国等有关股市某时间段内全部股票行情数据,进行主成分分析构造你个人的股市指数

    抓取深圳或上海股市,或香港美国等有关股市某时间段内全部股票行情数据,进行主成分分析构造你个人的股市指数,然后分析你的私家指数和该股市常用官方股票指数的相关性,判断主成分分析在构造股市指数上是否可用. ...

  5. JS获取新浪实时股票行情数据

    转自:http://blog.csdn.net/simon803/article/details/7784682 股票数据的获取目前有如下两种方法可以获取: 1. http/javascript接口取 ...

  6. 使用C#爬取网页港股股票行情数据——附C#源码

    GitHub地址:TEST/HttpWebRequest at master · yangwohenmai/TEST · GitHub 爬取港交所数据最大的问题是如何获取港交所页面的Token,有了T ...

  7. 量化投资只能通过股票行情数据接口获得实时数据吗?

    我们在做量化交易的时候,都需要用到大量的行情数据,但是问题来了,这些数据要怎样获得呢? 通常来讲获取实时数据的方法有两种,一个是通过股票行情数据接口获得,另一个是通过网络上的一些开放平台获取. 我们先 ...

  8. easytrader交易接口推介:如何使用股票行情数据接口打板策略快人一步?

    easytrader主要原理是利用python函数pywinauto自动获取同花顺上相应控件的值,进行模拟自动化的操作,不得不说python函数库的强大,其它语言非常也能做到. 你想靠自己运用非常少的 ...

  9. 新浪股票行情数据接口有什么作用?

    通过新浪股票行情数据接口可以让投资者在实际交易当中能够更加精准的洞悉盘口变化.该接口可以说是目前最好用的免费股票行情数据接口了,虽然一直并未公开,但暂时使用良好.大家用浏览器访问新浪的股票行情数据接口 ...

  10. php 获取新浪股票行情数据,python 抓取新浪财经股票数据

    新浪并未提供API,但我们可以通过抓包来获取实时或历史行情数据. 实时行情 比如我们可以通过浏览器访问: ?== 来获取证券代码为的实时行情数据,可以看到内容为: ="华泰证券,,,,20. ...

最新文章

  1. lombok 不用再写pojo的getset
  2. java mytable_Mybatis-Plus之@TableField字段
  3. Java集合框架:LinkedHashMap
  4. [C++11]override关键字的使用
  5. leetcode1221. 分割平衡字符串(贪心算法)
  6. 新计算机无法 盘启动不了,U盘无法被电脑识别导致制作U盘启动盘失败怎么办?...
  7. 数据分析李小璐PG one出轨门自卫反击战
  8. bat脚本交互输入_windows 10 如何设定计划任务自动执行 python 脚本?
  9. 北京市丰台区卫星地图下载
  10. WBS图表概念及绘制
  11. 什么是中台,为什么要中台?一篇文章带你了解中台的概念!
  12. vue3+ts+vite 路径别名配置
  13. 用 Java 实现一个远程控制客户端
  14. 关于ARM的内核架构
  15. ×××未了的黄河情结
  16. IDEA java编译中出现了Exception in thread “main java.lang.UnsupportedClassVersionError
  17. Leetcode.463 岛屿的周长
  18. 核心圈好图书推荐(二)
  19. 崩坏3渠道服扫码登录桌面版的方法教程
  20. [ROS2 Foxy]#1.1 ROS2安装

热门文章

  1. Linux服务器配置——安装CentOS以及源配置
  2. 扩展的几个应用 发布网络YUM源 vim编辑技巧 源码编译安装 systemctl控制
  3. windows 下 nginx 的反向代理学习整理
  4. iOS Swift 2 2 监听耳机的 插拔的事件
  5. Android开发学习路线图
  6. ----解决input输入框type=number时候去除增减按钮 禁用滚轮事件----
  7. Vultr VPS修改root密码的方法
  8. absolute之后居中宽度自适应
  9. Cocos2d-x3.0-倾斜列表
  10. Farseer Physics Engine