转-股票数据格式

http://www.docin.com/p-734977735.html

 

 

 

大智慧除权数据

 

股票数据格式文档 2009.11.09 增加大智慧权息数据格式

权息数据文件为 full.PWR 基本数据结构如下
struct pwr_Data
{
__time32_t t1;
float f1;
float f2;
float f3;
float f4;
};

 

导出数据格式为:
时间 送股 配股 配股价 分红
2008-10-31 0.300 0.000 0.000 0.034
2007-06-20 0.100 0.000 0.000 0.009
2003-09-29 0.000 0.000 0.000 0.150
2002-07-23 0.000 0.000 0.000 0.150
2000-11-06 0.000 0.300 8.000 0.000
1999-10-18 0.000 0.000 0.000 0.600
1997-08-25 0.500 0.000 0.000 0.200
1996-05-27 1.000 0.000 0.000 0.000
1995-09-25 0.200 0.000 0.000 0.300
1994-07-11 0.500 0.000 0.000 0.500
1994-07-09 0.000 0.100 5.000 0.000
1993-05-24 0.850 0.100 16.000 0.300
1992-03-23 0.500 0.000 0.000 0.200

full.pwr数据结构
数据结构

大智慧level2的除权数据文件为\Download\PWR\full.PWR,数据以二进制格式存储,其格式如下

 

00000000h: 32 C8 43 FF DD 83 CC FF FF FF FF FF 53 5A 30 30 ; 2庵?輧?????SZ00
00000010h: 30 30 30 31 00 00 00 00 00 00 00 00 80 1F CD 29 ; 0001……..?.?
00000020h: 00 00 00 3F 00 00 00 00 00 00 00 00 CD CC 4C 3E ; …?……..吞L>
00000030h: 00 10 00 2C 9A 99 59 3F 00 00 00 00 00 00 00 00 ; …,僵Y?……..
00000040h: 9A 99 99 3E 00 10 00 2C 00 00 00 00 CD CC CC 3D ; 僵?…,….吞?
00000050h: 00 00 80 41 00 00 00 00 80 8B 20 2E 00 00 00 3F ; ..?A….??….?
00000060h: 00 00 00 00 00 00 00 00 00 00 00 3F 80 E8 1D 2E ; ………..???.
00000070h: 00 00 00 00 CD CC CC 3D 00 00 A0 40 00 00 00 00 ; ….吞?..燖….
00000080h: 00 F1 65 30 CD CC 4C 3E 00 00 00 00 00 00 00 00 ; .馿0吞L>……..
00000090h: 9A 99 99 3E 80 F0 A8 31 00 00 80 3F 00 00 00 00 ; 僵??皎1..??….
000000a0h: 00 00 00 00 00 00 00 00 00 CB 00 34 00 00 00 3F ; ………?4…?
000000b0h: 00 00 00 00 00 00 00 00 CD CC 4C 3E 00 63 0A 38 ; ……..吞L>.c.8
000000c0h: 00 00 00 00 00 00 00 00 00 00 00 00 9A 99 19 3F ; …………僵.?
000000d0h: 80 F4 05 3A 00 00 00 00 9A 99 99 3E 00 00 00 ; ??:….僵?…

 

从第13个字节开始就是分红数据,股票代码为8个字节,其后8个字节留空,后面是历次的分红日期及分红方式,最后以”FF FF FF FF”结束,如该股票没有分红记录则其记录长度为最小的20字节。一条分红记录占20个字节,依次是

日期 4Byte,32位整数,距1970-01-01的秒数

送股+转增股 4Byte,Single,每股送股数加每股转增股数,具体的方式此文件中没有记录

配股 4Byte,Single,每股配股数

配股价 4Byte,Single,每股配股价

分红 4Byte,Single,每股分红

 

以下是提取数据的原代码:

BinaryReader sReader = new BinaryReader(File.Open(@”D:\Program Files\dzh2\Download\PWR\full.PWR”, FileMode.Open));
sReader.BaseStream.Position = 12;
int k;
while(sReader.BaseStream.Length>sReader.BaseStream.Position)
{

Console.WriteLine(System.Text.Encoding.Default.GetString(sReader.ReadBytes(8)));
sReader.BaseStream.Position += 8;
k = sReader.ReadInt32();
while (k > 0)
{
Console.WriteLine(DateTime.Parse(“1970-01-01”).AddSeconds(k));
Console.WriteLine(sReader.ReadSingle());
Console.WriteLine(sReader.ReadSingle());
Console.WriteLine(sReader.ReadSingle());
Console.WriteLine(sReader.ReadSingle());
if (sReader.BaseStream.Length > sReader.BaseStream.Position)
k = sReader.ReadInt32();
else
break;
}
}
sReader.Close();

 

 

 

大智慧:

日线数据文件day.dat
case DataTypes.hq:
fileName = “DAY.DAT”;
startAddress = 0x41000;
blockSize = 8192;
recordSize = 32;
codeIsLong = false;
fieldString =
“dm,代码,code,10,0,0,;” +
“rq,日期,date,4,1,0,;” +
“kp,开盘,single,4,2,4,B;” +
“zg,最高,single,4,3,8,B;” +
“zd,最低,single,4,4,12,B;” +
“sp,收盘,single,4,5,16,B;” +
“sl,成交数量,single,4,6,20,A;”+
“je,成交金额,single,4,7,24,”;

数据格式几乎与分析家相同

起止地址   数据内容                 数据含义       数据类型
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

注:
1)起止地址、数据内容为十六进制,数据类型为 Delphi 下之定义。
2)从18h开始至40017h每64byte为一条股票数据分配记录,含义如上表18h – 57h所示;
3)从41000h开始每8KB为一股票数据存储块,每个股票数据存储块共存储256条日线记录,
每一条记录的长度为32 byte(含义如上表;上涨家数及下跌家数只对指数有效);
4)从41000h开始的8KB为第0号数据存储块,以后类推;
5)系统对每个股票日线数据存储以存储块为单位进行分配。
6)具体应用实例分析家数据管理程序。
7) 日期字段的意义为:实际日期 = StrToDate(^1970-01-01^)+(日期字段 div 86400);
即“日期字段”除以86400所得数为实际日期距1970年01月01日的天数。

