SYSN.DTA 存放系统提供的公式
*.xml 动态显示牌不同页面布局文件
*.htk 快捷键文件
USERDATA 下的文件:
AUTOBLK.CFG: 自动板块设定
SELF.DTA 存放用户自编的公式
BLOCK 文件夹下的文件:
*.IBK 板块指数定义
*.BLK 板块定义
*.EBK 条件选股结果
SELF 文件夹下的文件:
*.WSV 保存页面文件
ALERT.DAT 历史预警纪录
EXTDATA.INF 扩展数据定义
*.CEP 保存组合条件选股条件
TEMPCMPD.CEP 测试附加条件
*.INV 用户个人投资纪录
*.TPT 保存指标模板
SELF 年月日 .DTA 每日自动公式备份文件
TEST 文件夹下的文件:
*.TST 存放系统测试结果
*.OPT 存放参数优化的结果
PARAM 参数指引文件夹
*.PRM 存放参数指引的结果
TABLE 文件夹下的文件:
*.ESS 数据表文件
*.ESD 数据表文件(带数据保存)
SelfData 文件夹下的文件:
*.str 字符串数据
*.oth 与股票无关序列值数据
Pattern 文件夹下的文件
*.PIN 模式匹配设计
*.PWT 模式匹配方法
S potAna 文件夹下的文件 :
*.SPT 定位分析结果
Relate 文件夹下的文件 :
*.RTL 相关分析结果
Posible 文件夹下的文件 :
*.PSB 预测分布设计
DATA 件夹下的文件:
DAY.DAT 日线数据
EXTDAY.DAT 扩展数据
MIN.DAT 5 分钟线数据
REPORT.DAT 当天的分笔成交数据
STKINFO.DAT 代码表 / 即时行情数据 / 财务数据 / 除权数据
*.PRP 历史回忆数据,一天一个文件
abh.txt A 股、 B 股及 H 股相关信息文件
NEWS 文件夹下的文件:
*.TXT 财经报道、上交所公告、深交所公告
大智慧二和大智慧三的日线数据格式没有变化。这个文档适用于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 最后一个空块 方法同上,就是说写数据,就在这个地方写,写完就在上面地方新增加新的块
struct GLOBAL_DATA { int dayflag; int reserve1; int reserve2; int stocksum; int startblock; int lastblock; }; |
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]
struct INDEX_DATA { char code[10]; int dayrecordnum; unsigned short int reocrd[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就都是准权证板块的了。即起始位置所标注的下一个股票,截止位置所标注的下一个股票。就好了。这样通过这两个表的相互配合,就可以完成所有板块以及相关股票的对应关系了。
一、数据文件和数据结构:
大智慧数据文件和数据结构:(假设大智慧股票行情软件安装在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);
......
}
}
上海日线数据目录: 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,散户线
在Level-2之前,沪深交易所提供的都是行情快照,大家看到的分笔成交其实是两次快照期间累计的成交量和最后一笔的价格,而逐笔成交则是真实的每笔成交价和成交量的明细数据。逐笔成交极大地提高了行情的透明度。
Level-2的逐笔成交数据是缓存在dzh2\data\sh\TEMP目录下,文件名以证券代码为名,后辍是.L2D,如果重启大智慧,L2D文件会全部被删除,而且临时文件只有在浏览过该证券的逐笔成交后才会生成。
此文档只公布部分L2D格式:
位置 |
字节 |
含义 |
示例 |
解码结果 |
0x28 |
4 |
分笔成交总笔数 |
7C 1C 00 00 |
|
0x2a0 |
4 |
时间 |
5E E0 01 00 |
|
0x2a0 + 4 |
4 |
价格 |
B9 17 00 00 |
|
|
2 |
数量 |
|
|
|
2 |
买卖标志 |
|
|
20个字节为一个记录块,一共为320个记录块。
文件名是STKINFO60.DAT
文件的目录结构如下图:
代码10个字节
大智慧1分钟线是通过分笔数据转换而来:
分笔数据解析格式得到结果如下:
1分钟线 由开盘 收盘 最高 最低 成交量 成交金额组成
举例说明 9:31一分钟线如何获得:
开盘 |
就是9:31的第一个时间的价格 15.35 |
收盘 |
15.40 |
最高 |
9:31此分钟最大值 |
最低 |
同上 求最小值 |
成交量 |
此一分钟现手和 666 + 815 + … + 3599 |
成交金额 |
每秒价格*现手 然后将结果相加。 15.35*666 + 15.38*815 + … 154.*3599 |
大智慧新一代分笔数据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。
数据格式几乎与分析家相同
起止地址 数据内容 数据含义 数据类型
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