WLD Data Adapter from 通视 by fisher V0.1

Discussion in 'Wealth-Lab Developer' started by fisher, Oct 11, 2005.

  1. 恭喜,又是一个成功的例子。
    1、分析家读自己的日线文件可能锁定了读写共享权限,因此如使用WLD读其日线文件应先启动WLD,后启动分析家。另请fisher在编码上是否可以考虑把filestream的FileShare.Read参数更改为FileShare.ReadWrite,因为分析家做收盘时会写入day.dat文件;
    2、对于数据复权可以提取有关除权记录,在bars.add语句中调整计算开高低收量的复权数。
    分析家除权财务数据存储格式如下:
    上海除权财务数据存储文件为:\superstk\data\sh\Stkinfo.dat
    深圳除权财务数据存储文件为:\superstk\data\sz\Stkinfo.dat
    以深圳除权财务数据存储文件Stkinfo.dat为例:
    起止地址 数据内容 数据含义 数据类型
    0000 - 0003 CD AB 55 34 文件标志 Integer
    0004 - 0007 10 02 00 00 保 留 Integer
    0008 - 000B E9 02 00 00 证券总数 Integer
    ......
    1838 - 1839 0A 00 除权记录数 Word
    183A - 183B 01 00 未 知 Word
    183C - 183F 80 F4 05 3A 除权日期 Integer
    1840 - 1843 00 00 00 00 送股数 Single
    1844 - 1847 9A 99 99 3E 配股数 Single
    1848 - 184B 00 00 00 41 配股价 Single
    184C - 184F 00 00 00 00 分红利 Single
    ......
    197C - 197F 80 72 5B 39 更新日期 Integer
    1980 - 1983 8D 05 3E 48 总股本 Single
    1984 - 1987 00 EC 43 46 国家股 Single
    1988 - 198B 00 00 00 00 发起法人股 Single
    198C - 198F BD EA 26 47 法人股 Single
    1990 - 1993 00 00 00 00 B股 Single
    1994 - 1997 00 00 00 00 H股 Single
    1998 - 199B 1F 0C 08 48 流通A股 Single
    19AC - 19AF 00 00 00 00 职工股 Single
    19A0 - 19A3 00 00 00 00 A2转配股 Single
    19A4 - 19A7 BC B6 3D 4C 总资产 Single
    19A8 - 19AB C3 7C EB 4B 流动资产 Single
    19AC - 19AF 80 A3 F6 49 固定资产 Single
    19B0 - 19B3 DD 6F 96 48 无形资产 Single
    19B4 - 19B7 7D 59 7C 4B 长期投资 Single
    19B8 - 19BB 22 E4 03 4C 流动负债 Single
    19BC - 19BF F7 50 38 4B 长期负债 Single
    19C0 - 19C3 FA 40 8E 48 资本公积金 Single
    19C4 - 19C7 12 83 40 3E 每股公积金 Single
    19C8 - 19CB C2 E5 3B 4A 股东权益 Single
    19CC - 19CF 25 AC 68 49 主营收入 Single
    19D0 - 19D3 00 62 43 47 主营利润 Single
    19D4 - 19D7 67 66 FA 42 其它利润 Single
    19D8 - 19DB 00 00 00 00 营业利润 Single
    19DC - 19DF 00 00 00 00 投资收益 Single
    19E0 - 19E3 00 00 00 00 补贴收入 Single
    19E4 - 19E7 00 00 00 00 营业外收支 Single
    19E8 - 19EB 00 00 00 00 上年损益调整 Single
    19EC - 19EF 33 C1 43 48 利润总额 Single
    19F0 - 19F3 00 00 00 00 税后利润 Single
    19F4 - 19F7 33 C8 2D 48 净利润 Single
    19F8 - 19FB D0 8D A6 48 未分配利润 Single
    19FC - 19FF AE 47 61 3E 每股未分配 Single
    1A00 - 1A03 1F 85 EB 3D 每股收益 Single
    1A04 - 1A07 B6 F3 FD 3F 每股净资产 Single
    1A08 - 1A0B 71 3D 3F 7B 调整每股净资产 Single
    1A0C - 1A0F 7C 14 E6 40 股东权益比 Single
    1A10 - 1A13 C3 F5 B8 40 净资收益率 Single
    ......
    1DD968 - 1DD971 32 41 30 31 00 00 ... 证券代码 Char[10]
    1DD972 - 1DD991 C9 EE D6 A4 D6 B8 ... 证券名称 Char[32]
    1DD992 - 1DD9A3 53 5A 5A 53 00 00 ... 拼音代码 Char[18]
    1DD9A4 - 1DD9A7 77 D8 D5 3A 未 知 Integer
    1DD9A8 - 1DD9AB DA 6D 9E 4B 未 知 Integer
    1DD9AC - 1DD9AF 71 A3 9B 45 昨收盘 Single
    1DD9B0 - 1DD9B3 86 F3 9B 45 开盘价 Single
    1DD9B4 - 1DD9B7 A4 0C 9D 45 最高价 Single
    1DD9B8 - 1DD9BB 90 76 9B 45 最低价 Single
    1DD9BC - 1DD9BF 86 1F 9C 45 收盘价 Single
    1DD9C0 - 1DD9C3 3C A3 59 4B 成交量 Single
    1DD9C4 - 1DD9C7 1B 10 3B 50 成交金额 Single
    1DD9C8 - 1DDA17 00 00 00 00 未 知 Single[20]
    附注:
    1) 起止地址、数据内容为十六进制,数据类型为 Delphi 下之定义。
    2) 从000Ch开始至40017h每476bytes为一个除权、财务数据分配块;其中,从每个记录块的第5Byte开始至第320Byte每20Bytes为一条(共16条记录)除权记录,具体含义如上表1838h - 1A13h所示;
    3) 从1DD968h开始每176bytes为一条股票行情数据记录(含义如上表1DD968h - 1DDA17h所示);
    4) 日期字段意义均为:实际日期 = StrToDate('1970-01-01')+(日期字段 div 86400);即“日期字段”除以86400所得数为实际日期距1970年01月01日的天数。
    3、通视动态数据的提取可参考我贴出的实时数据服务器代码。其主要原理是给stock.dll一个窗口句柄(启动参数),实时数据将以窗口消息的方式向该窗口发送。
     
  2. 感谢tom_sh

    谢谢tom_sh的指导,能否详细解释一下复权是怎样实现,是否"stkinfo.data"有一字段是复权的数值,然后用它来乘日线的数据?
     
  3. 使用时可能出现的问题

    1、安装参照附件的readme;
    2、运行wealth-lab 不能同时运行分析家(这个下次改);
    3、如出现证券名称乱码,请到控制面板改地区属性为中国;
    4、软件是直接读注册表的分析家所在路径,如果用分析家2005的需在注册表增加如下内容:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Huitianqi\SUPERSTK]
    "InstPath"="分析家所在路径"
    如:"InstPath"="D:\\stock\\fxj"
    5、分析家4.X的不能正常运行;
     
  4. 复权的有关计算原理大致如下(欢迎其他朋友一并探讨):

    1、派息:除息日之前的交易价格数据(开高低收)均减去每股利息(含税);
    2、送股(包括送红股和股本转增):除权日之前的交易价格数据均除以(1+送股比例),例如10送3则价格除以1.3,交易量数据则乘以(1+送股比例);
    3、配股:除权日之前的交易价格数据均除以调整因子,调整因子计算公式为除权前日(即登记日)收盘价/((除权前日收盘价+配股比例X配股价)/(1+配股比例)),交易量数据不做调整;

    此外,增发不做除权处理。配股复权还有更精确的计算方法(按配股后总股本/配股前总股本-1计算配股比例,而不用名义配股比例,因为法人股配股的情况各不相同)。实践中也许不必要如此精确,因为市场由于早期的股权分置是不承认法人股配股价值的(高于每股净资产的配股价也会提升流通股的含金量)。

    另外注意多次复权的问题以及送配派同日的问题。
     
  5. 选用数据源时,第一次选择出现:
    system error code:203
    操作系统找不到已输入的环境选项
    第二次选择出现:
    a call to an OS function failed
     
  6. 在stkinfo.dat 中除权数据的索引在哪里?

    除权和财务数据没有股票代码字段,请问如何才能定位除权数据的位置?
     
  7. 如出现203错误,按下面方法做
    1.在开始-运行 输入CMD;
    2.出现了命令提示符窗口后;
    3.进入在WLD安装目录,
    4.键入C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\regasm /tlb /codebase WLDAdapter.dll,回车确认
    显示 "WLDAdapter.dll 注册成功"
     
  8. 上述问题已解决
    我用的分析家2005,路径为e:\fxj,注册表内也有此项,但wld内无数据
     
  9. 注册完文件后,运行WLD,选

    择菜单项datasource-datasource manager,可以看到STDEMO ADAPTER成为可选择的一项,点击该项,按NEXT,给新的DATASOURCE起个名字,如海洋论坛,确定 .

    如已运行上述步骤还有上面所述的问题,
    你看看e:\fxj\data\sz\stkinfo5.dat 和e:\fxj\data\sh\stkinfo5.dat
    有没有这两个文件,程序是从这两个文件读股票代码的.
     
  10. 1 e:\fxj\data\sz\stkinfo5.dat 和e:\fxj\data\sh\stkinfo5.dat 存在
    2 键入C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\regasm /tlb /codebase WLDAdapter.dll,回车确认
    显示 信息如附件,应该是"WLDAdapter.dll 注册成功"
     
  11. 图所示,注册已成功

    我刚装了fxj2005,它的注册信息是
    [HKEY_LOCAL_MACHINE\SOFTWARE\fxj\SUPERSTK]
    "VERSION"="5.02.00.1248"
    "InstPath"="e:\\tools\\fxj"
    "PRODUCT"="互联网版"
    "NetInstPath"="G:\\SSCLIENT"


    程序读的是以下
    [HKEY_LOCAL_MACHINE\SOFTWARE\Huitianqi\SuperStk]
    "VERSION"="5.00.00.0000"
    "InstPath"="e:\\tools\\fxj"
    "PRODUCT"="单用户机构版"

    所以你如果用的是fxj2005要加上
    [HKEY_LOCAL_MACHINE\SOFTWARE\Huitianqi\SuperStk]
    "InstPath"="e:\\tools\\fxj"
    "InstPath"="e:\\tools\\fxj" 改为fxj2005的路径;

    按上述方法我装了fxj2005正常显示.
     
  12. OK,问题已找到。注册表问题,我原来一直fxj目录下做文章,改huitianqi\superstk后成功

    你的工作非常有意义,感谢
    希望早日完善,尽快加上除权功能
     
  13. 答复FISHER
    我给你的是Stkinfo.dat文件格式,而分析家5用的是Stkinfo5.dat文件,我没有直接分析过,可能需要先做点功课,测试一下。另外,除权数据块虽然没有证券代码,但是日线数据块有,应该假设Stkinfo.dat文件内的三个数据块,即除权-基本面-日线,其股票列表顺序都是一致的。
     
  14. 谢谢tom_sh
     
  15. 数据读取正常,WLD接收国内数据的又迈出新的一步,解决除权是我们下一步的目标。感谢fisher!
     
  16. 软件已更新

    增加还权功能,附件在一楼
     
  17. 还权功能如何使用?
     
  18. 显示的价格已经是还权.

    新版已根据除权数据自动还权了,现在显示的价格是还权价.不过现在还只是支持5.0版,分析家2005版还不支持.
     
  19. 下载了你的发的几个不同的修改版本,在数据源中都显示,不好区分了哪一个是最新版本了!
    fisher难道你是专业程序员,来到海洋的时间不长,对大家的贡献很大,不知对WLD 的使用有何心得,有空在论坛上谈一谈。