有关块号计算方法,请参见分笔成交数据格式
日期字段的意义为:实际日期 = StrToDate(^1970-01-01^)+(日期字段 div 86400);
即“日期字段”除以86400所得数为实际日期距1970年01月01日的天数

1分钟数据文件min1.dat
case DataTypes.hq1:
fileName = “MIN1.DAT”;
startAddress = 0x41000;
blockSize = 12288;//8192
recordSize = 32;
codeIsLong = false;
fieldString =
“dm,代码,code,10,0,0,;” +
“rq,日期,datetime,4,1,0,;” +
“kp,开盘,single,4,2,4,B;” +
“zg,最高,single,4,3,8,B;” +
“zd,最低,single,4,4,12,B;” +
“sp,收盘,single,4,5,16,B;” +
“sl,成交数量,single,4,6,20,A;”+
“je,成交金额,single,4,7,24,”;

5分钟数据文件min.dat
case DataTypes.hq5:
fileName = “MIN.DAT”;
startAddress = 0x41000;
blockSize = 8192;
recordSize = 32;
codeIsLong = false;
fieldString =
“dm,代码,code,10,0,0,;” +
“rq,日期,datetime,4,1,0,;” +
“kp,开盘,single,4,2,4,B;” +
“zg,最高,single,4,3,8,B;” +
“zd,最低,single,4,4,12,B;” +
“sp,收盘,single,4,5,16,B;” +
“sl,成交数量,single,4,6,20,A;” +
“je,成交金额,single,4,7,24,”;

最新行情STKINFO60.dat
case DataTypes.hq0:
fileName = “STKINFO60.DAT”;
startAddress = 0x68A8A6;
blockSize = 0;
recordSize = 273;
codeIsLong = false;
isIndexDataStruct = false;
fieldString =
“dm,代码,code,10,0,0,;” +
“jc,简称,string,32,1,10,;” +
“rq,更新时间,datetime,4,5,60,;” +
“zs,昨收,single,4,7,68,;” +
“kp,今开,single,4,8,72,;” +
“zg,最高,single,4,9,76,;” +
“zd,最低,single,4,10,80,;” +
“sp,最新,single,4,11,84,;” +
“sl,总手数,single,4,12,88,;” +
“je,金额,single,4,13,92,;” +
“xss,现手数,single,4,14,96,;” +
“ztj,涨停价,single,4,27,184,;” +
“dtj,跌停价,single,4,28,188,;” +
“np,内盘,single,4,27,192,;” +
“wp,外盘,single,4,28,196,;” +
“mrjg1,买一价,single,4,15,100,;” +
“mrsl1,买一量,single,4,18,120,;” +
“mrjg2,买二价,single,4,16,104,;” +
“mrsl2,买二量,single,4,19,124,;” +
“mrjg3,买三价,single,4,17,108,;” +
“mrsl3,买三量,single,4,20,128,;” +
“mrjg4,买四价,single,4,32,112,;” +
“mrsl4,买四量,single,4,34,132,;” +
“mrjg5,买五价,single,4,33,116,;” +
“mrsl5,买五量,single,4,35,136,;” +
“mcjg1,卖一价,single,4,21,140,;” +
“mcsl1,卖一量,single,4,24,160,;” +
“mcjg2,卖二价,single,4,22,144,;” +
“mcsl2,卖二量,single,4,25,164,;” +
“mcjg3,卖三价,single,4,23,148,;” +
“mcsl3,卖三量,single,4,26,168,;” +
“mcjg4,卖四价,single,4,36,152,;” +
“mcsl4,卖四量,single,4,38,172,;” +
“mcjg5,卖五价,single,4,37,156,;” +
“mcsl5,卖五量,single,4,39,176,”;
//”jd,精度,int,4,3,52,;” +
//”scbz,删除标志,int,4,4,56,”;
//”unknown,(未知),int,4,31,164,;” +
//”,(未知),,48,40,200,;”

分笔成交数据文件report.dat(结构同day.dat,但其中一些数据不是直接保存)
case DataTypes.hqmb:
fileName = “REPORT.DAT”;
startAddress = 0x41000;
blockSize = 12272;
recordSize = 52;
codeIsLong = false;
isIndexDataStruct = false;//不完全等同于day.dat结构,因此单独处理
fieldString =
“dm,代码,code,10,0,0,;” +
“rq,日期,datetime,4,0,0,;” +
“zjcj,最近成交价,single,4,1,4,;” +
“zss,总手数,single,4,2,8,calc;” +
“je,金额,single,4,3,12,;” +
“xss,现手数,single,4,2,8,;” +
“mm,内外盘,string,2,16,21,;” +
“mr1jg,买一价,single,1,10,42,;” +
“mr1sl,买一量,single,2,4,22,;” +
“mr2jg,买二价,single,1,11,43,;” +
“mr2sl,买二量,single,2,5,24,;” +
“mr3jg,买三价,single,1,12,44,;” +
“mr3sl,买三量,single,2,6,26,;” +
“mr4jg,买四价,single,1,12,45,;” +
“mr4sl,买四量,single,2,6,28,;” +
“mr5jg,买五价,single,1,12,46,;” +
“mr5sl,买五量,single,2,6,30,;” +
“mc1jg,卖一价,single,1,13,47,;” +
“mc1sl,卖一量,single,2,7,32,;” +
“mc2jg,卖二价,single,1,14,48,;” +
“mc2sl,卖二量,single,2,8,34,;” +
“mc3jg,卖三价,single,1,15,49,;” +
“mc3sl,卖三量,single,2,9,36,;”+
“mc4jg,卖四价,single,1,14,50,;” +
“mc4sl,卖四量,single,2,8,38,;” +
“mc5jg,卖五价,single,1,14,51,;” +
“mc5sl,卖五量,single,2,8,40,;” +
“bs,总笔数,int,2,0,16,”
;
//以上数据类型不是存储类型,程序中不直接用实际数据类型:买/卖X量为short,买/卖X价为byte
//现手数通过当总手数计算而得,应该放在总手数后面
大智慧新一代Level-2 分笔成交数据格式

