谢谢捷克朋友的解答!
你的每一次回答,都让我感动。
不知你对上述大智慧的有关版块文件的讨论有何新的见解,我盼望着你的指教。
不敢当,你把那几个文件传上来,我可以再试分析一下。 谢谢!
现在我传给你的是大智慧版块文件(3个,在大智慧安装目录\ZHDOC\Base下),它们之间的关系我弄不懂,请指教。
呵呵,请大家先帮你看看板块结构;
正忙着转换宝的其它内容;可以考虑看,那一堆 .cxt .ctf 是不是某个控件的自定义数据;
实在不行,只有硬读,但这样危险性很高的,读还勉强,写的话,实在没把握啊; Originally posted by 捷克 at 2005-5-30 19:41
charbuffer;
..........
fread (buffer,1,6,fp);//
buffer=0;
cout <<buffer<< endl;
.....
多谢~~~~ 多谢各位高手的帮忙.
下面的程序可以把股票的名字读出来,但是价格数据好象不大对,请高手帮忙看看.
#include <iostream>
using namespace std;
typedef struct
{
char code;
char unuse;
char name;
unsigned long date;
unsigned long open;
unsigned long low;
unsigned long high;
unsigned long close;
unsigned long travl;
unsigned long traca;
unsigned long unk1;
unsigned long unk2;
unsigned long unk3;
} RECORD;
RECORD reco;
int readrec(FILE *);
int main() {
int gpnum;
FILE *fp;
long lSize;
charbuffer;
// char * buffer;
if((fp = fopen("0601day.DAD","r")) == NULL)
{
printf("Error: Cant open 000001.DAY !\n");
exit(0);
}
//readrec(fp);
// header
int j=6;
for (int i=1;i<j;i++) {
fread(&gpnum,4,1,fp);
}
int k=20;
for (int i=1;i<=k;i++) {
readrec(fp);
}
fclose(fp);
};
int readrec(FILE *fp)
{
float fn;
fread(&reco,sizeof(RECORD),1,fp);
cout << reco.code ;
cout <<";";
cout << reco.name ;
cout <<";";
cout << reco.date;
cout <<";";
cout << reco.open ;
cout <<";";
cout << reco.high ;
cout <<";";
cout << endl;
return 0;
} Originally posted by makemake at 2005-6-2 09:13
谢谢!
现在我传给你的是大智慧版块文件(3个,在大智慧安装目录\ZHDOC\Base下),它们之间的关系我弄不懂,请指教。
PLANK.CTF放了每个板块板块名称 ,板块股票数,股票所在位置
18个字节一条记录对应一个板块
0-1 板块股票数
2-13,板块名称
14-17 第一支股票所在位置,
例如中小企业版
00000b74h: 20 00 D6 D0 D0 A1 C6 F3 D2 B5 A7 1C 00 00 C6 1C ;.中小企业?..?
00000b84h: 00 00 ; ..
32只股票,在C6 1C
PLANK.CXT放了股票和股票所在位置
12个字节一条记录
0-3 股票位置号 FF FF FF FF表示板块最后一个股票
4-9 股票代码
10 -1101 00 无意义
根据C6 1C我们找到了002016 和002017,向前我们找到了002015.....002018
000829是上一个板块的。
好像是对了
000157f8h: FF FF FF FF 30 30 30 38 32 39 01 00 A8 1C 00 00 ;
试试float
typedef struct{
char code;
char unuse;
char name;
floatdate;
float open;
float low;
float high;
float close;
float travl;
float traca;
float unk1;
float unk2;
float unk3;
} RECORD;
RECORD reco;
int readrec(FILE *);
Originally posted by zxalex at 2005-6-3 14:56
多谢各位高手的帮忙.
下面的程序可以把股票的名字读出来,但是价格数据好象不大对,请高手帮忙看看.
#include <iostream>
using namespace std;
typedef struct
{
char code;
cha ... Originally posted by 捷克 at 2005-6-3 22:24
PLANK.CTF放了每个板块板块名称 ,板块股票数,股票所在位置
18个字节一条记录对应一个板块
0-1 板块股票数
2-13,板块名称
14-17 第一支股票所在位置,
例如中小企业版
00000b74h: 20 00 D6 D0 D0 A ...
谢谢捷克的指教!
如果论坛多出几个象你这样无私奉献的高人,那该多好!
祝好人一生平安!
关于时间截取
谢谢捷克的指导.还有一个问题,我现在提取DAD日数据文件没有问题,但是在5分钟数据时,发现提取的日期有问题,能不能解释一下啊,谢谢!
时间数据传上来,我分析一下试试
Originally posted by zxalex at 2005-6-7 13:49谢谢捷克的指导.
还有一个问题,我现在提取DAD日数据文件没有问题,但是在5分钟数据时,发现提取的日期有问题,能不能解释一下啊,谢谢! 分析家分笔成交数据存储格式:
上海当天分笔成交数据存储文件为:\superstk\data\sh\report.dat
深圳当天分笔成交数据存储文件为:\superstk\data\sz\report.dat
20020801.prp,20020802.prp,.... 20020823.prp 等文件是历史分笔成交数据文件,
上海历史分笔成交数据存储文件目录为:\superstk\data\sh\
深圳历史分笔成交数据存储文件目录为:\superstk\data\sz\
起止地址数据内容 数据含义数据类型
00 - 03F4 9B 13 FC 日线文件标志 Integer
04 - 0710 02 00 00 保留 Integer
08 - 0B00 91 40 3D 保留 Integer
0C - 0FD2 02 00 00 证券总数 Integer
10 - 1351 05 00 00 需添加之起始块号 Integer
14 - 1750 05 00 00 当前最后空块号 Integer
00000018 00040017 商品索引( 0x40000, 256k,64 pages)
每索引长 0x40共可容纳 0x1000 4096个索引
18 - 2133 39 39 30 证券代码 Char
22 - 2530 31 00 FF 日线记录数 Integer
26 - 57FF FF BA 03...FF FF 记录块号 Word
......
00040018 00040FFF 不明何用!
地 址 数据内容 数据含义 数据类型
41000 - 41003 98 00 66 3D 日期 Integer
41004 - 41007 00 00 18 41 最新价 Single
41008 - 4100B 00 80 B4 43 累计成交量 Single
4100C - 4100F 80 46 A7 48 累计成交金额 Single
41010 - 41011 EA AA 委买量1 Integer
41012 - 41013 2A 3F 委买量2 Integer
41014 - 41015 24 57 委买量3 Integer
41015 - 41017 23 01 委卖量1 Integer
41018 - 41019 8E 5B 委卖量2 Integer
4101A - 3101B 80 40 委卖量3 Integer
4101C 16 委买价1的小数部分 Byte
4101D 9A 委买价2的小数部分 Byte
4101E 80 委买价3的小数部分 Byte
4101F 40 委卖价1的小数部分 Byte
41020 30 委卖价2的小数部分 Byte
41021 57 委卖价3的小数部分 Byte
41022 - 41023 00 80 买入,卖出标识 Byte
1.)从18h开始至40017h每64byte为一条股票数据分配记录,含义如上表18h - 57h所示;
2.)从41000h开始每4068byte为一股票数据存储块,每个股票数据存储块共存储113条记录,每一条记录的长度为36 byte:
具体含义如上表41000h - 41023h所示;
3.) 日期字段意义均为:实际日期 = CDate('1970-01-01')+(日期字段 div 86400);即“日期字段”除以86400所得数为
实际日期距1970年01月01日的天数。
4.)委买,委卖价由最新价加委买,委卖价小数部分得到,如:
委买价1的小数部分=16h(<80h), 则委买价1=最新价+32/100;(16h=32d)
委买价2的小数部分=9Ah(>80h), 则委买价2=最新价-(256-154)/100;(9Ah=154d)
5.)单笔成交量用本笔累计数减上笔累计数得到,
若买入,卖出标识为80h,则单笔成交量是买入量;
若买入,卖出标识为C0h,则单笔成交量是卖出量。 在111楼分析家分笔成交数据存储格式中, 委买价1, 委买价2, 委买价3及 委卖价1, 委卖价2, 委卖价3是怎么算出来的?,分别是多少呢?
读了上述说明,我不是很明白,请捷克指教。
谢谢!
[ Last edited by makemake on 2005-6-8 at 21:23 ] Originally posted by 捷克 at 2005-6-8 20:14
谢了,我在下一楼把程序放上来.老大你运行一下看看就知道了. 程序:
#include <iostream>
#include <time.h>
using namespace std;
typedef struct
{
float date;
time_t date2;
float open;
float high;
float low;
float close;
float travl;
float traca;
float unk1;
float unk2;
} RECORD;
RECORD reco;
int readrec(FILE *);
typedef struct
{
char code;
char unuse;
char name;
} HEADER;
HEADER head;
int readhead(FILE *);
int main() {
int gpnum;
FILE *fp;
long lSize;
charbuffer;
// char * buffer;
if((fp = fopen("min0603.DAD","r")) == NULL)
{
printf("Error: Cant open 000001.DAY !\n");
exit(0);
}
//readrec(fp);
// header
int j=6;
for (int i=1;i<j;i++) {
fread(&gpnum,4,1,fp);
}
readhead(fp);
int k=5;
for (int i=1;i<=k;i++) {
readrec(fp);
}
fclose(fp);
};
int readrec(FILE *fp)
{
float fn;
fread(&reco,sizeof(RECORD),1,fp);
cout << ctime(&reco.date2);
cout <<";";
cout << reco.open ;
cout <<";";
cout << reco.high ;
cout <<";";
cout << reco.low;
cout <<";";
cout << reco.close;
cout <<";";
cout << reco.travl;
cout <<";";
cout << reco.traca;
cout <<";";
cout << endl;
return 0;
}
int readhead(FILE *fp)
{
float fn;
fread(&head,sizeof(HEADER),1,fp);
cout << head.code ;
cout <<";";
cout << head.name ;
cout <<";";
cout << endl;
return 0;
}
数据文件:MIN0603.DAD
[ Last edited by zxalex on 2005-6-10 at 14:14 ] 4.)委买,委卖价由最新价加委买,委卖价小数部分得到,如:
委买价1的小数部分=16h(<80h), 则委买价1=最新价+32/100;(16h=32d)
委买价2的小数部分=9Ah(>80h), 则委买价2=最新价-(256-154)/100;(9Ah=154d)
上面有笔误应为
4.)委买,委卖价由最新价加委买,委卖价小数部分得到,如:
委买价1的小数部分=16h(<80h), 则委买价1=最新价+32/100;(16h=22d)
委买价2的小数部分=9Ah(>80h), 则委买价2=最新价-(256-154)/100;(9Ah=154d)
h 表示16进制,d表示10进制。
16h = (1*16+6)d=22d
其他应该好理解
我想可能这种表示法有缺陷,如最新价100.01,委买价 110.01,他最大表示100.01+127/100=101.28.
Originally posted by makemake at 2005-6-8 21:22
在111楼分析家分笔成交数据存储格式中, 委买价1, 委买价2, 委买价3及 委卖价1, 委卖价2, 委卖价3是怎么算出来的?,分别是多少呢?
读了上述说明,我不是很明白,请捷克指教。
谢谢! #include <iostream>
#include <time.h>
using namespace std;
typedef struct
{
float date;
time_t date2;
float open;
float high;
float low;
float close;
float travl;
float traca;
float unk1;
float unk2;
} RECORD;
RECORD reco;
int readrec(FILE *);
typedef struct
{
char code;
char unuse;
char name;
} HEADER;
HEADER head;
int readhead(FILE *);
int main() {
int gpnum;
FILE *fp;
long lSize;
charbuffer;
// char * buffer;
if((fp = fopen("min0603.DAD","r")) == NULL)
{
printf("Error: Cant open 000001.DAY !\n");
exit(0);
}
//readrec(fp);
// header
int j=6;
for (int i=1;i<j;i++) {
fread(&gpnum,4,1,fp);
}
readhead(fp);
int k=5;
for (int i=1;i<=k;i++) {
readrec(fp);
}
fclose(fp);
};
int readrec(FILE *fp)
{
float fn;
int*tp ;
struct tm * tmp;
fread(&reco,sizeof(RECORD),1,fp);
tp = (int*)&reco.date2;
tmp = gmtime(tp);
//cout << ctime(&reco.date2);
cout << 1900+tmp->tm_year
<< "-" << 1+tmp->tm_mon
<< "-" << tmp->tm_mday;
cout <<";";
cout << reco.open ;
cout <<";";
cout << reco.high ;
cout <<";";
cout << reco.low;
cout <<";";
cout << reco.close;
cout <<";";
cout << reco.travl;
cout <<";";
cout << reco.traca;
cout <<";";
cout << endl;
return 0;
}
int readhead(FILE *fp)
{
float fn;
fread(&head,sizeof(HEADER),1,fp);
cout << head.code ;
cout <<";";
cout << head.name ;
cout <<";";
cout << endl;
return 0;
}
Originally posted by zxalex at 2005-6-9 11:00
程序:
#include <iostream>
#include <time.h>
using namespace std;
typedef struct
{
float date;
time_t date2;
float open;
float high;
... 不懂,,,支持。。。。。。。。。。。。。。。 Originally posted by 捷克 at 2005-6-10 18:48
#include <iostream>
#include <time.h>
using namespace std;
typedef struct
{
float date;
time_t date2;
float open;
float high;
float low;
float cl ...
谢谢捷克,不过你的程序编译不通过.我稍微改了一下,编译通过了,但是时间的输出结果显示还是有问题.麻烦你再帮我看一下好吗,谢谢!
#include <iostream>
#include <time.h>
using namespace std;
typedef struct
{
float date;
time_t date2;
float open;
float high;
float low;
float close;
float travl;
float traca;
float unk1;
float unk2;
} RECORD;
RECORD reco;
int readrec(FILE *);
typedef struct
{
char code;
char unuse;
char name;
} HEADER;
HEADER head;
int readhead(FILE *);
int main() {
int gpnum;
FILE *fp;
long lSize;
charbuffer;
// char * buffer;
if((fp = fopen("min0603.DAD","r")) == NULL)
{
printf("Error: Cant open 000001.DAY !\n");
exit(0);
}
//readrec(fp);
// header
int j=6;
for (int i=1;i<j;i++) {
fread(&gpnum,4,1,fp);
}
readhead(fp);
int k=5;
for (int i=1;i<=k;i++) {
readrec(fp);
}
fclose(fp);
};
int readrec(FILE *fp)
{
float fn;
time_t*tp ;
struct tm * tmp;
fread(&reco,sizeof(RECORD),1,fp);
//tp = (time_t*)~reco.date2;
//tmp = gmtime(&tp);
tmp=gmtime(&reco.date2);
//cout << ctime(&reco.date2);
cout << 1900+tmp->tm_year
<< "-" << 1+tmp->tm_mon
<< "-" << tmp->tm_mday;
cout <<";";
cout << reco.open ;
cout <<";";
cout << reco.high ;
cout <<";";
cout << reco.low;
cout <<";";
cout << reco.close;
cout <<";";
cout << reco.travl;
cout <<";";
cout << reco.traca;
cout <<";";
cout << endl;
return 0;
}
int readhead(FILE *fp)
{
float fn;
fread(&head,sizeof(HEADER),1,fp);
cout << head.code ;
cout <<";";
cout << head.name ;
cout <<";";
cout << endl;
return 0;
}