转帖保存,据为己用。
转自:http://fandatou.spaces.live.com/blog/cns!BEFEC9CB9A2D6E5D!127.trak
大智慧二和大智慧三的日线数据格式没有变化。这个文档适用于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;
};