起止地址   数据内容                 数据含义                     数据类型
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、如有疑问请与 QQ 8588711 联系,愿与您共同挖掘股票成交数据。
2、数据类型为JAVA数据类型定义,实际读数据时应该将数据十六进制取反,如:41000 – 41003的数据为 35 FA DF 46,实际应该读成:
0x46DFFA35 = 1189083701, 这个1189083701值就是距1970.01.01 00:00:00 始的实际秒数。其他int,float,char都是这样取反的。
3、委买卖与成交价的差,是小数点后的整数差,如果买卖标识为80或C0,成交价小数点后是两位(股票),如果买卖标识为E0或A0,
成交价小数点后是三位(权证等)
4、累计成交笔数如果溢出,则41014位上的值不为00,而是10或者20,30等,成交笔数计算方法应为:41014位上的值反转,
10转为01,20转为02。。。 再与41010 – 41011位上的值合并成一个16进制串。
5、记录块号计算方法:char[0] = 0x00 第一个记录块起始地址为:41000h + 0x0000 * 0x2FF0 = 41000h,char[1] = 0x03BA
则第二个记录块起始地址为:41000h + 0x03BA * 0x2FF0 = 0x00077F78

标签: 财经
近日发现Level-2的逐笔成交数据是缓存在dzh2/data/sh/TEMP目录下,文件名以证券代码为名,后辍是.L2D,如果重启大智慧,
L2D文件会全部被删除,而且临时文件只有在浏览过该证券的逐笔成交后才会生成,不过花的时间也不算太多。也许以后会要研究
逐笔成交数据了,这样的数据更有意义,读数据不是问题,最主要的是分析方法,当得到盘口异动数据后,还需要结合信息面来操作,
这样的成功几率非常大,我已经初尝胜果。后面,还要通过数据来分析大盘走势,还有通过行业数据异动,发现基金等大资金的中短期
目标,这点也非常之重要。这个十一假期,过得不会很闲,还有很多东西要做、、、 现在也不想接受QQ加好友请求,真正做数据盘口
分析的,发现数据格式,马上就已经投入战斗了,而且一看就会明了。在这个市场,每个人都有自己的方式生存,没有拿手绝活,那
是不要随便来玩的。逐笔成交数据格式,大概也会在不久后弄个明白。

财务数据(简单)STKINFO60.dat
case DataTypes.cw0:
fileName = “STKINFO60.DAT”;
startAddress = 0x4c2a;
blockSize = 2227;
recordSize = 273;//196
codeIsLong = false;
isIndexDataStruct = false;
fieldString =
“dm,代码,code,10,0,0,;” +
“rq,报告期,date,4,0,4,;” +
“gxrq,更新日期,date,4,0,0,;” +
“ssrq,上市日期,date,4,0,8,;” +
“col1,每股收益,single,4,0,12,;” +
“col2,每股净资产,single,4,0,16,;” +
“col3,净资产收益率,single,4,0,20,;” +
“col4,每股经营现金,single,4,0,24,;” +
“col5,每股公积金,single,4,0,28,;” +
“col6,每股未分配,single,4,0,32,;” +
“col7,股东权益比,single,4,0,36,;” +
“col8,净利润同比,single,4,0,40,;” +
“col9,主营收入同比,single,4,0,44,;” +
“col10,销售毛利率,single,4,0,48,;” +
“col11,调整每股净资产,single,4,0,52,;” +
“col12,总资产,single,4,0,56,;” +
“col13,流动资产,single,4,0,60,;” +
“col14,固定资产,single,4,0,64,;” +
“col15,无形资产,single,4,0,68,;” +
“col16,流动负债,single,4,0,72,;” +
“col17,长期负债,single,4,0,76,;” +
“col18,总负债,single,4,0,80,;” +
“col19,股东权益,single,4,0,84,;” +
“col20,资本公积金,single,4,0,88,;” +
“col21,经营现金流量,single,4,0,92,;” +
“col22,投资现金流量,single,4,0,96,;” +
“col23,筹资现金流量,single,4,0,100,;” +
“col24,现金增加额,single,4,0,104,;” +
“col25,主营收入,single,4,0,108,;” +
“col26,主营利润,single,4,0,112,;” +
“col27,营业利润,single,4,0,116,;” +
“col28,投资收益,single,4,0,120,;” +
“col29,营业外收支,single,4,0,124,;” +
“col30,利润总额,single,4,0,128,;” +
“col31,净利润,single,4,0,132,;” +
“col32,未分配利润,single,4,0,136,;” +
“col33,总股本,single,4,0,140,;” +
“col34,无限售股合计,single,4,0,144,;” +
“col35,A股,single,4,0,148,;” +
“col36,B股,single,4,0,152,;” +
“col37,境外上市股,single,4,0,156,;” +
“col38,其他流通股,single,4,0,160,;” +
“col39,限售股合计,single,4,0,164,;” +
“col40,国家持股,single,4,0,168,;” +
“col41,国有法人股,single,4,0,172,;” +
“col42,境内法人股,single,4,0,176,;” +
“col43,境内自然人股,single,4,0,180,;” +
“col44,其他发起人股,single,4,0,184,;” +
“col45,募集法人股,single,4,0,188,;” +
“col46,境外法人股,single,4,0,192,;” +
“col47,境外自然人股,single,4,0,196,;” +
“col48,优先股或其他,single,4,0,200,”;

分红送配STKINFO60.dat
case DataTypes.cq:
fileName = “STKINFO60.DAT”;
startAddress = 0x44aa;
blockSize = 2227;
recordSize = 20;
codeIsLong = false;
isIndexDataStruct = false;
fieldString =
“dm,代码,code,10,0,0,;” +
“rq,日期,date,4,0,0,;” +
“sgbl,送股比例,single,4,1,4,;” +
“pgbl,配股比例,single,4,2,8,;” +
“pgjg,配股价格,single,4,3,12,;” +
“fh,分红,single,4,4,16,”;

代码表STKINFO60.dat
case DataTypes.dm:
fileName = “STKINFO60.DAT”;
startAddress = 0x68A8A6;
blockSize = 0;
recordSize = 273;//fxj248
codeIsLong = false;
isIndexDataStruct = false;
fieldString =
“dm,代码,code,10,0,0,;” +
“jc,简称,string,32,1,10,”;

 

 

 

