搜索
楼主: lylyl

各类数据转换,提取,原码,接口编程交流专贴(暂名)

[复制链接]
发表于 2005-6-1 20:26 | 显示全部楼层
Originally posted by makemake at 2005-6-1 17:40


谢谢捷克朋友的解答!
你的每一次回答,都让我感动。
不知你对上述大智慧的有关版块文件的讨论有何新的见解,我盼望着你的指教。

不敢当,你把那几个文件传上来,我可以再试分析一下。
金币:
奖励:
热心:
注册时间:
2004-2-5

回复 使用道具 举报

发表于 2005-6-2 09:13 | 显示全部楼层
谢谢!
      现在我传给你的是大智慧版块文件(3个,在大智慧安装目录\ZHDOC\Base下),它们之间的关系我弄不懂,请指教。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
金币:
奖励:
热心:
注册时间:
2005-5-5

回复 使用道具 举报

发表于 2005-6-2 12:24 | 显示全部楼层

呵呵,请大家先帮你看看板块结构;

正忙着转换宝的其它内容;

可以考虑看,那一堆 .cxt .ctf 是不是某个控件的自定义数据;
实在不行,只有硬读,但这样危险性很高的,读还勉强,写的话,实在没把握啊;
金币:
奖励:
热心:
注册时间:
2004-10-25

回复 使用道具 举报

发表于 2005-6-3 10:24 | 显示全部楼层
Originally posted by 捷克 at 2005-5-30 19:41
char  buffer[1000];
         ..........
    fread (buffer,1,6,fp);//
    buffer[6]=0;
   
   cout <<buffer<< endl;
.....

多谢~~~~
金币:
奖励:
热心:
注册时间:
2005-5-23

回复 使用道具 举报

发表于 2005-6-3 14:56 | 显示全部楼层
多谢各位高手的帮忙.
下面的程序可以把股票的名字读出来,但是价格数据好象不大对,请高手帮忙看看.


#include <iostream>
using namespace std;


typedef struct
   {
   char code[8];
   char unuse[8];
   char name[8];
      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;
         char  buffer[1000];




        // 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;
   }
金币:
奖励:
热心:
注册时间:
2005-5-23

回复 使用道具 举报

发表于 2005-6-3 22:24 | 显示全部楼层
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 -11  01 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 ;
金币:
奖励:
热心:
注册时间:
2004-2-5

回复 使用道具 举报

发表于 2005-6-3 22:34 | 显示全部楼层

试试float

