byx45 发表于 2006-3-17 04:20

分析家分笔文件结构

说明:
下面是我以前写一个小工具的时候,根据一些资料和自己实际的分析所得。Prp文件在最后一段,应该还有写库数据,不过不太感兴趣没去管它。
应该是最详尽的了,用Macd上的数据,基本上准确。
发出来,省得大家不停的作重复劳动,这个没啥技术含量。

Prp文件结构:
1、文件分成三个部分:
文件头:0-23字节
索引:24开始-266240之间,深圳的,这个数字已经改变。在文件头4-7字节计算。
数据:266240开始,分块存放数据
2、文件头:
0-3:标记,表示是PRP文件,所有文件该值均为F4 9B 13 Fc
4-7:int 类型,由这个值可以定位数据开始位置,数据开始位置=(整数-8)*64*8,目前是0x210或528,
               由此计算数据开始位置是266240,考察分析家预留
               的空间,短期内不会改变这个值。
               深圳市场文件:00 03 00 00 =768
               上海市场文件:10 02 00 00 =528
               如果确实是这样,则我们处理深圳数据的时候,应该更改这个值!
               如果这两个值到目前为止没有变化,则我们可以使用它来判断文件是存放上海还是深圳的行情。               
               最后确定,这个是开始读数据的地方,深圳文件在2002年的时候和上海一致的,最近改成了这个数字。为此我修改了程序.
8-11:日期,是C语言格式。表示存放的是哪天的数据。
12-15:股票数量,是4字节整数,但在4.0版是使用短整数读取的。所以若处理以前的文件,用短整数读比较保险。
16-19:整数,好像这个整数*256*32+266240=文件长度
20-23 (4 byte):下一个记录开始位置,写数据时用。我们好像不用管它。

3、索引:从24开始,到数据块的开始位置之前,索引块的结束位置由文件头的4-7决定。
从24开始,是每只股票的64个字节的索引。多少只股票由文件头的12-15确定。64个字节如下:
0-9 (10 byte):股票代码,如31 41 30 30 30 31 00 FF FF FF。
10-13 (4 byte):long int 类型,这个股票的总分笔数据个数。
14-63 (50 byte):short int 类型,共25个短整数,每个数据块的开始位置。数据块的开始位置=短整数*113*36+股票数据开始位置(由文件头4-7决定),遇-1(0xFFFF)结束。

4、数据:从4-7决定的位置开始,以块的形式确认。
我们通过索引找到块,索引中的股票分笔数据数目/113,如果余数不为0则+1,是块的数目;由此我们也能够按顺序的访问每条分笔数据,
即:序号/133,表示在哪一块,序号%133表示在该块的偏移。
在每一块内,是多条分笔行情记录的按顺序排列的数组,每笔行情包括36个字节:

16个字段,以下是相对位置。
0-3 (4 byte):time_t 类型,日期和时间。
4-7 (4 byte):float 类型,最新价(成交价)。
8-11 (4 byte):float 类型,成交量累计。
12-15 (4 byte):float 类型,成交额累计。
16-17 (2 byte):unsigned short int 类型,买一量。
18-19 (2 byte):unsigned short int 类型,买二量
20-21 (2 byte):unsigned short int 类型,买三量
22-23 (2 byte):unsigned short int 类型,卖一量
24-25 (2 byte):unsigned short int 类型,卖二量
26-27 (2 byte):unsigned short int 类型,卖三量
28-28 (1 byte):char 类型,买一价,实际值是这个有符号数除100加最新价。
29-29 (1 byte):char 类型,买二价,实际值是这个有符号数除100加最新价。
30-30 (1 byte):char 类型,买三价,实际值是这个有符号数除100加最新价。
31-31 (1 byte):char 类型,卖一价,实际值是这个有符号数除100加最新价。
32-32 (1 byte):char 类型,卖二价,实际值是这个有符号数除100加最新价。
33-33 (1 byte):char 类型,卖三价,实际值是这个有符号数除100加最新价。
34-35 (2 byte):为0080或00C0,内外盘。
注意,基金和权证,买一价之类是除以0.001

gm 发表于 2006-3-23 21:45

非常感谢!!!

username 发表于 2006-3-25 22:13

谢谢大师

谢谢大师,我要去研究研究

username 发表于 2006-3-25 22:17

三档买卖盘啊,不是五档吗?

三档买卖盘啊,不是五档吗?

byx45 发表于 2006-3-26 22:14

这个是Macd下载的PRP文件结构

好像,实时接收的时候,比如使用FreeStar_HellowWorld之类,你可以按照通视的协议得到5档买卖盘数据。但分析家保存为Prp文件,仍然是按照以前三档保存。
我没试过"历史回忆"的实际操作,不知能否再现5档买卖盘,若能则必定是在Prp文件中以补丁的方式增加了买4、买5之类的信息,若不能,则只能说这些懒惰的人沿用了以前版本的分笔保存体系。
不过对分析而言,4、5档甚至买卖盘,作用不太明显吧?

paterzheng 发表于 2006-5-1 13:42

非常感谢

这份是最准最详细的

paterzheng 发表于 2006-5-1 14:22

有个疑问?

4-7:int 类型,由这个值可以定位数据开始位置,数据开始位置=(整数-8)*64*8,目前是0x210或528,
               由此计算数据开始位置是266240,考察分析家预留
               的空间,短期内不会改变这个值。
               深圳市场文件:00 03 00 00 =768
               上海市场文件:10 02 00 00 =528
               如果确实是这样,则我们处理深圳数据的时候,应该更改这个值!

我读取了20021231.PRP这个文件,深圳的确是768,不过仍然要按照528处理才行。为什么?
还有,200604月份上海深圳这个字段的是1281,但也要528处理就ok了

金卡绣球jk8.com 发表于 2006-5-2 16:49

“4-7:int 类型” 这个是版本号,不用猜了

数据从 0x41000 起,目前看,是固定的,也不用猜了;

软件还有其它错误(fxj本身、fh也是),有对不上真正交易所数据的时候

[ 本帖最后由 金卡绣球jk8.com 于 2006-5-5 00:28 编辑 ]

yls5461 发表于 2006-5-4 17:17

金卡绣球数据如何转换

金卡绣球jk8.com 发表于 2006-5-5 00:29

原帖由 yls5461 于 2006-5-4 17:17 发表
金卡绣球数据如何转换

请看帮助菜单,很简单的,设置里指定好软件的安装位置,就可以转换了

etah000 发表于 2006-5-14 10:22

谢谢!!!!!!!!!!!!!!!!!!!!

claysu 发表于 2008-3-1 10:28

找了好久
感谢楼主
页: [1]
查看完整版本: 分析家分笔文件结构