网际风客户端版本更新历史 2010-4-26 V3.63 版本发布 1、根据客户需求,开放除权和财务数据解析和自动更新和解析读取功能。 在网际风其他选项中,增加“解析除权财务”选项,选中该选项后,具备如下功能: (1)、每天 8:30-9:00 期间会自动下载一次财务和除权数据,并存放到 C:\ 做备份。 (2)、STOCK.DLL 增加 GetStockPwr 和 GetStockFin 取除权和财务数据功能(基于已经下载到本地的 C:\除权数据 和 C:\财务数据 文件的解析,只有正常调用DLL并初始化后,已经正常连接服务器收到码表信息以后,上述财务除权数据才会被读进来供查询,没有连接成功和正常收到数据,上述查询结果均为0)。 int WINAPI GetStockPwr(char * StockCode, int nMarket, int * PwrNum, pchar pdata); // 取除权数据 入口:StockCode 证券代码:比如 600001 nMarket:市场代码 0x4853 代表上海 0x5A53 代表深圳 返回:函数返回1说明调用成功 0说明代码无效或上述开关未选中 除权数据个数在 PwrNum 中返回 数据在 pdata 中返回(不含头部标识帧)长度为 PwrNum*siezof(RCV_POWER_STRUCTEx):格式见下面,共20(0x14)字节 RCV_POWER_STRUCTEx=record m_time:time_t; // UCT 4字节 m_fGive:single; // 每股送 4字节 m_fPei:single; // 每股配 4字节 m_fPeiPrice:single; // 配股价,仅当 m_fPei!=0.0f 时有效 4字节 m_fProfit:single; // 每股红利 4字节 end; int WINAPI GetStockFin(char * StockCode, int nMarket, pchar pdata); // 取财务数据 入口:StockCode 证券代码:比如 600001 nMarket:市场代码 0x4853 代表上海 0x5A53 代表深圳 返回:函数返回1说明调用成功 0说明代码无效或上述开关未选中 pdata 内容见下面财务数据记录体格式,共166(0xA6)字节 m_wMarket:WORD; // 股票市场类型 N1:WORD; // 保留字段 2字节 m_szLabel:StockNumType; // 股票代码,以'\0'结尾,如 "600050" 10个字节 同通视规范定义 BGRQ:longint; // 财务数据的日期 如半年报 季报等 如 20090630 表示 2009年半年报 ZGB:single; // 总股本 GJG:single; // 国家股 FQFRG:single; // 发起人法人股 FRG:single; // 法人股 BGS:single; // B股 HGS:single; // H股 MQLT:single; // 目前流通 ZGG:single; // 职工股 A2ZPG:single; // A2转配股 ZZC:single; // 总资产(千元) LDZC:single; // 流动资产 GDZC:single; // 固定资产 WXZC:single; // 无形资产 CQTZ:single; // 长期投资 LDFZ:single; // 流动负债 CQFZ:single; // 长期负债 ZBGJJ:single; // 资本公积金 MGGJJ:single; // 每股公积金 GDQY:single; // 股东权益 ZYSR:single; // 主营收入 ZYLR:single; // 主营利润 QTLR:single; // 其他利润 YYLR:single; // 营业利润 TZSY:single; // 投资收益 BTSR:single; // 补贴收入 YYWSZ:single; // 营业外收支 SNSYTZ:single; // 上年损益调整 LRZE:single; // 利润总额 SHLR:single; // 税后利润 JLR:single; // 净利润 WFPLR:single; // 未分配利润 MGWFP:single; // 每股未分配 MGSY:single; // 每股收益 MGJZC:single; // 每股净资产 TZMGJZC:single; // 调整每股净资产 GDQYB:single; // 股东权益比 JZCSYL:single; // 净资收益率 2010-3-1 V3.62 版本发布 1、对通视协议扩充,增加3个字段的数据传输(期货结算价4字节、秒内周期1字节、沪深股票成交笔数3字节,共8个字节的数据),可以以通视内嵌或通视扩展方式提供。 该扩充数据仅对使用网际风协议的应用软件适用,对分析家、飞狐软件不适用,因为这些分析软件的功能已经确定了,无法更改功能来使用上述扩充数据。 { m_fAvgPrice:single; // 商品期货均价 可近似为结算价 4字节浮点数 期货的昨结算在昨收盘字段提现(即期货行情的昨收盘并非昨日的最后一笔价格而是交易所发布的结算价) m_fTickAll:DWORD; // 成交总笔数(交易所发布) 最高字节为秒内周期 0.01 秒为单位 协议最高支持每秒100笔数据 总笔数1677万笔 足够了 } 2、数据下载支持“下载上一交易日5分钟K线和日线选项”并增加自动下载选项,对24小时交易品种可自动下载上一交易日的数据代替收盘作业。 (自动下载时间:7:00-8:50 16:40-23:50 期间如果未下载过则10分钟后自动下载一次上述数据) 网际风接口规范及开发指南 int WINAPI Stock_Init(HWND hWnd,UINT Msg,int nWorkMode); int WINAPI Stock_Quit(HWND hWnd); int WINAPI GetStockDrvInfo(int nInfo,void * pBuf); 上述3个调用规范跟通视规范完全一样 3.62版本扩展: (2010-3-1后下载的版本支持下列规范) RCV_REPORT = 0x3f001234; // 接收到行情 RCV_FILEDATA = 0x3f001235; // 接收到文件类型数据 RCV_PANKOUDATA =0x3f001258; // 接收到盘口数据 新增 盘口类型 定义见下面的 My_PankouType RI_IDSTRING=1; // 厂商名称,返回(LPCSTR)厂商名 RI_IDCODE=2; // 卡号 RI_VERSION=3; // 驱动程序版本 RI_ERRRATE=4; // 取信道误码 RI_STKNUM=5; // 取上市股票总家数 RI_V2SUPPORT=6; // 支持深圳SJS库结构 FILE_POWER_EX=6; // 补除权数据 FILE_MINUTE_EX=4; // 补分时 FILE_HISTORY_EX=2; // 补日线 // 下列3条驱动查询参数类型为网际风新增的扩充类型,通视协议中并未包含下述类型: RI_PanKouSUPPORT =0x100; // 支持盘口数据 网际风新增 驱动是否支持盘口数据 RI_DATAExtSUPPORT1=0x101; // 支持扩展数据传输 内嵌通视协议 V3.62新增 扩充数据以内嵌方式提供(存放在品种名称的最后8字节)行情大小仍为158字节 代码名称空间从16汉字变成12汉字 RI_DATAExtSUPPORT2=0x102; // 支持扩展数据传输 通视扩展协议 V3.62新增 扩充数据以扩展方式提供(存放在买卖5数据后面8字节)行情大小变为166字节 // 下列2条补数据类型为网际风新增的扩充类型,通视协议中并未包含下述类型: FILE_5MINUTE_EX=0x51; // 补5分钟K线 数据格式与日线完全相同 仅仅参数不同而已 FILE_1MINUTE_EX=0x52; // 补1分钟K线 数据格式与日线完全相同 仅仅参数不同而已 网际风市场代码说明: (市场编码等同于市场简称的ASCII码 2字节) SH_MARKET_EX=0x4853; // 上海 SH 的 ASCII码为 53 48 下同 SZ_MARKET_EX=0x5A53; // 深圳 HK_MARKET_EX=0x4B48; // 香港 HQ_MARKET_EX=0x5148; // 香港权证 NQ_MARKET_EX=0x514E; // 国内期货 WQ_MARKET_EX=0x5157; // 国外期货 WH_MARKET_EX=0x4857; // 外汇直盘与交叉盘 HZ_MARKET_EX=0x5A48; // 恒生期指 ID_MARKET_EX=0x4449; // 全球指数 SF_MARKET_EX=0x4653; // 股指期货 SG_MARKET_EX=0x4753; // 黄金现货 网际风新增API说明: 调用 GetStockDrvInfo(RI_PanKouSUPPORT,NULL) 返回1表明支持盘口数据传输,否则为不支持,最少要调用一次,否则无法取得网际风协议的分笔数据 调用 GetStockDrvInfo(RI_DATAExtSUPPORT1,NULL) 返回1表明扩充数据以通视内嵌格式传输,行情大小仍为158字节大小,扩充的8字节数据存放在股票名称的最后8字节 代码名称空间从16汉字变成12汉字 调用 GetStockDrvInfo(RI_DATAExtSUPPORT2,NULL) 返回1表明扩充数据以通视扩展格式传输,行情大小变为166字节大小,扩充的8字节数据存放在买卖5后8字节 如果驱动未调用GetStockDrvInfo(RI_DATAExtSUPPORT1,NULL)或GetStockDrvInfo(RI_DATAExtSUPPORT2,NULL),则为默认的通视协议格式,不传输上述8字节扩充数据 int WINAPI GetStockMin(char * StockCode, int nMarket); // 取分时数据 入口:StockCode 证券代码:比如 600001 nMarket:市场代码 0x4853 代表上海 0x5A53 代表深圳 返回:分时数据通过行情消息返回 函数返回1说明调用成功 0说明代码无效 int WINAPI GetStockPRP(char * StockCode, int nMarket); // 取分笔数据 入口:StockCode 证券代码:比如 600001 nMarket:市场代码 0x4853 代表上海 0x5A53 代表深圳 返回:分笔数据通过行情消息返回 函数返回1说明调用成功 0说明代码无效 wParam=RCV_PANKOUDATA (0x3f001258) lParam 指向 My_PankouType 类型的地址 注意: 两次调用GetStockMin和GetStockPRP的间隔必须大于1秒种,否则请求会被服务器忽略 调用GetStockPRP的代码参数只要出现过一次'1A0001',则表明分析软件的上海指数代码使用钱龙规范, 以后传回的数据上海指数代码均使用钱龙规范(如1A0001等) RCV_PANKOU_STRUCTEx=Record // 网际风分笔定义(每一笔) V3.62 作了修改 请使用3.62以后的版本使用新的分笔定义 一共116字节 请检查是否一致 m_time:time_t; // 与动态行情一致 4字节 m_fHigh:single; // 最高价 4字节 m_fLow:single; // 最低价 4字节 m_fNewPrice:single; // 最新价 4字节 m_fVolume:single; // 成交量 4字节 m_fAmount:single; // 成交额 4字节 m_lStroke:Longint; // 保留 4字节 m_fBuyPrice:array[1..5] of single; // 申买价1,2,3,4,5 4字节*5=20字节 m_fBuyVolume:array[1..5] of single; // 申买量1,2,3,4,5 4字节*5=20字节 m_fSellPrice:array[1..5] of single; // 申卖价1,2,3,4,5 4字节*5=20字节 m_fSellVolume:array[1..5] of single; // 申卖量1,2,3,4,5 4字节*5=20字节 m_fAvgPrice:single; // 商品期货均价 可近似为结算价 对国内商品期货有效 4字节 m_fTickAll:DWORD; // 成交总笔数(交易所发布) 最高字节为秒内周期 0.01 秒为单位 1+3=4字节 end; My_PankouType=record // 返回分笔数据类型 V3.62 作了修改 请使用3.62以后的版本使用新的分笔定义 m_wMarket:WORD; // 股票市场类型 同通视规范定义 2字节 m_wStkIdx:WORD; // 股票在该市场的码表索引 V3.62 版本修改字段 2字节 m_szLabel:StockNumType; // 股票代码,以'\0'结尾,如 "600100" 同通视规范定义 10字节 m_lDate:longint; // FORMAT: 20010305,0表示当天或最近交易日的明细数据 4字节 m_fLastClose:single; // 昨收 4字节 m_fOpen:single; // 今开 4字节 m_nAllCount:DWORD; // 总盘口行情数 4字节 m_nCount:DWORD; // 当前块笔数 V3.62 版本从双字节扩充到 4字节 m_nCount<=m_nAllCount 一个品种的分笔可能通过多个包传送 如果分笔数据量很大的话 需要应用层自己合并 R0:word; // 保留字段 V3.62 版本 2字节 数据头部一共 36 字节 后面数据体长度为 116*m_nCount m_Data:array[0..0] of RCV_PANKOU_STRUCTEx; // V3.62 版本每笔扩充8字节 该缓冲区的长度为 m_nCount*sizeof(RCV_PANKOU_STRUCTEx)=m_nCount*116 该缓冲区的每笔定义见上述 RCV_PANKOU_STRUCTEx end; 通视分析家规范开发指南与常见问题: 1、驱动程序以DLL方式提供,存放位置在注册表的 HKEY_LOCAL_MACHINE/SOFTWARE/StockDrv 下 Driver = "驱动DLL全路径" 只要修改这个键值,就可以让分析家调用不同的驱动程序。如果DLL不带路径,则Windows首先在分析软件当前目录查找, 如果没有,再去 C:\Windows\System32\ 目录查找。如果两个路径都有DLL,当前目录优先。这是实现分析家与驱动挂接的关键所在。 2、DLL 至少输出2个函数:Stock_Init Stock_Quit ,用户只需简单调用上述 DLL 的Stock_Init,就可获得股票行情数据, 行情数据是不请自来的,其他补充类的数据在数据补充时会得到。Stock_Init 传入3个参数,消息处理窗体句柄、消息号、工作模式。 目前工作模式恒为1,消息处理窗体句柄和消息号向驱动(网际风)注册使用,在数据到达时,驱动会向上述句柄发送上述消息号 (类似注册回调函数),只不过以消息方式传递,在消息参数中,携带有数据类型和数据地址,你自己的消息处理函数就可根据 数据类型将指定地址的数据取出来用了,详见分析家规范的消息处理范例代码。 3、通视协议的行情字段定义大小为158(主要是股票代码按照10字节而非12字节定义导致的),编译器默认优化按字(4字节)对齐,如果不加修饰符,编译器默认定义为160字节, 将产生数据错位,必须将编译器的数据类型修改为按字节定义即可,具体看不同开发工具的帮助文档,也可以打印自己变量的sizeof来核对一下。使用VC2010版本,默认时间字段将变为8字节,导致记录大小错误,请将时间字段修改为4字节时间类型(__time32_t)即可(Stockdrv.h第75行)。 4、对于补充到的日线、分时数据、5分钟数据,第一祯为标识帧(或称数据头),后面跟数据帧,直到下一个标识帧或包尾, 标识帧的时间字段为全FF,里面含市场和代码信息,用于指示后续数据帧是哪个市场哪个代码品种的。 如果将标识帧按照数据帧解释会得出错误的结果(时间为-1、数据为乱码)。标识帧的定义见 RCV_EKE_HEADEx 。 标识帧与数据帧大小总是一致。即标识帧总是占用一个数据帧的位置,数据帧为16字节,则头部的标识帧也是16字节,数据帧是32字节,头部标识帧也是32字节。 5、对于期货类行情,在昨收字段存储的是昨结算价格,而不是昨天的最后一笔成交价格,在成交额字段,存储的是持仓量,而不是成交额,所以会忽大忽小变化,说明持仓的变化。 6、需要网际风格式的分笔数据或扩充数据,必须调用GetStockDrvInfo加扩充参数向网际风驱动注册方可得到,如果不调用默认只有通视规范的框架数据。 7、卸载驱动调用Stock_Quit。 财务数据.FIN 格式: 由8个字节文件头和数据记录体组成,8个字节的前4个字节为 0C D9 3F 22 为文件标识,常量,后四个字节 A6 00 00 00 表示后面记录体大小为 0xA6 字节 记录体格式,共0xA6字节,请检查自定义记录大小是否一致: m_wMarket:WORD; // 股票市场类型 N1:WORD; // 保留字段 m_szLabel:StockNumType; // 股票代码,以'\0'结尾,如 "600050" 10个字节 同通视规范定义 BGRQ:longint; // 财务数据的日期 如半年报 季报等 如 20090630 表示 2009年半年报 ZGB:single; // 总股本 GJG:single; // 国家股 FQFRG:single; // 发起人法人股 FRG:single; // 法人股 BGS:single; // B股 HGS:single; // H股 MQLT:single; // 目前流通 ZGG:single; // 职工股 A2ZPG:single; // A2转配股 ZZC:single; // 总资产(千元) LDZC:single; // 流动资产 GDZC:single; // 固定资产 WXZC:single; // 无形资产 CQTZ:single; // 长期投资 LDFZ:single; // 流动负债 CQFZ:single; // 长期负债 ZBGJJ:single; // 资本公积金 MGGJJ:single; // 每股公积金 GDQY:single; // 股东权益 ZYSR:single; // 主营收入 ZYLR:single; // 主营利润 QTLR:single; // 其他利润 YYLR:single; // 营业利润 TZSY:single; // 投资收益 BTSR:single; // 补贴收入 YYWSZ:single; // 营业外收支 SNSYTZ:single; // 上年损益调整 LRZE:single; // 利润总额 SHLR:single; // 税后利润 JLR:single; // 净利润 WFPLR:single; // 未分配利润 MGWFP:single; // 每股未分配 MGSY:single; // 每股收益 MGJZC:single; // 每股净资产 TZMGJZC:single; // 调整每股净资产 GDQYB:single; // 股东权益比 JZCSYL:single; // 净资收益率 除权数据.PWR 格式: 由8个字节文件头和数据记录体组成,记录体大小为 20 字节 每个品种的开头以RCV_EKE_HEADEx标识帧开头 标识帧占用的大小总是与数据帧大小一致(在这里也是20字节) EKE_HEAD_TAG = $ffffffff; // 文件类型数据分隔桢 RCV_EKE_HEADEx=Record m_dwHeadTag:DWORD; // EKE_HEAD_TAG 数据帧头部标识 时间字段全是FF m_wMarket:WORD; // 市场类型 2字节 m_szLabel:StockNumType; // 股票代码 10字节 end; RCV_POWER_STRUCTEx=record m_time:time_t; // UCT m_fGive:single; // 每股送 m_fPei:single; // 每股配 m_fPeiPrice:single; // 配股价,仅当 m_fPei!=0.0f 时有效 m_fProfit:single; // 每股红利 end;