跪求各位大师,我愿意出我的全部财产 ( 积分: 200 )

  • 主题发起人 wangpu0452
  • 开始时间
W

wangpu0452

Unregistered / Unconfirmed
GUEST, unregistred user!
我的qq :495946078
我想把股票软件宏汇的分笔数据转换为飞狐的分笔数据。分析家也行,
用c++语言写。谢谢了。宏汇的分笔成交的类已经建立,例如 下文中(分笔成交类 clsTick;)
我在宏汇中找到 宏汇的分笔成交输出到dbf文件的源码,我想把它改成输出为飞狐分笔数据。
源码如下:
////////////////////////////////////////////////////////////////////////
// 输出指定品种和指定日期的分笔数据(Tick)
////////////////////////////////////////////////////////////////////////
//定义dbf类
DBF类 dbf;
//定义输出文件的路径和名称
char dbfname[128];
//sprintf(dbfname, "%s//0001.dbf", 输出路径);
sprintf(dbfname, "%s//%s%s%d至%d的分笔数据.dbf", 输出路径,当前品种代码,当前品种名称,开始日期,截止日期);
输出("文件保存路径为%s", dbfname);
//输出("%s", dbfname);
//判断创建数据库是否成功
if (!dbf.创建数据库(dbfname))
{
显示调试信息(错误, "创建“%s”失败", dbfname);
return;
}
//判断用户选择字段信息
if (是否含有字段("时间")) dbf.添加字段("Time", 'C', 20, 0, "时间");
if (是否含有字段("价格")) dbf.添加字段("Price", 'N', 6, 2, "价格");
if (是否含有字段("买/卖")) dbf.添加字段("BS", 'C', 2, 0, "买/卖");
if (是否含有字段("成交量")) dbf.添加字段("Volume",'N', 6, 0, "成交量");
if (是否含有字段("成交金额")) dbf.添加字段("Money", 'N', 6, 2, "成交金额");
if (是否含有字段("成交笔数")) dbf.添加字段("bishu", 'N', 6, 0, "成交笔数");
if (是否含有字段("卖量5")) dbf.添加字段("SV5", 'N', 10, 0, "卖量5");
if (是否含有字段("卖量4")) dbf.添加字段("SV4", 'N', 10, 0, "卖量4");
if (是否含有字段("卖量3")) dbf.添加字段("SV3", 'N', 10, 0, "卖量3");
if (是否含有字段("卖量2")) dbf.添加字段("SV2", 'N', 10, 0, "卖量2");
if (是否含有字段("卖量1")) dbf.添加字段("SV1", 'N', 10, 0, "卖量1");
if (是否含有字段("卖价5")) dbf.添加字段("SP5", 'N', 6, 2, "卖价5");
if (是否含有字段("卖价4")) dbf.添加字段("SP4", 'N', 6, 2, "卖价4");
if (是否含有字段("卖价3")) dbf.添加字段("SP3", 'N', 6, 2, "卖价3");
if (是否含有字段("卖价2")) dbf.添加字段("SP2", 'N', 6, 2, "卖价2");
if (是否含有字段("卖价1")) dbf.添加字段("SP1", 'N', 6, 2, "卖价1");
if (是否含有字段("买量1")) dbf.添加字段("BV1", 'N', 10, 0, "买量1");
if (是否含有字段("买量2")) dbf.添加字段("BV2", 'N', 10, 0, "买量2");
if (是否含有字段("买量3")) dbf.添加字段("BV3", 'N', 10, 0, "买量3");
if (是否含有字段("买量4")) dbf.添加字段("BV4", 'N', 10, 0, "买量4");
if (是否含有字段("买量5")) dbf.添加字段("BV5", 'N', 10, 0, "买量5");
if (是否含有字段("买价1")) dbf.添加字段("BP1", 'N', 6, 2, "买价1");
if (是否含有字段("买价2")) dbf.添加字段("BP2", 'N', 6, 2, "买价2");
if (是否含有字段("买价3")) dbf.添加字段("BP3", 'N', 6, 2, "买价3");
if (是否含有字段("买价4")) dbf.添加字段("BP4", 'N', 6, 2, "买价4");
if (是否含有字段("买价5")) dbf.添加字段("BP5", 'N', 6, 2, "买价5");
if (是否含有字段("买比")) dbf.添加字段("bsRatio", 'N', 6, 2, "买比");
//定义分笔成交类
分笔成交类 clsTick;
//输出("%d - %d", 开始索引, 截止索引);

