- 金币:
-
- 奖励:
-
- 热心:
-
- 注册时间:
- 2006-6-27
|
|
#ifndef mFenxijia
#define mFenxijia
#include <windows.h>
#include <time.h>
//分析家的代码对照表数据文件为*.SNT,分红配股数据文件为*.PWR,财务数据文件为*.FIN,可上分析家
//网站上下载最新数据。
//分析家的代码对照表数据文件为一文本文件,前面25个字节是标识信息,接着的是数据,每条记录17个字节。
typedef struct
{
BYTE pbSignature[21]; //字符串SuperStk Name Table回车换行
BYTE pbMarket[4]; //SH或SZ两个字符和回车换行
} tstFxjSntHead; //文件头
typedef struct
{
BYTE pbCode[6]; //证券代码
BYTE bH09; //0x09
BYTE pbName[8]; //证券名称
BYTE pbRetLF[2]; //回车换行
} tstFxjSntData; //每条数据
// 分析家分红配股数据的文件头标识,共8个字节。
typedef struct
{
UINT uSignature1; //0xff43c832
UINT uSignature2; //0xffcc83dd
} tstFxjFhpgHead; //分红配股数据的文件头标识
//其后的数据按tunFxjFhpgRecord排列,直至结尾。
typedef struct
{
UINT uSignature; //标志 0xffffffff
BYTE pbMarket[2]; //市场 "SZ"=深圳,"SH"=上海
BYTE pbCode[6]; //代码
BYTE pbUnknown[8]; //未知
} tstFxjFhpgRecordHead; //记录头
typedef struct
{
time_t uDate; //日期
float fZgsl; //增股数量 (以股为单位)
float fPgsl; //配股数量 (以股为单位)
float fPgjg; //配股价格 (以股为单位)
float fFhje; //分红金额 (以股为单位)
} tstFxjFhpgRecordBody, *tpstFxjFhpgRecordBody; //记录体
typedef union
{
tstFxjFhpgRecordHead stHead;
tstFxjFhpgRecordBody stBody;
} tunFxjFhpgRecord, *tpunFxjFhpgRecord; //记录
//读入的数据应该先判断前四个字节是否为0xffffffff(记录头标志),即:
// 是否tunFxjFhpgRecord.stHead.uSignature==0xffffffff ?
//若是则按tstFxjFhpgRecordHead处理,这是每只股票数据的开头标识。
//否则按tstFxjFhpgRecordBody处理,这是该股票某时日的分红配股数据,每次一条。
#define mFxjFhpgSign1 0xff43c832 //分析家分红配股标识一
#define mFxjFhpgSign2 0xffcc83dd //分析家分红配股标识二
#define mFxjFhpgRecSign 0xffffffff //分析家分红配股记录标识
// 分析家财务数据的文件头标识,共8个字节。
typedef struct
{
UINT uSignature; //文件头标识,0x223fd90c
UINT uRecordLength; //每条记录的长度,似乎都为0xa6(166)
} tstFxjFinanceHead;
// 分析家财务数据文件逐条记录,166个字节。
#define mFinanceDataCount 37 //财务数据项数
typedef struct
{
BYTE pbMarket[2]; //市场标志,"SH"=上海,"SZ"=深圳
BYTE pbUnknown1[2]; //未知,似乎都为0x01,0x00
BYTE pbCode[6]; //证券代码
UINT uUnknown1; //未知,似乎都为0x00000000
time_t uDate; //时间
float pfFinanceData[mFinanceDataCount]; //财务数据
} tstFxjFinanceData, *tpstFxjFinanceData;
/*财务数据顺序(pfFianceData[mFinanceDataCount]各项意义)
序号 意义
0 总股本(万股),
1 国家股,
2 发起人法人股,
3 法人股,
4 B股,
5 H股,
6 流通A股,
7 职工股,
8 A2转配股,
9 总资产(千元),
10 流动资产,
11 固定资产,
12 无形资产,
13 长期投资,
14 流动负债,
15 长期负债,
16 资本公积金,
17 每股公积金,
28 股东权益,
19 主营收入,
20 主营利润,
21 其他利润,
22 营业利润,
23 投资收益,
24 补贴收入,
25 营业外收支,
26 上年损益调整,
27 利润总额,
28 税后利润,
29 净利润,
30 未分配利润,
31 每股未分配,
32 每股收益,
33 每股净资产,
34 调整每股净资,
35 股东权益比,
36 净资收益率
*/
#define mFxjCwsjSign 0x223fd90c //分析家财务数据标志
//分析家的板块数据有很多文件,在其网站上下载为一个叫做BLOCK.ZIP的压缩包,包里有个block.def的定义文件
//该文件定义了板块种类名和相关联的板块名,各板块包含的具体的证券代码在以各板块名命名(加.blk后缀)的
//文件中。
//比如block.def中定义:
//[行业]
//电力
//电脑
//电器
//......
//[区域]
//安徽
//北京
//福建
//......
//就定义了行业和区域这两种板块类别,前者包含了电力、电脑、电器.......等等具体板块,后者包含了安徽、北京
//、福建......等等具体板块,在以这些具体板块名命名的文件如:电力.blk、北京.blk中,存放着该板块的证券代码,
//这些代码上海以SH深圳以SZ开头,如SH600776、SZ000751。
//定义板块文件记录类型
typedef struct
{
BYTE bCode[8]; //证券代码
BYTE bUnknown[4]; //未知
} tstFxjBlockFileRecord,
*tpstFxjBlockFileRecord;;
//定义单一板块类型
typedef struct
{
char szName[20]; //板块名
WORD wCount; //证券总数
tpstFxjBlockFileRecord pstRecord; //数据指针,该板块的所有证券代码表
} tstFxjBlockDetail,
*tpstFxjBlockDetail;
//定义单一板块类别类型
typedef struct
{
char szName[20]; //板块类别名
BYTE bCount; //本类别里的板块总数
tpstFxjBlockDetail pstDetail; //本类别里的板块具体情况指针
} tstFxjBlockSort,
*tpstFxjBlockSort;
class tclFenxijia
{
char xszPath[256]; //分析家数据目录
WORD xwVersion; //版本
BYTE xbValid; //合法标识
tpstFxjFinanceData xpstFinData; //财务数据指针
UINT xuFinCount; //财务数据记录总数
tpunFxjFhpgRecord xpunPwrData; //分红配股记录指针
UINT xuPwrCount; //分红配股记录总数
public:
//构造函数
tclFenxijia(char *aszPath="\\fxj", WORD awVersion=0x300);
//析构函数
~tclFenxijia(void);
//读入某证券的财务数据, 返回为财务数据的个数, 如果返回为0则表明失败
//参数证券代码为分析家的表示方法, 上海以'SH'开头, 深圳以'SZ'开头
//参数apstData将被分配内存,用完后应该释放
UINT fnReadFinanceData(char *apbCode, tpstFxjFinanceData *apstData);
//读入分红配股数据, 返回为分红配股数据的个数, 如果返回为0则表明失败或者没有记录,
//参数证券代码为分析家的表示方法, 上海以'SH'开头, 深圳以'SZ'开头
//参数apstData将被分配内存,用完后应该释放
UINT fnReadFhpgData(char *apbCode, tpstFxjFhpgRecordBody *apstData);
//返回数据是否可用
inline BOOL IsValid(void)
{
return xbValid;
};
//读入板块数据,参数apstSort将会被自动分配内存,一定要用fnReleaseBlockData释放内存
BYTE fnReadBlockData(tpstFxjBlockSort *apstSort);
//释放板块数据空间,abCount为板块种类数
void fnReleaseBlockData( BYTE abCount, tpstFxjBlockSort apstSort );
};
#endif |
|
|