zoukankan      html  css  js  c++  java
  • TICK回测二:数据如何存储

    一、概述

      前一节讲了如何用极星每日批量获取TICK数据,并存到CSV文件,存储格式是:

      【合约编号,时间戳,最新价】

      比如:ZCE|F|AP|112,20211102145321750,8035.0

      交易日11月2日,跑了ZCE全部198个合约,得到了676569条记录,CSV文件25M

      交易日11月3日,跑了ZCE全部198个合约,得到了755613条记录,CSV文件28M

      如果以此类推,一年约需要6600M的空间,3家交易所就是19.8G/年。想想其实也还好,但是不压缩压缩就不高端了是吧,而且上期的品种比较活跃,可能一个顶两也说不定,所以我们要考虑数据的压缩和存储。

    二、数据压缩

      1、合约编号没必要没必要每一行都写,可以每一个合约整一个目录,这样至少省了1/3的空间了

      2、日期也没必要每一行都写,年月日也是可以用目录的形式,存行情的文件只需要写时分秒+最新价即可

      那么下图中的存储方式应该就是兼具实用和压缩的最佳解了,测试了一下最终数据大小是12.8M,有效压缩了不少。

      3、进一步压缩(经典办法)

      可以看到,除了数值外,时间是会一直重复出现的数,而且占了9位。最经典的压缩方法就是将两两数字映射成一个ASCII字符,比如

        0 - 9 = 0 - 9

        a - z = 10 - 35

        A - Z = 36 - 61

      时间显示中,最多24小时、60分钟、60秒,所以14时05分52秒可以映射成e5Q这样的字符,妥妥的缩小了1倍空间。

      接着我们看毫秒位只显示了000、250、500、7500四种情况,所以也可以简单映射下000=A、250=B、500=C、750=D。

      于是14时05分52秒750毫秒就映射成了e5QD,字符串的宽度由9位变成了4位超过50%的压缩比,实测了一下最终大小是8.68M。

      

      4、继续压缩(差值法)

      我们可以注意到,行情的数值经常是重复且连续的,像下图这样,就是重复的4个数值。同时772.0完全可以理解为772.2-0.2,那么我们能不能用前后差值的办法来进一步压缩数据呢。

        比如像下图这样,对于数值越大的效果越明显。

      实测结果是6.95M,效果不错。

      5、用差值法来压缩时间

      前面用差值法来压缩数字效果很好,如果时间也用差值法是否可行呢?我们试试看。

      可能需要做一些调整,首先不能用年月日时分秒这样的时间格式,得用时间戳,不然不好做减法对吧。其次毫秒位要单独拉出来继续按ABCD映射,因为本来就只占一位,没必要搞什么减法了。但前面时间戳的差值位数不好说,所以可以将毫秒位映射的字母放在最前面。大概是下面这个意思:

      2021-11-06 14:55:27.250  ->   B1636181727

      2021-11-06 14:55:28.500  ->   C1

      2021-11-06 14:55:29.000  ->   A1

      实测结果是5.64M,效果并不明显,而且往回转的时候比较麻烦,所以时间还是用ASCII码来压缩。

    三、总结

      最终我采用了时间用ASCII码映射的办法,数值部分用差值法,总体压缩率在25%左右,还算是有一点用处。

      还有没有进一步压缩的空间呢?有的,但是没有必要的,一家交所全部合约,一天的数据不到7M,够了,就算再压缩一倍到3.5M,没有意义了,不是数量级的差异。

  • 相关阅读:
    vue长按事件
    video标签视频自动播放
    express路由的使用
    Java的堆栈和堆
    MongoDB建库db、建集合collection以及其他常用命令
    计算机网络基础-目录
    如何清除tomcat缓存
    tomcat/logs目录下各日志文件的解析
    在Windows系统和Linux服务器安装MongoDB和基本使用
    [转]/tomcat/conf/server.xml配置文件的源码解析
  • 原文地址:https://www.cnblogs.com/cation/p/15506884.html
Copyright © 2011-2022 走看看