通达信行业、板块与自定义指数 (2015-09-01 17:58:00)

 

 

来源:醉眠春晓的博客      http://blog.sina.com.cn/s/blog_623d2d280102vt8y.html

本文综合了从网络上搜集资料,描述了通达信股票软件中行业、板块、自定义板块、通达信指数相关的数据存储的文件及文件的格式。

相关文件:
incon.dat                                证监会行业,通达信新行业,申万行业等描述信息
T0002\hq_cache\block.dat        一般板块
T0002\hq_cache\block_gn.dat    概念板块
T0002\hq_cache\block_fg.dat      风格板块
T0002\hq_cache\block_zs.dat      指数板块:
T0002\hq_cache\tdxhy.cfg           每个股票对应通达信行业和申万行业
T0002\hq_cache\tdxzs.cfg           板块指数,部分板块的最后一个字段映射到incon.dat的TDXNHY和SWHY
T0002\blocknew\blocknew.cfg      自定义板块概要描述文件

1 行业
行业包括三个类别:证监会行业;申万行业;通达信新行业
行业在文件“incon.dat”中定义。文件格式:
1) 文件包含多个行业分类:
      a)证监会行业:开头#ZJHHY,结束######
      b) 申万行业:开头#SWHY,结束######
      c) 通达信新行业:开头#TDXNHY,结束######
2) 每个分类中,每一行包含一个细分行业的代码和名称,以“|”分隔
      a) 证监会行业:一级分类为A~M,二级分类A99,三级分类为A9999
      b) 申万行业:一级分类为990000,二级分类为999900,三级分类为999999
      c) 通达信新行业:一级分类为T99,二级分类为T9999,三级分类为T999999
示例如下:
incon.dat
代码|名称
#ZJHHY
A|农业
A01|农业
A0101|种植业
A0199|其他农业
A03|林业
A0301|林业
……
######
#TDXNHY
T01|能源
T0101|煤炭
T010101|煤炭开采
T010102|焦炭加工
T0102|电力
T010201|水力发电
T010202|火力发电
T010203|新型电力
……
######
#SWHY
110000|农业
110100|种植业
110101|种子生产
110102|粮食种植
110103|其他种植业
110200|渔业
……
######

每个股票对应的申万行业和通达信行业记录在文件T0002\hq_cache\tdxhy.cfg中。
T0002\hq_cache\tdxhy.cfg
市场|股票代码|通达信新行业代码|申万行业代码
0|000001|T1001|440101
0|000002|T110201|430101
0|000004|T040502|370301
0|000005|T110202|430101
0|000006|T110202|430101
0|000007|T0604|460201
0|000008|T1301|510101
0|000009|T110201|430101
0|000010|T110101|250202
0|000011|T110202|430101
0|000012|T020603|250101
0|000014|T110201|430101

2 通达信自定义板块
通达信定义的板块通过如下四个板块文件描述:
T0002\hq_cache\block.dat            一般板块
T0002\hq_cache\block_gn.dat      概念板块
T0002\hq_cache\block_fg.dat        风格板块
T0002\hq_cache\block_zs.dat        指数板块:
数据格式的C语言描述如下:
//股票板块信息文件头格式,T0002/hq_cache/block.dat block_fg.dat block_gn.datblock_zs.dat
struct TTDXBlockHeader
{
  char       szVersion[64];       // 0,Registry ver:1.0 (1999-9-28)
  int         nIndexOffset;          // 64,0×00000054
  int         nDataOffset;          // 68,0×00000180
  int         nData1;             // 72,0×00000003
  int         nData2;             // 76,0×00000000
  int         nData3;             // 80,0×00000003
};

struct TTDXBlockIndex
{
  char      szName[64];          // 0, Root,Block, Val
  int         nData1;             //64
  int         nData2;             //68
  int         nLength;             // 72,length of the block
  int         nOffset;             // 76,offset of the data part
  int         nData3;             //80
  int         nData4;             //84
  int         nData5;             // 88,root=-1,block=0,val=1
  int         nData6;             // 92,root=1,block=2,val=-1
  int         nStatus;             // 96,1
};

struct TTDXBlockRecord
{
  char       szName[9];
  short      nCount;
  short      nLevel;
  char       szCode[400][7];
};

3 用户自定义板块
基本目录:T0002\blocknew
配置文件:blocknew.cfg      记录自定义的板块名称和文件头
配置文件存储格式:
1) 每个板块120字节
2) 板块名称50字节
3) 板块文件名头70字节
//自定义板块概述文件格式,T0002\blocknew\blocknew.cfg
structTTDXUserBlockRecord
{
  char      szName[50];
  char      szAbbr[70];       // 也是文件名称前缀T0002\blocknew\xxxx.blk
};

板块列表文件: *.blk
1) 每行一条记录:每个记录7个数字:
   a)市场代码1位:0 – 深市;1 – 沪市
   b)股票代码6位
   c)行结束符:\r\n
T0002\blocknew\ZXG.blk
市场 股票代码
1999999
0399001
0399005
0399006
1000016
1000300
0399330

4 通达信自定义指数
通达信自定义指数记录在文件T0002\hq_cache\tdxzs.cfg中,每行一条记录,每个记录包含6个字段,字段之间用“|”分隔。字段依次为:
1) 指数名称
2) 指数代码
3) 对应板块/行业类别:2-通达信行业板块 3-地区板块 4-概念板块 5-风格板块 8-申万行业
4) 未知字段:都为1
5) 未知字段:为0或1
6) 行业代码或板块名称:
   a)类别为2对应通达信行业代码
   b)类别为3对应地域编号,与base.dbf中的DY字段对应
   c)类别为4对应概念板块名称
   d)类别为5对应风格板块名称
   e)类别为8对应申万行业代码
T0002\hq_cache\tdxzs.cfg
指数名称|指数代码|类别|未知字段|未知字段|行业代码或板块代码
黑龙江|880201|3|1|0|1
新疆板块|880202|3|1|0|2
吉林板块|880203|3|1|0|3
甘肃板块|880204|3|1|0|4
……
煤炭|880301|2|1|0|T0101
煤炭开采|880302|2|1|1|T010101
焦炭加工|880303|2|1|1|T010102
电力|880305|2|1|0|T0102
水力发电|880306|2|1|1|T010201