//取数据日期(周期),并输出成交价格、成交量和成交金额
long lDate, lTime;
char szMark[4];
char szTime[32];
for (int j=开始索引;
j<=截止索引;
j++)
{

lDate = K线数据[j].取日期();
输出("输出%s股票 %d的分笔数据",当前品种代码,lDate);
if (!clsTick.读取分笔成交(lDate))
{
输出("输出日期为%d 的数据失败! 请先下载该代码的Tick数据", lDate);
continue;
}

int total = clsTick.总笔数();
int intVolume=0;
输出("成交总笔数%d", total);
for (int i=0;
i<total;
i++)
{
sprintf(szMark, "%c", clsTick[买卖标志]);
lTime = clsTick.取时间();
sprintf(szTime, "%2d-%2d-%2d %2d:%2d:%2d", lDate / 10000, lDate / 100 % 100, lDate % 100, lTime / 10000, lTime / 100 % 100, lTime % 100);
dbf.设置字符串("Time", szTime);
dbf.设置数据("Price",clsTick[成交价]);
dbf.设置字符串("BS",szMark);
intVolume=(i>0)?clsTick[成交量]-clsTick[i-1][成交量] : clsTick[成交量];
dbf.设置数据("Volume",intVolume);
dbf.设置数据("Money",intVolume*clsTick[成交价]);
dbf.设置数据("bishu",(i>0) ? clsTick[成交笔数]-clsTick[i-1][成交笔数] : clsTick[成交笔数]);


dbf.设置数据("SV5",clsTick[卖量5]);
dbf.设置数据("SV4",clsTick[卖量4]);
dbf.设置数据("SV3",clsTick[卖量3]);
dbf.设置数据("SV2",clsTick[卖量2]);
dbf.设置数据("SV1",clsTick[卖量1]);
dbf.设置数据("SP5",clsTick[卖价5]);
dbf.设置数据("SP4",clsTick[卖价4]);
dbf.设置数据("SP3",clsTick[卖价3]);
dbf.设置数据("SP2",clsTick[卖价2]);
dbf.设置数据("SP1",clsTick[卖价1]);
dbf.设置数据("BV1",clsTick[买量1]);
dbf.设置数据("BV2",clsTick[买量2]);
dbf.设置数据("BV3",clsTick[买量3]);
dbf.设置数据("BV4",clsTick[买量4]);
dbf.设置数据("BV5",clsTick[买量5]);
dbf.设置数据("BP1",clsTick[买价1]);
dbf.设置数据("BP2",clsTick[买价2]);
dbf.设置数据("BP3",clsTick[买价3]);
dbf.设置数据("BP4",clsTick[买价4]);
dbf.设置数据("BP5",clsTick[买价5]);

dbf.设置数据("bsRatio",clsTick[买卖比]);
dbf.追加记录();
}
}
//关闭打开的数据
dbf.关闭();
我在网上查找到飞狐分笔数据的格式 如下:
QRT文件格式
* 文件头 00 - 1F 00 - 03 E0 FF FF FF QRT文件标志
04 - 07 保留
08 - 0B 保留
0C - 0D 证券总数,SHORT * 数据索引 20 - 1F801F,每252字节为一个记录,可存放8192个证券(单个市场),每个证券可存储21120个分笔数据
20 - 29 证券代码,CHAR[10]
30 - 33 分笔记录数,INTEGER
34 - 6F 分笔记录块号,SHORT[33],
70 - 73 保留,INTEGER
74 - 77 保留,INTEGER
78 - 7B 保留,INTEGER
7C - 7F 前收,FLOAT
80 - 83 今开,FLOAT
84 - 87 最高,FLOAT
88 - 8B 最低,FLOAT
8C - 8F 收盘,FLOAT
90 - 93 现手,FLOAT
94 - 97 成交量,FLOAT
98 - 9B 成交金额,FLOAT
9C - 9F 均价,FLOAT
A0 - A3 涨跌,FLOAT
A4 - A7 振幅,FLOAT
A8 - AB 涨幅,FLOAT
AC - AF 未知,FLOAT
B0 - B3 未知,FLOAT
B4 - B7 量比,FLOAT
B8 - BB 未知,FLOAT
BC - BF 未知,FLOAT
C0 - C3 买一价,FLOAT
C4 - C7 卖一价,FLOAT
C8 - CB 外盘,FLOAT
CC - CF 内盘,FLOAT
D0 - D3 未知,FLOAT
D4 - D7 买一量,FLOAT
D8 - DB 买二量,FLOAT
DC - DF 买三量,FLOAT
E0 - E3 买一价,FLOAT
E4 - E7 买二价,FLOAT
E8 - EB 买三价,FLOAT
EC - EF 卖一量,FLOAT
F0 - F3 卖二量,FLOAT
F4 - F7 卖三量,FLOAT
F8 - FB 卖一价,FLOAT
FC - FF 卖二价,FLOAT
100 - 103 卖三价,FLOAT
104 - 107 换手,FLOAT
108 - 10B 未知,FLOAT
10C - 10F 市盈率,FLOAT
110 - 113 未知,FLOAT
114 - 117 未知,FLOAT
118 - 11B 流通市值,FLOAT
* 数据记录,1F8020起为第0记录块,每36字节为一个分笔交易数据,每数据块长度为23040字节,计640笔分笔交易记录
1F8020 - 1F8023 时间(C格式)
1F8024 - 1F8027 最新价,FLOAT
1F8028 - 1F802B 累计成交量,FLOAT
1F802C - 1F802F 累计成交额, FLOAT
1F8030 - 1F8031 买一量,SHORT
1F8032 - 1F8033 买二量,SHORT
1F8034 - 1F8035 买三量,SHORT
1F8036 - 1F8037 卖一量,SHORT
1F8038 - 1F8039 卖二量,SHORT
1F803A - 1F803B 卖三量,SHORT
1F803C 买一价的小数部分,BYTE
1F803D 买二价的小数部分,BYTE
1F803E 买三价的小数部分,BYTE
1F803F 卖一价的小数部分,BYTE
1F8040 卖二价的小数部分,BYTE
1F8041 卖三价的小数部分,BYTE
1F8042 - 1F8043 买卖标志,SHORT,0X0140为买入,0X0040为卖出,0X0000不能判断
委买,委卖价由最新价加委买,委卖价小数部分得到,如:
委买价1的小数部分=16h(<80h), 则委买价1=最新价+32/100;(16h=32d)
委买价2的小数部分=9Ah(>80h), 则委买价2=最新价-(256-154)/100;(9Ah=154d)
单笔成交量用本笔累计数减上笔累计数得到


