SYSN.DTA 存放系统提供的公式 USERDATA 下的文件: BLOCK 文件夹下的文件: SELF 文件夹下的文件: TABLE 文件夹下的文件: SelfData 文件夹下的文件:
Pattern 文件夹下的文件 *.PIN 模式匹配设计 *.PWT 模式匹配方法 S potAna 文件夹下的文件 : *.SPT 定位分析结果 Relate 文件夹下的文件 : *.RTL 相关分析结果 Posible 文件夹下的文件 : *.PSB 预测分布设计 DATA 件夹下的文件: 大智慧新一代 2大智慧二和大智慧三的日线数据格式没有变化。这个文档适用于c++开发人员。 以深圳为例 数据放在 C:\dzh2\data\sz\day.dat 数据结构共分三个结构体: 1. 开始部分,存放一些全局数据的结构体(共24个字节) 由0x00 - 0x17开始 起止地址 数据内容 数据含义 数据类型 00 - 03 F4 9B 13 FC 日线文件标志 Integer 04 - 07 10 02 00 00 保留 Integer 08 - 0B 00 00 00 00 保留 Integer 0C - 0F D1 04 00 00 证券总数 Integer 10 - 13 81 0C 00 00 需添加之起始块号 Integer 就是文件的最后,计算方法是 0x41000 + 这个数字 * 8192 14 - 17 48 0C 00 00 当前最后空块号 Integer 最后一个空块 方法同上,就是说写数据,就在这个地方写,写完就在上面地方新增加新的块
2. 存放后面具体数据的索引 (64个字节) 由0x18 - 0x58开始,总共有多少由0x0c提供. 从18h开始至40017h每64byte为一条股票数据分配记录,含义下表18h - 57h所示 起止地址 数据内容 数据含义 数据类型 18 - 21 31 41 30 30 30...FF 证券代码 Char[10] 22 - 25 B0 09 00 00 日线记录数 Integer 26 - 57 16 00 17 00...FF FF 记录块号 Word[25]
3. 具体数据的内容(32个字节) 0x41000开始 8192 = 256 * 32 从41000h开始每8KB为一股票数据存储块,每个股票数据存储块共存储256条日线记录,每一条记录的长度为32 byte(含义如上表;上涨家数及下跌家数只对指数有效); 从41000h开始的8KB为第0号数据存储块,以后类推; 系统对每个股票日线数据存储以存储块为单位进行分配。 日期字段的意义为:实际日期 = StrToDate(^1970-01-01^)+(日期字段 div 86400);即“日期字段”除以86400所得数为实际日期距1970年01月01日的天数。 对于c++来说直接用__time32_t类型直接出来就是日期(vs2005中,这个代表32位时间类型值,在vc6中直接用time_t即可【vc2005中time_t代表64位时间值】) 起止地址 数据内容 数据含义 数据类型 41000 - 41003 80 47 B2 2B 日期 Integer 41004 - 41007 B9 1E 25 41 开盘价 Single 41008 - 4100B CD CC 4C 41 最高价 Single 4100C - 4100F EC 51 18 41 最低价 Single 41010 - 41013 9A 99 41 41 收盘价 Single 41014 - 41017 80 06 B2 47 成交量 Single 41018 - 4101B 40 1C BC 4C 成交金额 Single 4101C - 4101D 00 00 上涨家数 Word 4101E - 4101F 00 00 下跌家数 Word struct DAY_DATA { __time32_t date; float open; float high; float low; float close; float amount; float money; unsigned short int rise; unsigned short int fall; }; 大智慧版块数据格式关键的数据文件plank.ctf,plank.cxt。 其中ctf文件存放的是一个目录,是平行结构的。 而cxt文件则是存放具体板块下的股票代码数据。 格式分别为: ctf格式: 该文件最前面的124个byte数据最好是舍弃不要。因为首先是基本上没有数据,其次,格式似乎跟后面的有些出入。从125个byte开始,每18个byte为一个板块的数据。 0~1 为某板块的股票个数 2~9 为该板块的名称(中文) 10~13 为该板块的股票的起始位置,该位置与cxt中对应。后面会详细介绍。 14~17 为该板块的股票的截止位置。同上。 该文件中间部分存在着很多无法正确获取名称的板块,但格式与这里是完全一致的。 cxt格式: 该文件,每12个byte为一个股票的数据。 0~3 为该股票的位置。此位置与ctf中的位置完全对应。 4~9 为该股票的代码 10~11 。 读出来后,ctf举例读出 板块名称 股票数 起始位置 截止位置 准权证 3 6545 6547 cxt中可以对应的找到 股票代码 位置 000752 6544 600873 -1(即那堆FFFF) 600688 6546 600795 6547 600028 -1 此时,从600688开始一直到600028就都是准权证板块的了。即起始位置所标注的下一个股票,截止位置所标注的下一个股票。就好了。这样通过这两个表的相互配合,就可以完成所有板块以及相关股票的对应关系了。 大智慧日K线的数据结构一、数据文件和数据结构: 大智慧数据文件和数据结构:(假设大智慧股票行情软件安装在D:dzh目录下) 上海日线存储路径为:D:dzhDATASHaseDay,文件扩展名为:.day 上海周线存储路径为:D:dzhDATASHaseweek,文件扩展名为: .wek 上海月线存储路径为:D:dzhDATASHasemonth,文件扩展名为: .mnt 深圳日线存储路径为:D:dzhDATASZnseDay 深圳周线存储路径为:D:dzhDATASZnseweek 深圳月线存储路径为:D:dzhDATASZnsemonth 周线,月线格式与日线格式一致. 以深发展日线为例: 1A76:0100 D6 CD 2F 01 52 07 01 00-52 07 01 00 52 07 01 00 1A76:0110 52 07 01 00 86 0F 00 00-4D 02 00 00 00 00 00 00 1A76:0120 00 00 00 00 00 00 00 00-D7 CD 2F 01 60 03 01 00 1A76:0130 60 03 01 00 60 03 01 00-60 03 01 00 82 05 00 00 1A76:0140 D4 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 每一条记录的长度为40字节: 1-4字节为日期,D6 CD 2F 01转换为十进制是:19910102 5-8字节=开盘价(元)*1000 9-12字节=最高价(元)*1000 13-16字节=最低价(元)*1000 17-20字节=收盘价(元)*1000 21-24字节=成交金额(元)/1000 25-28字节=成交量(手) 其余12字节未使用 实现步骤: 1、先定义日线数据结构数组 2、再以实际记录数分配动态数组空间 3、然后把数据读入相应数组中 日线数据放在:%app_dir%\DATA\SHase\Day(上证A股) 以及 %app_dir%\DATA\SZnse\Day(深圳A股) #pragma once struct DZH5Day { unsigned long date;//date的格式:20070423 unsigned long open;//开盘价 unsigned long high;//最高价 unsigned long low;//最低价 unsigned long close;//收盘价 unsigned long moneysum;//成交金额 unsigned long turnover;//成交数量 char unused[12];//保留 }; 整个结构共40个字节,读者可以查看所有的日线文件,大小肯定是40的倍数 这样很容易读出相应的数据: 如: FILE* pFile = fopen('600001.day', 'rb'); if (NULL != pFile) { while(!feof(pFile)) { DZH5Day dayK; fread(&dayK, sizeof(DZH5Day), 1, pFile); ...... } } 大智慧Internet版 5.58.2760 的数据格式上海日线数据目录: C:\dzh\DATA\SHase\Day 深圳日线数据目录: C:\dzh\DATA\SZnse\Day 每个数据块40个字节。 每个文件一开头就是日数据,不像有些股软数据开始有一些格式。 每日数据一共为40个字节。 第一个四字节:日期,转换为十进制即可。 第二个四字节:开盘,除以1000 第三个四字节:最高,除以1000 第四个四字节:最低,除以1000 第五个四字节:收盘,除以1000 第六个四字节:成交额,除以10 第七个四字节:成交量 第八个四字节:散户线 第九个四字节:似乎无用 第十个四字节:似乎与散户线有关 下边以601988为例说明一下: 打开文件601988.day,看到最后四十个字节为: EC 1A 32 01 C6 0C 00 00 DA 0C 00 00 BC 0C 00 00 D0 0C 00 00 A9 5D 01 00 02 2C 04 00 D3 00 00 00 00 00 00 00 00 00 00 00 第一个四字节:EC 1A 32 01,十六进制为0x01321AEC,转换为十进制就是20060908,是日期 第二个四字节:C6 0C 00 00,十六进制为0x0CC6,转换为十进制就是3270,除以1000为3.27,是开盘价 第三个四字节:DA 0C 00 00,十六进制为0x0CDA,转换为十进制就是3290,除以1000为3.29,是最高价 第四个四字节:BC 0C 00 00,十六进制为0x0CBC,转换为十进制就是3260,除以1000为3.26,是最低价 第五个四字节:D0 0C 00 00,十六进制为0x0CD0,转换为十进制就是3280,除以1000为3.28,是收盘价 第六个四字节:A9 5D 01 00,十六进制为0x00015DA9,转换为十进制就是89513,除以10为8951.3,是成交额 第七个四字节:02 2C 04 00,十六进制为0x00042C02,转换为十进制就是273410,是成交量 第八个四字节:D3 00 00 00,十六进制为0xD3,转换为十进制为211,散户线 大智慧新一代逐笔数据格式(L2D文件格式)在Level-2之前,沪深交易所提供的都是行情快照,大家看到的分笔成交其实是两次快照期间累计的成交量和最后一笔的价格,而逐笔成交则是真实的每笔成交价和成交量的明细数据。逐笔成交极大地提高了行情的透明度。 Level-2的逐笔成交数据是缓存在dzh2\data\sh\TEMP目录下,文件名以证券代码为名,后辍是.L2D,如果重启大智慧,L2D文件会全部被删除,而且临时文件只有在浏览过该证券的逐笔成交后才会生成。 此文档只公布部分L2D格式:
20个字节为一个记录块,一共为320个记录块。 大智慧新一代4.01版本 最新行情数据结构文件名是STKINFO60.DAT 文件的目录结构如下图: 代码10个字节 大智慧新一代一分钟线大智慧1分钟线是通过分笔数据转换而来: 分笔数据解析格式得到结果如下: 1分钟线 由开盘 收盘 最高 最低 成交量 成交金额组成 举例说明 9:31一分钟线如何获得:
大智慧新一代分笔数据PRP格式(大智慧L2分笔数据PRP格式)大智慧新一代分笔数据PRP格式(大智慧L2分笔数据PRP格式) 分笔数据保存 C:\dzh2\data\sh\20071025.prp 起止地址 数据内容 数据含义 数据类型 00 - 03 F4 9B 13 FC 日线文件标志 int 04 - 07 10 02 00 00 未知 int 08 - 0B 00 43 DF 46 1970.01.01 00:00:00始的秒数 int 0C - 0F 5D 05 00 00 证券总数 int 10 - 13 ED 20 00 00 未知 int 14 - 17 ED 20 00 00 未知 int 18 - 21 30 30 30 30 30 31 00 00 证券代码 byte[10] 22 - 25 9C 12 00 00 日分笔记录数 int 26 - 57 00 00 BA 03...FF FF 记录块号 char[25] 00041000 记录页起始点, 每记录长: 0x34 = 52 每页记录数: 0xEC = 236 每页长: 每记录长0x34 * 每页记录数0xEC = 0x2FF0 = 12272 地 址 数据内容 数据含义 数据类型 41000 - 41003 35 FA DF 46 1970.01.01 00:00:00 始的秒数 int 41004 - 41007 00 00 18 41 最新价 float 41008 - 4100B 00 80 B4 43 累计成交量 float 4100C - 4100F 80 46 A7 48 累计成交金额 float 41010 - 41011 51 9C 累计成交笔数 char 41012 - 41013 00 00 未知 char 41014 10 累计成交笔数的溢出标志(00|10) byte 41015 80 买入,卖出标识(80|E0买入,C0|A0卖出) byte 41016 - 41017 23 01 委买量1 char 41018 - 41019 8E 5B 委买量2 char 4101A - 4101B 80 27 委买量3 char 4101C - 4101D 8E 5B 委买量4 char 4101E - 4101F B8 40 委买量5 char 41020 - 41021 23 01 委卖量1 char 41022 - 41023 8E 5B 委卖量2 char 41024 - 41025 80 27 委卖量3 char 41026 - 41027 8E 5B 委卖量4 char 41028 - 41029 B8 40 委卖量5 char 4102A 16 委买价1 与成交价的差 byte 4102B 9A 委买价2 与成交价的差 byte 4102C 80 委买价3 与成交价的差 byte 4102D 40 委卖价4 与成交价的差 byte 4102E 30 委卖价5 与成交价的差 byte 4102F 57 委卖价1 与成交价的差 byte 41030 68 委卖价2 与成交价的差 byte 41031 69 委卖价3 与成交价的差 byte 41032 7A 委卖价4 与成交价的差 byte 41033 81 委卖价5 与成交价的差 byte 注意: 1.数据类型为JAVA数据类型定义,实际读数据时应该将数据十六进制取反,如:41000 - 41003的数据为 35 FA DF 46,实际应该读成:0x46DFFA35 = 1189083701, 这个1189083701值就是距1970.01.01 00:00:00 始的实际秒数。其他int,float,char都是这样取反的。 2.委买卖与成交价的差,是小数点后的整数差,如果买卖标识为80或C0,成交价小数点后是两位(股票),如果买卖标识为E0或A0,成交价小数点后是三位(权证等) 3.累计成交笔数如果溢出,则41014位上的值不为00,而是10或者20,30等,成交笔数计算方法应为:41014位上的值取第一位,10取前面的1,20取前面的2。。。 再与41010 - 41011位上的值合并成一个16进制串,本例中,实际值应该为0x19C51。 4.记录块号计算方法:char[0] = 0x00 第一个记录块起始地址为:41000h + 0x0000 * 0x2FF0 = 41000h,char[1] = 0x03BA 则第二个记录块起始地址为:41000h + 0x03BA * 0x2FF0 = 0x00077F78 5.记录块号计算方法:char[0] = 0x00 第一个记录块起始地址为:41000h + 0x0000 * 0xEC = 41000h,char[1] = 0x03BA 则第二个记录块起始地址为:41000h + 03BA * 0xEC = 0x00077F78 上面的页长应该是0x2FF0,而不是0xEC。 大智慧新一代Level-2日线文件day.dat数据格式数据格式几乎与分析家相同 起止地址 数据内容 数据含义 数据类型 00 - 03 F4 9B 13 FC 文件标志 int 04 - 07 00 06 00 00 未知 int 08 - 0B 00 00 00 00 保留 int 0C - 0F 97 04 00 00 证券总数 int 10 - 13 00 18 00 00 未知 int 14 - 17 DB 17 00 00 未知 int 18 - 21 31 41 30 30 30...FF 证券代码 byte[10] 22 - 25 B0 09 00 00 日线记录数 int 26 - 57 00 00 25 04...FF FF 记录块号 char[25] ...... 记录块开始于0x41000 41000 - 41003 80 47 B2 2B 日期 int 41004 - 41007 B9 1E 25 41 开盘价 float 41008 - 4100B CD CC 4C 41 最高价 float 4100C - 4100F EC 51 18 41 最低价 float 41010 - 41013 9A 99 41 41 收盘价 float 41014 - 41017 80 06 B2 47 成交量 float 41018 - 4101B 40 1C BC 4C 成交金额 float 4101C - 4101D 00 00 上涨家数 char 4101E - 4101F 00 00 下跌家数 char |
|