通信达:

股票软件数据格式详解之–通达信数据格式

 

通达信数据不是钱龙格式的。但很容易转化成钱龙格式,稍微懂点数据格式的朋友都容易转化。钱龙是长整型的数据,通达信是单精度型数据。钱龙一天数据占40个字节,通达信占32个字节。大智慧和钱龙的格式是一样的。

通达信数据格式:

1-4字节 Date:LongInt; //日期
5-8字节 OPen:LongInt; //开盘*100(元)
9-12字节 High:LongInt; //最高价*100(元)

13-16字节 Low:LongInt; //最低价*100(元)
17-20字节 Close:LongInt; //收盘*100(元)

21-24字节 single; //Amount
25-28字节 Volume:LongInt; //Volume 成交量(股)
29-32字节 // Reserved
其数据结构定义如下:

typedef struct mystructtag
{
int date;
int open;
int high;
int low;
int close;
int amount;
int vol;
int reservation;
} StockData;

 

基本声明
Public NumBase(5) As Long ‘通达信格式基数
Public NumUnit(4) As Long ‘每单位对应的16进制数
Public NumUnitPrice(4) As Long ‘每单位对于的10进制数,已被从元为单位扩大1000倍

基本模块

Public Sub intTDXelg()Sub intTDXelg()
NumBase(0) = 1065353216 : NumBase(1) = 1082130432 : NumBase(2) = 1090519040 : NumBase(3) = 1098907648 : NumBase(4) = 1109655552 ‘: NumBase(5) = 1118830592
NumUnit(0) = 4194304 : NumUnit(1) = 2097152 : NumUnit(2) = 1048576 : NumUnit(3) = 524288 ‘: NumUnit(4) = 262144
NumUnitPrice(0) = 0 : NumUnitPrice(1) = 4000 : NumUnitPrice(2) = 8000 : NumUnitPrice(3) = 16000 ‘: NumUnitPrice(4) = 32000
End Sub
在form load 事件中调用intTDXelg

Public Structure stockDayRecordStructure stockDayRecord ‘保存一门股票的日数据信息
Dim stockdate As Date
Dim openor As Single
Dim hightor As Single
Dim lowor As Single
Dim endor As Single
Dim changor As Integer
Dim id As Integer
Dim VbP As Integer
End Structure

Public Function getRealPrice()Function getRealPrice(ByVal formerPrice As Long) As Long ‘注意移植此函数是要把公共变量NumBase预NumUnit移动移植
Dim i As Integer
For i = 1 To 4                                 ‘该函数可返回32元人民币以下对于的准确价格
If formerPrice < NumBase(i) Then
getRealPrice = (Val((formerPrice – NumBase(i – 1)) & “000”) / NumUnit(i – 1)) + NumUnitPrice(i – 1)
Exit For                                  ‘ & 000 相当于 * 1000,以‰为单位
End If
Next i
End Function

读取模块

Function LoadDayData()Function LoadDayData(ByVal filename As String, ByRef dr() As stockDayRecord, ByVal t As Short) As Long
‘股票读取接口,第一个参数为装载股票数据的结构体
Dim fs As FileStream = File.OpenRead(filename)
Dim br As New BinaryReader(fs)
Dim n As Integer
Dim i As Integer, j As Integer
Select Case t
Case 1 ‘中天
Case 2 ‘通达信 暂时不用
n = (fs.Length – 4) / 32
LoadDayData = n
ReDim dr(n)
br.ReadInt32() ‘文件头到底是什么,另外是头天顺序颠放到了某个地方
For i = 1 To n
Dim d As Integer = br.ReadInt32()
dr(i).stockdate = DateSerial(d / 10000, (d Mod 10000) / 100, d Mod 100)
dr(i).openor = getRealPrice(br.ReadInt32) / 1000
dr(i).hightor = getRealPrice(br.ReadInt32) / 1000
dr(i).lowor = getRealPrice(br.ReadInt32) / 1000
dr(i).endor = getRealPrice(br.ReadInt32) / 1000
br.ReadInt32()
dr(i).changor = br.ReadInt32
dr(i).id = i
If (dr(i).hightor <> dr(i).lowor) Then dr(i).VbP = dr(i).changor / ((dr(i).hightor – dr(i).lowor) * 1000)
br.ReadInt32()
Next
End Select
fs.Dispose()
LoadDayData = j
End Function

股票开源数据结构分析:
开源股软数据结构  

1. 数据结构及存储  

有关股票的数据结构都在工程StkLib中定义。  

其中StKLib/Include/Stock.h中定义了如下结构和类:  

1) KDATA结构  
K线数据结构,如果是日线,则日期,开盘价,最高价,最低价,收盘价几个信息。  
CKData类是KDATA结构的数组形式及一些操作。例如:技术图表界面中的K线图就是依据  
这个类画的。  
CKData类里面有三个标志变量,  
int m_nKType; 记录这个数组是日线,周线,5分钟线等,见CKData::KTypes  
枚举类型。  
int m_nCurFormat; 记录K线的复权状态,见CKData::Formats枚举类型。  
formatOriginal不复权,formatXDRup向上复权,  
formatXDRdown向下复权。  
int m_nCurMaindataType; 记录主数据类型,见CKData::MaindataTypes枚举类型。  
例如:如果是mdtypeAverage,则MaindataAt(…)函数  
返回的就是平均价。  

K线数据在磁盘上的存储,与钱龙,核新格式兼容,每只股票一个文件。磁盘上日线,  
周线,月线的数据格式是源文件StkLib\Src\Qianlong.h中定义的结构QL_Data_day的简单  
重复,从文件头开始至文件尾都是这个结构,有多少个就说明有多少个数据。同样,5分  
钟,15分钟,30分钟,60分钟线的结构是源文件StkLib\Src\Qianlong.h中的QL_Data_5min。  

装载K线数据时,自动转换成CKData类的对象。  

