• 核新同花顺数据结构


    核新同花顺数据结构(一):总览

    同花顺采用了简易的数据库组织方式。在同花顺的发布文件包中包括了SQLite 3的驱动,但不是很清楚同花顺是如何使用这个驱动的。基本上,对同花顺数据结构的解析不需要这么复杂,同花顺发布文件包中的SQLite文件被核新程序员重新编译过,不过就与SQLite Manager的简单配合使用来看,并不影响对标准数据库文件的读取,当然,也不支持把同花顺数据文件当成标准的数据库文件进行读取。

    基本上,同花顺的数据文件可以分为两类,一类是history下行情数据文件,另一类是finance下财务数据文件。

    在history下的数据文件,通过子目录名称识别市场代码,通过子目录下的文件名称识别交易标的(包括股票、期货等等)。文件格式采用的是简单格式,每个数据文件分别由:

    • 文件头;
    • 列定义;
    • 内容;

    三个部分组成。

    在finance下的数据文件,采用的是单文件容纳所有品种数据的方式,因此采用的是复合格式,每个数据文件分别由:

    • 文件头;
    • 列定义;
    • 填充区域;
    • 复合索引数据块;
    • 内容;

    五个部分组成。

    文件头

    文件头固定为16个字节,包括:

    • byte [6],6 字节长度,固定为 {0x68,0x64,0x31,0x2E, 0x30,0x00},用于识别数据文件类型;
    • dword,4 字节长度,记录“内容”区域的记录条数;
    • word,2 字节长度,记录“内容”区域的开始位置(权息和股本结构需要+0x10000);
    • word,2 字节长度,记录“内容”区域每条记录的字节长度;
    • word,2字节长度,记录“列定义”的列个数(高字节可能不是0x00,需要去除);

    列定义

    列定义固定为4 个字节一组,标示一个列,第4 个字节为列内容的字节长度,由于是使用1 个字节表示,因此数据文件每列的最大长度为255个字节。

    填充区域

    在finance目录下的数据文件,采用的是包括索引的复合格式存储。在列定义和符合索引数据块之间存在着一个未使用的填充区域,填充区域的长度总是列定义数量的两倍,即文件头偏移 0x0E 处 WORD 类型 * 2。

    就目前所知,这一区域基本上都使用 0x00 填充,可能是保留未来使用。

    复合索引数据块

    在finance目录下的数据文件,文件的“内容”区域并不包含记录所隶属的证券品种,而是把此内容放置在一个单独的索引区域。索引区的开始位置 = 0x10 + 0x04 * 列定义数量 + 0x02 * 列定义数量。

    复合索引数据块由三个部分组成:

    • word,2 个字节,记录本索引数据区域的字节长度;
    • word,2 个字节,记录本索引数据区域中所包含的索引的条数(高字节需要&0x1FFF);
    • byte[],不定长的索引记录,每条索引记录为18个字节长度,因此总长度 = 索引条数 * 0x12;

    索引

    每条索引的长度为18个字节,格式分别为:

    • byte,1 字节长度,标识证券品种类型,目前已知的包括3 类4 种标示,分别是:0x10,国内证券;0x48和0x50,港股;0x4A,基金。在“权息资料”中,使用0x50标示港股,在“现金流量”中,使用0x48标示港股,不知道是设计的 bug,还是存在其他用意;
    • byte [9],9 字节长度,标识交易品种的符号,目前已知是ASCII格式,从整个文件的多字节字符处理来看,文件的整体字符编码应该是GB2312编码,因此这一部分原始的处理应该是使用GB2312编码通读;
    • word,2 字节长度,标识隶属此交易品种的记录区域中实际上未使用的记录条数,有关的组织方式下面再详细解释;
    • dword,4 字节长度,标识隶属于此交易品种的记录的开始下标,注意是记录在数据文件中从0 开始排列的顺序号,而不是文件的偏移地址,其实际的偏移地址 = “内容”区域的开始地址 + 此开始下标 * 记录的长度;
    • word,2 个字节长度,标识隶属于此交易品种的记录的条数;

    总体来说,存在索引的文件其实际的完整数据由两个部分组成,一个就是索引数据区,另一个就是记录内容数据区。其与索引对应的记录内容数据采取分块的存储模式,即,每一个交易品种总是使用一个固定的、连续的内容数据区存储相对应的数据,因此在实际的数据存储过程中,存在着并未被实际使用的“空余”记录的数据区。

    复合文件通过两个方法来识别有效和无效的记录,首先,索引记录其所使用的数据区总容纳的记录条数和未被使用的、无效的记录条数,两者相减可知被实际使用的记录条数;其次,复合文件的记录总是使用一个类型为Int32的4 字节用于标识时间的列开始,如果这个列的值为<=0,则表明这是无效的数据记录。

    内容

    数据内容开始的地址偏移在文件头0x0A处的一个word类型的2字节数据指示,其有效长度 = 列长度 * 记录条数。

    附录

    同花顺的数据文件读取器和支持类库在 https://sourceforge.net/projects/ociathena/ 项目下的对应分类。

    股票软件同花顺的日数据格式

     

     

       收股市封涨停的消息鼓舞,应别人邀请研究了一下貌似很火的‘同花顺股票软件’的日数据结构,是52个字节的struct,包含开盘价,最高价,最低价,收盘价,成交量,成交额度,外盘,内盘。btw,股票我是个门外汉,命名不专业在所难免.我用的是同花顺v4.40.90版

    结构如下:

    struct stock
    {
        unsigned short open; //开盘

        unsigned short b; //填充

        unsigned short high; //最高

        unsigned short d; //填充

        unsigned short low; //最低

        unsigned short f; //填充

        unsigned short avg; //均价

        unsigned short h; //填充

        unsigned int volume ;//成交量

        unsigned int amount ; //成交额度

        unsigned int outside; //外盘

        unsigned int inside; //内盘


    };

     

     

    盘后乾隆、分析家的数据是没有加密的  
      乾隆是每个股票一个文件  
      分析家是索引+数据块的结构  
      自己慢慢分析吧,很简单的  
      网络传输的实时行情是加密的,其实也算不上加密,只是把实时传送数据压缩了一下,降低带宽占用而已  
      压缩方法是保密的^_^  
        

    通达信的历史分时数据都是在内存中的,本地不保留  
      具体的数据结构,我也忘记了,我都是用现成的类来读写数据  
      索引中,记录了各支股票开始的文件地址  
      下面是数据块中一条记录的结构  
      时间、开、高、低、收、成交量、成交额  
      time   open   close   low   high   vol   amount  
      除了时间是time_t,其它都是float

  • 相关阅读:
    ECharts学习总结(四):echarts的实例方法
    ECharts学习总结(三):ECharts图表对象的初始化(init)详解以及注意事项
    ECharts学习总结(二):标签式单文件引入echarts的方法
    ECharts学习总结(一):ECharts的第一个图表
    Eclispe最常用的几个快捷键
    javascript数组去重的4个方法(转)
    数据库主键设计之思考(转)
    数据库插入数据返回当前自增主键ID值的方法
    Node.js制作图片下载爬虫的一般步骤
    Node.js mzitu图片批量下载爬虫1.00
  • 原文地址:https://www.cnblogs.com/shgq/p/4403010.html
Copyright © 2020-2023  润新知