实在不行,帮,帮忙转成分析家的分笔也行,格式如下,谢谢了
关于作分析家分笔成交数据存储格式和作股票分析
分析家分笔成交数据存储格式:
上海当天分笔成交数据存储文件为:/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
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]
......
地 址 数据内容 数据含义 数据类型
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,则单笔成交量是卖出量。
附:
我用EXCEL VBA 编程,对分笔成交数据作相应数据处理,可统计 日,周,月,年 分笔成交买入,卖出量及增减仓量和买入,卖出大单数,
尽管FXJ分笔成交数据只是播发方设定的每分钟提前数与播发数,但每日的成交总手数和内外盘数(也就是当日的买入,卖出量)已知,利用
EXCEL强大的分析透视功能,再结合传统技术指标和F10资料作股票分析,........
 
B

batconv

Unregistered / Unconfirmed
GUEST, unregistred user!
哎呀,C没用过啊,帮你顶一下吧
 
D

delp

Unregistered / Unconfirmed
GUEST, unregistred user!
兄弟够辛苦你的了。
宏汇的数据我也解出来了,呵呵不过根你的方法不同。
不过有一个问题可以问你一下吗?你会写程序吗?
 

Similar threads

S
回复
0
查看
947
SUNSTONE的Delphi笔记
S
S
回复
0
查看
768
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
866
import
I
顶部