2) DRDATA结构  
除权除息数据结构,即K线复权时使用的公司股本变动及分红等数据。CDRData类是  
DRDATA结构的数组形式及一些操作。  

DRDATA在磁盘上存储于data\CHNA.pwr文件中,该文件格式与分析家除权文件格式完全  
相同。分析家除权文件的格式就是源文件StkLib\Src\SelfDB.h中的结构FXJ_DRDATA。  

装载数据时,自动转换为CDRData类的对象。  

3) BASEDATA结构  
财务信息数据结构,即股票的财务数据信息。CBasedata类是BASEDATA结构的数组形式  
及一些操作。  

BASEDATA在磁盘上存储于data\CHNA.bst中。该文件的格式即为若干个BASEDATA结构。 

4) REPORT结构  
实时行情传送过来的股票报价包,类似于通视的RCV_REPORT_STRUCTEx。  
StkNet\Src\StkReceiver.h中的CStkReceiver类是负责接收通视数据包的类,有一个静态  
对象可以通过AfxGetStkReceiver()方法获得。该对象将收到的通视数据转换成相应的  
REPORT,MINUTE,OUTLINE,MULTISORT结构。并创建线程,向需要数据的窗口发送消息。  
同时将相应数据存储到本地dat\目录下,只保存当天数据。  

dat\report.now保存最新RCV_REPORT_STRUCTEx数据,源文件NetTS\Src\TSCache.cpp中的  
BOOL CTSCache::StoreReports( )和BOOL CTSCache:oadReports( )方法保存和读取这个  
文件。  

dat\SHSE.rpt,dat\SZSE.rpt分别保存上证和深证的REPORT数据。格式为类CClkFile,定  
义在StkLib\Include\SelfDB.h中。  

dat\SHSE.min,dat\SZSE.min分别保存上证和深证的MINUTE数据。格式为类CClkFile,定  
义在StkLib\Include\SelfDB.h中。  

5) MINUTE结构  
实时行情传送过来的分钟线数据,类似于通视的RCV_MINUTE_STRUCTEx。  
即分时行情窗口中的分时价格线数据,每分钟一个数据。  

6) OUTLINE结构  
实时行情传送过来的行情额外数据,通视目前没有该类数据。  

7) MULTISORT结构  
实时行情传送过来的综合排名数据。通视目前没有该类数据。通视的综合排名是根据收到  
的RCV_REPORT_STRUCTEx自己算出来的。这个结构是天网网络接口发送的,在服务器端计算  
好的排名,直接发到客户端,显示在综合排名界面。  

该数据不存盘。  

8) COMMPACKET结构  
为了写程序方便,定义的一个结构,该结构可以分配其他结构数组,分配方法在源文件  
StkLib\Src\Packets.cpp中。  

该数据不存盘。  

9) CStockInfo类  
股票基本信息数据,包含基本财务数据,最新报价数据,最近若干天的K线缓存。  

该数据不存盘。  

10) CStock类  
某只股票的全部数据都可以存储在这个类里,装载过程参见后面的示例代码说明。  

其中StKLib/Include/StockContainer.h中定义了如下结构和类:  

11) CStockContainer类  
CStockInfo类的数组容器,AfxGetStockContainer()函数得到该类的一个静态对象,保存  
着当前所有股票的基本信息数据缓存。在程序启动时装载。  
AfxGetSListContainer()函数得到该类的另一个静态对象,保存着当前股票列表窗口中的  
股票及基本信息缓存。该对象的数据初始化根据用户操作自动从AfxGetStockContainer()  
对象里装载。  

12) CDomain类  
一个板块或者一个分组。包含该板块(分组)名称及代码数组。  

13) CDomainContainer类  
板块或者分组容器类。  
AfxGetDomainContainer()方法返回一个静态对象,包含当前板块信息。  
AfxGetGroupContainer()方法返回一个静态对象,包含当前分组信息。  

其中StKLib/Include/Database.h中定义了如下类:  

14) CStDatabase类  
访问本地数据的接口类。通过AfxGetDB()方法返回该类的一个静态对象,可以通过  
该对象读取本地的K线数据,F10资料,除权数据。读取方法参看下面示例详解��

2. 磁盘上的文件  
dat\report.now 最新即时行情列表数据。  
dat\SHSE.rpt 每天每只上证股票的成交数据。  
dat\SZSE.rpt 每天每只深证股票的成交数据。  
dat\SHSE.min 每天每只上证股票的分钟线数据。  
dat\SZSE.min 每天每只深证股票的分钟线数据。  
data\shase\base\ 上证F10资料,每只股票一个文件。  
data\shase\day\ 上证日线数据,每只股票一个文件。  
data\shase\week\ 上证周线数据,每只股票一个文件。  
data\shase\month\ 上证月线数据,每只股票一个文件。  
data\shase\mnt\ 上证5分钟数据,每只股票一个文件。  
data\shase\xdr\ 上证除权数据,每只股票一个文件。最终结果是CHNA.pwr与该目录  
下的文件合并的结果。  
data\shase\base\ 深证F10资料,每只股票一个文件。  
data\shase\day\ 深证日线数据,每只股票一个文件。  
data\shase\week\ 深证周线数据,每只股票一个文件。  
data\shase\month\ 深证月线数据,每只股票一个文件。  
data\shase\mnt\ 深证5分钟数据,每只股票一个文件。  
data\shase\xdr\ 深证除权数据,每只股票一个文件。最终结果是CHNA.pwr与该目录  
下的文件合并的结果。  

data\SHSE.cod 上证代码表。  
data\SHSE.cod 深证代码表。  
data\CHNA.bst 财务数据文件。  
data\CHNA.pwr 除权数据文件。  
data\domain.dat 板块数据文件。  
group.dat 分组数据文件。  

3. 指标数据结构及调用接口  

其中StKLib/Include/Technique.h中定义了如下类:  
1) CTechnique类  
该类为所有技术指标类的父类,该类里保存着计算指标用的数据,即一个CKData对象。  
另外还有一些Cache,是对刚刚计算过的指标值进行缓存,提高显示速度,以免总是重复计算。  
几个虚函数接口:  