typedef struct
   {
   char code[8];
   char unuse[8];
   char name[8];
      float  date;
      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[8];
   cha ...
金币:
奖励:
热心:
注册时间:
2004-2-5

回复 使用道具 举报

发表于 2005-6-4 10:22 | 显示全部楼层
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 ...


谢谢捷克的指教!
如果论坛多出几个象你这样无私奉献的高人,那该多好!
祝好人一生平安!
金币:
奖励:
热心:
注册时间:
2005-5-5

回复 使用道具 举报

发表于 2005-6-7 13:49 | 显示全部楼层

关于时间截取

谢谢捷克的指导.
还有一个问题,我现在提取DAD日数据文件没有问题,但是在5分钟数据时,发现提取的日期有问题,能不能解释一下啊,谢谢!
金币:
奖励:
热心:
注册时间:
2005-5-23

回复 使用道具 举报

发表于 2005-6-8 20:14 | 显示全部楼层

时间数据传上来,我分析一下试试

Originally posted by zxalex at 2005-6-7 13:49
谢谢捷克的指导.
还有一个问题,我现在提取DAD日数据文件没有问题,但是在5分钟数据时,发现提取的日期有问题,能不能解释一下啊,谢谢!
金币:
奖励:
热心:
注册时间:
2004-2-5

回复 使用道具 举报

发表于 2005-6-8 21:16 | 显示全部楼层
分析家分笔成交数据存储格式:
上海当天分笔成交数据存储文件为:\superstk\data\sh\report.dat
深圳当天分笔成交数据存储文件为:\superstk\data\sz\report.dat
20020801.prp,20020802.prp,.... 20020823.prp 等文件是历史分笔成交数据文件,
上海历史分笔成交数据存储文件目录为:\superstk\data\sh\
深圳历史分笔成交数据存储文件目录为:\superstk\data\sz\
起止地址  数据内容     数据含义  数据类型
00 - 03  F4 9B 13 FC 日线文件标志 Integer
04 - 07  10 02 00 00 保留 Integer
08 - 0B  00 91 40 3D 保留 Integer
0C - 0F  D2 02 00 00 证券总数 Integer
10 - 13  51 05 00 00 需添加之起始块号 Integer
14 - 17  50 05 00 00 当前最后空块号 Integer

00000018 00040017 商品索引( 0x40000, 256k,  64 pages)
                  每索引长 0x40  共可容纳 0x1000 4096个索引
18 - 21  33 39 39 30 证券代码 Char[10]
22 - 25  30 31 00 FF 日线记录数 Integer
26 - 57  FF FF BA 03...FF FF 记录块号 Word[25]
......

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,则单笔成交量是卖出量。
金币:
奖励:
热心:
注册时间:
2005-5-5

回复 使用道具 举报

发表于 2005-6-8 21:22 | 显示全部楼层
在111楼分析家分笔成交数据存储格式中, 委买价1, 委买价2, 委买价3及 委卖价1, 委卖价2, 委卖价3是怎么算出来的?,分别是多少呢?
     读了上述说明,我不是很明白,请捷克指教。
     谢谢!

[ Last edited by makemake on 2005-6-8 at 21:23 ]
金币:
奖励:
热心:
注册时间:
2005-5-5

回复 使用道具 举报

发表于 2005-6-8 23:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
金币:
奖励:
热心:
注册时间:
2004-2-12

回复 使用道具 举报

发表于 2005-6-9 10:56 | 显示全部楼层
Originally posted by 捷克 at 2005-6-8 20:14


谢了,我在下一楼把程序放上来.老大你运行一下看看就知道了.
金币:
奖励:
热心:
注册时间:
2005-5-23

回复 使用道具 举报

发表于 2005-6-9 11:00 | 显示全部楼层
程序:


#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[8];
                   char unuse[8];
   char name[8];

} HEADER;

HEADER head;
int readhead(FILE *);


int main() {
         int   gpnum;
         FILE *fp;
         long lSize;
         char  buffer[1000];




        // 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 ]
金币:
奖励:
热心:
注册时间:
2005-5-23

回复 使用道具 举报

发表于 2005-6-10 18:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
金币:
奖励:
热心:
注册时间:
2003-5-25

回复 使用道具 举报

发表于 2005-6-10 18:37 | 显示全部楼层
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是怎么算出来的?,分别是多少呢?
     读了上述说明,我不是很明白,请捷克指教。
     谢谢!
金币:
奖励:
热心:
注册时间:
2004-2-5

回复 使用道具 举报

发表于 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 close;
    float travl;
    float traca;
    float unk1;
    float unk2;

} RECORD;
RECORD reco;
int readrec(FILE *);

typedef struct
{
    char code[8];
    char unuse[8];
    char name[8];

} HEADER;

HEADER head;
int readhead(FILE *);


int main() {
    int   gpnum;
    FILE *fp;
    long lSize;
    char  buffer[1000];




    // 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;
       ...
金币:
奖励:
热心:
注册时间:
2004-2-5

回复 使用道具 举报

签到天数: 15 天

发表于 2005-6-10 21:27 | 显示全部楼层
不懂,,,支持。。。。。。。。。。。。。。。
金币:
奖励:
热心:
注册时间:
2004-7-30

回复 使用道具 举报

发表于 2005-6-12 13:49 | 显示全部楼层
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[8];
    char unuse[8];
    char name[8];

} HEADER;

HEADER head;
int readhead(FILE *);


int main() {
    int   gpnum;
    FILE *fp;
    long lSize;
    char  buffer[1000];




    // 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;
}
金币:
奖励:
热心:
注册时间:
2005-5-23

回复 使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站声明:MACD仅提供交流平台,请交流人员遵守法律法规。
值班电话:18209240771   微信:35550268

举报|意见反馈|手机版|MACD俱乐部

GMT+8, 2025-4-20 16:52 , Processed in 0.032260 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表