// 得到nIndex位置处的买卖信号,nIndex为CKData的数组位置,pnCode为原因代号  
virtual int GetSignal( int nIndex, UINT pnCode NULL );  

// 得到nStart到nEnd之间的指标值的最大最小值,画图时用来判断画图坐标区间。  
virtual BOOL GetMinMaxInfo( int nStart, int nEnd, double *pdMin, double *pdMax );  

// 计算指标值,对不同的指标类型,对应参数的个数不同。  
virtual BOOL Calculate( double pValue, int nIndex, int nDays, BOOL bUseLast );  
virtual BOOL Calculate( double pValue, int nIndex, BOOL bUseLast );  
virtual BOOL Calculate( double pValue1, double pValue2, int nIndex, BOOL bUseLast );  
virtual BOOL Calculate( double pValue1, double pValue2, double pValue3, int nIndex, BOOL bUseLast );  
virtual BOOL Calculate( double pValue1, double pValue2, double pValue3, double pValue4, int nIndex, BOOL bUseLast );  
virtual BOOL Calculate( double pValue1, double pValue2, double pValue3, double pValue4, double pValue5, int nIndex, BOOL bUseLast );  

// 计算单个指标值及该指标值nMADays日均线  
virtual BOOL CalculateMA( double pValue, double pMA, int nIndex, BOOL bUseLast, int nMADays );  

4. 读取某只股票数据的示例程序详解  

方法一:  
CStock stock; // 创建CStock对象,用于存储数据。  
stock.SetStockCode( CStock::marketSHSE, “600036” ); // 股票代码  
AfxPrepareStockData( &AfxGetDB(), stock, CKData::ktypeDay, CKData::formatXDRdown, CKData::mdtypeClose, FALSE, TRUE );  
// 装载stock的日线,并向下除权。  
 
CKData kday stock.GetKData(CKData::ktypeDay); // 访问stock的日K线数据  

方法二:  
CStock stock; // 创建CStock对象,用于存储数据。  
stock.SetStockCode( CStock::marketSHSE, “600036” ); // 股票代码

AfxReloadStock( stock ); // 装载stock的所有本地数据  

CKData kday stock.GetKData(CKData::ktypeDay); // 访问stock的日K线数据  
CKData kweek stock.GetKData(CKData::ktypeWeek); // 访问stock的周K线数据  

方法三:  
CStock stock; // 创建CStock对象,用于存储数据。  
stock.SetStockCode( CStock::marketSHSE, “600036” ); // 股票代码  
stock.SetDatabase( &AfxGetDB() ); // 告诉stock一个CStDatabase的指针  
stock.PrepareData( CStock::dataK, CKData::ktypeDay ); // 装载日K线  
stock.PrepareData( CStock::dataK, CKData::ktypeWeek ); // 装载周K线,实际上是从日K线计算转换而来,磁盘上无需存放。  
stock.PrepareData( CStock::dataDR ); // 装载除权数据  

CStockInfo info stock.GetStockInfo(); // 访问stock的基本信息数据  
CKData kday stock.GetKData(CKData::ktypeDay); // 访问stock的日K线数据  
CKData kweek stock.GetKData(CKData::ktypeWeek); // 访问stock的周K线数据  
kday.SetDRData( stock.GetDRData() ); // 设置kdata的除权数据,用来复权  
kday.ChangeCurFormat( CKData::formatXDRdown, AfxGetProfile().GetAutoResumeDRBegin(), AfxGetProfile().GetAutoResumeDRLimit() ); // 对kday向下复权  

5. 调用某指标信号计算的示例程序详解  

CStock stock;  
if( !stock.SetStockCode( CStock::marketSHSE, “600036”  
return;  
if( !AfxPrepareStockData( &AfxGetDB(), stock, CKData::ktypeDay, CKData::formatXDRdown, CKData::mdtypeClose, FALSE, TRUE  
continue;  
CKData kdata stock.GetKData( nKType );  

CTechnique pTech CTechnique::CreateTechnique( STT_MACD, &kdata ); // 创建MACD指标类的对象  
if( NULL == pTech  
return;  
AfxGetProfile().GetTechParameters().FindParameters( STT_MACD, pTech ); // 找到配置文件中的指标参数,并赋给pTech  
UINT itsc ITSC_NOTHING;  
UINT its pTech->GetSignal( kdata.GetSize()-1, &itsc ); // 得到最后一天的买卖信号  
if( ITS_BUY == its // 买入信号  
 
 
if( ITS_SELL == its // 卖出信号  
 
 
delete pTech;  

6. 调用某指标画图的示例程序详解  

画图的函数都在StkUI\View\StockGraph.cpp和SktUI\View\DrawTech.cpp中。  

void CStockGraph:rawTechR( CDC pDC, CRect rect, BOOL bDrawTitle  
// 在rect矩形区域画出威廉指标R的指标曲线,bDrawTitle表示是否画标题.  
 
CStock stock;  
if( !stock.SetStockCode( CStock::marketSHSE, “600036”  
return;  
if( !AfxPrepareStockData( &AfxGetDB(), stock, CKData::ktypeDay, CKData::formatXDRdown, CKData::mdtypeClose, FALSE, TRUE  
continue;  
CKData kdata stock.GetKData( nKType );  

CTechnique pTech CTechnique::CreateTechnique( STT_R, &kdata );  
if( NULL == pTech  
return;  
AfxGetProfile().GetTechParameters().FindParameters( STT_R, pTech );  

int nIndexStart 0, nIndexEnd 200; // 指标值起始和结束下标。  
double dMin 0, dMax 0;  
if( !m_techparam.r.GetMinMaxInfo( nIndexStart, nIndexEnd, &dMin, &dMax // 取得区间内的指标值最大最小值  
|| !DrawAxis( pDC, rect, 10, 5, dMin, dMax, FALSE, TRUE, // 画坐标线及坐标数值, 10为标题高度, 5为纵轴坐标线个数  
return;  
 
DrawTechUtil1( pDC, rect, bDrawTitle, dMin, dMax, STT_R, pTech, &kdata,  
AfxGetProfile().GetColor(CColorClass::clrLine1), drawtechtype_line );  
// 画只有一根线的指标.AfxGetProfile().GetColor(CColorClass::clrLine1)为线的颜色,  
// drawtechtype_line表示画线,drawtechtype_dot表示画点.  
delete pTech;  
}

源代码体系结构分析  

★★1.编译注意事项  
使用VC6打开工作区StkUI.dsw  
然后可以按照以下顺序依次编译各个工程  
GuiLib、profuisdll、XPFace、StkLib、StkNet、StkUI、Tools  
其中工程StkUI是软件的主界面程序,Tools 是注册机以及一些简单的工具,其他  
都是动态连接库。  

★★2.工程profuisdll介绍  
profuisdll是一套比较专业的Windows界面库,在ProfUIS\Modified.txt文件中有说明。  
本软件3.0版仅使用了该界面库的颜色选择对话框。  

★★3.工程GuiLib介绍  
GuiLib是另一套Windows界面库,本软件改正了它的几个bug。在GuiLib\Modified.txt  
文件中有说明。  
本软件3.0版使用了该界面库的界面框架、菜单条、工具条。  

★★4.工程XPFace介绍  
主要是本软件的一些界面美化的类,放在了这个DLL里面。  

★★5.工程StkLib介绍  
这个工程是实现股票数据结构、技术指标计算的动态连接库,代码与平台无关。  
其中比较重要的几个文件如下:  
Database.h 读取数据文件接口定义  
QianLong.h 钱龙格式数据文件接口定义  
SelfDB.h 自有格式数据文件接口定义,除了除权数据和行情数据外,  
其他与钱龙一样  
Stock.h 股票数据结构定义  
Technique.h 技术指标类定义  
Container.h 股票信息数据CStockInfo的数组类  
Express.h 股票列表视图的列变量定义,以及自定义列的表达式计算  
Strategy.h 策略定义  
Profile.h 记录软件的用户配置并保存  

BaseData.cpp 基本资料数据结构类实现  
Database.cpp 数据文件读写实现  
DRData.cpp 除权数据结构数组类实现  
KData.cpp K线数据结构数组类实现  
Report.cpp 行情数据结构数组类实现  
Minute.cpp 行情分时数据结构数组类实现  
Outline.cpp 行情额外数据结构数组类实现  
QianLong.cpp 钱龙数据文件读写实现  
SelfDB.cpp 自有格式数据文件读写实现  
Stock.cpp 股票数据结构实现  
StStore.cpp 数据文件读写实现  
TechCL.cpp 自有技术指标  
TechEnergy.cpp 能量类技术指标  
TechKLine.cpp K线叠加类技术指标  
Technique.cpp 技术指标基类  
TechSwing.cpp 摆动类技术指标  
TechTrend.cpp 趋势类技术指标  
TechOther.cpp 其它类技术指标  
Container.cpp 股票信息数据CStockInfo的数组类实现  
Express.cpp 股票列表视图的列变量定义,以及自定义列的表达式计算实现  
Strategy.cpp 策略定义实现  
Profile.cpp 记录软件的用户配置并保存  
 
工程StkLib的几个全局静态变量:  
g_stockcontainer:AfxGetStockContainer()可以得到该变量的引用,该  
变量记录所有股票的行情信息和基本信息,CStockInfo的数组。  
g_domaincontainer:AfxGetDomainContainer()可以得到该变量的引用,  
该变量记录所有板块的信息。  
g_groupcontainer:AfxGetGroupContainer()可以得到该变量的引用,该  
变量记录所有分组的信息。  
g_stdatabase:AfxGetDB()可以得到该变量的引用,该变量实现了本软件的  
数据文件接口。  
g_stprofile:AfxGetProfile()可以得到该变量的引用,该变量记录当前软  
件的一些设置。  
 
★★6.工程StkNet介绍  
这个工程是实现网络数据自动下载功能的动态连接库。其中比较重要的几个文  
件如下:  
NetDB.h 一些数据下载,安装的接口  
HttpClt.h HTTP协议客户端类  
InfoZip.h 压缩/解压缩Zip文件  
Markup.h XML解析  
XMLDoc.h XML辅助  
secret.h 主要包括一些注册机的加密算法和读取硬盘序列号的类。  

NetDB.cpp 一些数据下载,安装的接口实现  
HttpClt.cpp HTTP协议客户端类实现  
InfoZip.cpp 压缩/解压缩  
Markup.cpp XML解析实现  
Secret.cpp 加密文件,读取硬盘系列号等  
XMLDoc.cpp XML辅助实现  
secret.cpp 主要包括一些注册机的加密算法和读取硬盘序列号的类实现。  

其中工程中的Tongshi Files为支持通视卡行情的实现程序  
其中工程中的Yongxin Files为支持清华永新卡行情的实现程序  
其中工程中的Receiver Files为本软件的行情接收的实现程序,其中将通视卡和清  
华永新卡的数据结构转换成本软件内的通用数据结构,报价(REPORT)、分时(MINUTE)、  
额外(OUTLINE)、K线(KDATA)、除权信息(DRDATA)  

工程StkNet的全局静态变量:  
g_sview:AfxGetSView()可以得到该变量的引用,该变量记录注册信息。  

★★7.工程StkUI介绍  
该工程生成最终可执行文件,主要是软件的界面。主要几个文件如下:  
BaseView.cpp 基本资料视图  
ChildFrm.cpp 子窗口框架  
MainFrm.cpp 主框架,响应菜单命令  
StkUI.cpp 应用程序类,主程序初始化,初始数据读取等  
StaticDoc.cpp 文档类  
WizardView.cpp 向导视图  
SimuView.cpp 策略视图  
MarketView.cpp 实时行情视图  
SListView.cpp 股票列表视图  
StockGraph.cpp 技术指标视图画图类  
DrawTech.cpp 画具体技术指标的函数,属于CGraphView类的方法  
GraphView.cpp 技术指标视图  
StrategyView.cpp 策略树视图  
GroupView.cpp 股票分组树视图  
TechsView.cpp 技术指标树视图  

★★8.工程Tools介绍  
该工程包含以下几个模块:  
注册机,利用了StkNet工程导出的AfxGetSView()。  
从txt基本资料文件中提取财务数据的小工具。  
修改文件时间的小工具��