搜索
查看: 34490|回复: 49

分析家数据读取、转换工具(含C#源码)

[复制链接]
发表于 2006-3-27 22:13 | 显示全部楼层

分析家数据读取、转换工具(含C#源码)

来自:MACD论坛(bbs.macd.cn) 作者:riskage 浏览:34490 回复:49

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
完整源码可以从这里下载:http://www.zhangwenzhang.com/bbs/dispbbs.asp?boardid=2&ID=97

分析家数据读取及转换工具使用说明


    V0.7新增功能:

    分析家数据读取及转换工具V0.7版增加了以下功能:(1) 可以象读取其它数据一样方便地读取复权行情和收盘收益率;(2)增加了一个命令行工具fxj2txt.exe,可以将分析家数据转换为文本,供个别不方便调用DLL组件的软件(如SAS等)调用;(3)提供了一个直接读取分析家数据的SAS程序(下载);(4)提供了一个利用FinData.dll创建Wealth-lab数据读取插件的实例程序(源代码及安装程序下载)。

    V0.6新增功能:

    分析家数据读取及转换工具V0.6版增加了以下功能:(1)可以读取用户板块和股票评级数据;(2)可以读取板块指数各类数据;(3)可以读取市场代码和名称、表名,生成创建对应SAS数据表的PROC SQL语句;(4)将分析家数据读取器整合到组件中,可以在语言中直接调用,同时增加了将读取出来的数据保存为文本文件的功能;(5)增加了一个分析家数据转换工具(也可以在程序中直接调用),该转换工具可以一次性将各类分析家数据直接转换为文本文件(字段间的分隔符可以自定义,可以生成容易被EXCEL等读取的格式);(6)修正了读取基金、权证报价时存在的一个BUG;基金、权证的报价保存三位小数位。

    简介:

    用户一般采取两种方法读取分析家软件的各类数据:一种是先使用数据转换工具将分析家数据转换为某种格式,然后在软件中读取转换后的数据,这种方法无需要编写数据读取程序,操作简单,但难以灵活控制数据读取;另一种办法是通过编程直接读取分析家数据,这种方式较为灵活,但要求深入了解分析家数据存储结构,且熟悉文件I/O操作编程知识。“分析家数据读取 及转换组件”不仅提供了数据转换工具——“分析家数据转换器”,还提供了介于上述两种方法之间的另一选择——“分析家数据读取及转换组件”。分析家数据读取及转换组件是一个DLL,它可以通过方便地在各种语言中直接调用而读取分析家数据,用户不需要了解分析家数据存储结构,不需要自己编写数据读取程序,只需要少量编程知识就可以获得所需数据并进行加工处理 ;它还可以在各种语言中直接调用分析家数据转换工具将各类数据转换为文本文件。分析家数据读取组件采用C#开发,安装程序时会自动注册成为COM组件,可以在支持COM和.NET的语言中(如VB、Office VBA、VBS、Delphi、C#、VB.NET、C++.NET、J#、SAS、Matlab等)直接调用。该组件工具是免费的。
    主要功能:

    1、既可以读取分析家一般数据,如证券代码表、日线数据、复权行情数据及收益率、当日分笔数据、历史分笔数据、当前最新行情、5分钟线行情、除权数据、财务数据 、板块数据等,也可以读取专业数据,如资产负债表数据、损益表数据、现金流量表数据、财务分析指标、股本结构、分红送配、十大股东、基金周报、基金投资组合 、股票评级等数据;

    2、可读取沪、深、港等各个市场的已安装数据;读取时无须关闭正在运行的分析家软件;

    3、可以从注册表中读取出市场代码及名称,也可以以表格形式列出数据表名及对应文件名、字段信息(如字段名和字段说明),以便于程序自动处理 ;可以生成创建SAS表的语句;

    4、提供了分析家数据读取器和数据转换器,可以直接在程序中调用读取器和转换器;

    5、提供了一个用于演示和测试调用结果的工具;同时提供VBA、VBS、SAS等语言调用实例(SAS调用实例见http://www.zhangwenzhang.com)。

    版本说明:
    目前组件最新版本为0.6版,主要支持分析家6.0。如果分析家版本为6.0以下,则部分功能无法使用。

    下载安装方法:
    (如果已安装了旧版本请先用提供的Uninstall工具删除!)
    首先,访问http://www.zhangwenzhang.com等网站下载安装文件FinDataToolsV0.7.rar(点击这里下载)。 解压后,双击安装文件开始安装,安装程序会自动检测系统是否已安装了.NET框架2.0中文版(.NET Framework 2.0),如果未安装则安装程序会提示安装(安装程序会.NET Framework 2.0下载页面;或者从这里直接下载:http://www.microsoft.com/Downloa ... p;displaylang=zh-cn);最后,根据提示完成安装(一直点击“下一步”即可)。安装成功后,将在指定目录(默认为C:\FinData)生成:FinData.dll(组件)、FinData.tlb(COM类型库)、FinDataTools.exe( 分析家数据读取及转换工具) 、Fxj2Txt.exe(分析家数据转换命令行工具)、FinDataTools.xls(EXCEL调用例子)、FinDataTools.vbs(VBScript调用例子)等,同时将在“程序”菜单中创建一个名为“FinData”的菜单,包括“FinDataTools数据工具”、“卸载”等快捷方式。
    使用方法:
    调用方法与其它COM/.NET组件一样。

    例如,安装后要测试一下是否注册成功为COM组件,可以创建一个VBS文件(扩展名为.VBS),键入以下两行:
        set fxj = createobject("findata.fxjdata")
        fxj.ShowFxjReader()

    执行时如果正确显示分析家数据读取器窗口,说明注册成功。把上面第二行换为fxj.ShowFxjConverter()则可以打开分析家数据转换器,等等。

    再举一个在EXCEL VBA中的调用例子:打开EXCEL Visual Basic编辑器,双击打开“工程”中的“ThisWorkBook”,点击“工具”、“引用”,在“可使用的引用”列表中找到并选择“FinData金融数据 工具”后确定。在ThisWorkBook代码区输入如下代码:
Sub ReadFxjData()
    '调用组件,读取数据保存在变量X中
    Dim x As Variant
    Dim fxj As New FinData.FxjData
    x = fxj.GetData("hq", "SZ000001") ‘读取数据保存在X中
    '以下语句将数据保存在工作表中
    For i = 0 To UBound(x, 1)
    For j = 0 To UBound(x, 2)
        ThisWorkbook.Worksheets(1).Cells(i + 1, j + 1) = x(i, j)
    Next
    Next
End Sub
按F5运行。其中关键语句是x = fxj.GetData("hq", "SZ000001"),只要改变方法GetData中的参数就可以读取到不同的数据,返回的X是一个二维 字符串数组。
    在.NET语言中调用方法也很简单,主要语句如下:
    FinData.FxjData fxj = new FinData.FxjData();
    string[,] s = fxj. GetData("hq", "SZ000001");

 

    上面只是一些例子,具体功能的使用见以下说明。
    组件方法和属性说明:    (1)方法GetData
语法:public string[,] GetData(string dataType, string code) 或 public string[,] GetData(string dataType, string code, string newFileName)
功能:读取各类数据
参数说明:
•dataType为数据类型,目录允许的值如下:
“dm”——代码表,对应分析家文件stkinfo51.dat
“hq”——日行情,对应分析家文件day.dat
“hqmb”——每笔成交,对应分析家文件report.dat或*.prp
“hq0”——最新行情,对应分析家文件stkinfo51.dat
“hq5”——五分钟线,对应分析家文件min.dat
“fp”——分红送配,对应分析家文件exprof.fdt
“gb”——股本结构,对应分析家文件capital.dat
“gd”——十大股东,对应分析家文件stkhold.dat
“cq”——除权数据,对应分析家文件stkinfo51.dat
“cw”——专业财务数据,对应分析家文件finance.fdt
“cw0”——最新财务数据,对应分析家文件stkinfo51.dat
“jjjz”——基金周报,对应分析家文件fundweek.fdt(V0.5中该代码为jjzb,现改为jjjz,“基金净值”拼音首字母)
“jjzh”——基金投资组合;对应分析家文件funddiv.fdt

“bk”——板块;对应分析家文件*.blk

“pj”——评级;对应分析家文件:评级.str

“hqfq”——复权行情。复权计算方法与一般行情软件有所不同:只对日线数据中的开盘价、最高价、最低价、收盘价进行复权处理,成交量未作复权处理;先根据价格和除权数据计算出每日总收益率,然后用“向前复权”方法计算出复权价格(优点是:假设了分红再投资,任何两点间的收益率不受分红送配时间的影响,便于分析比较);提供根据收盘价计算的收益率。

 

 

•code为证券代码 ,格式如“SH000001”、“SZ000001”、“HK0001”等,其中板块指数的代码如“$$AA01”、“$$AA02”等;当dataType为“dm”时,为市场代码“SH”或“SZ”等,板块指数的市场代码为“$$”。
                 如:GetData("hq","SZ399001") 读取SZ399001(深成指)的所有行情数据;GetData("hq","$$AA01")读取板块指数$$AA01行情。
                     GetData(“dm”,”SH”) 读取沪市证券代码表

•newFileName为不含路径的文件名,例如:读取沪市代码表时默认从分析家目录安装目录下的DATA\SH\StkInfo51.Dat文件中读取,但可以指定从其它文件读取,如GetData(“dm”,”SH”,”stkinfo88888.dat”)将从stkinfo8888.dat文件读取代码表(当然前提是该文件结构与stkinfo51.dat相同)。该功能主要用于读取历史分笔数据,如GetData(“hqmb”,”SZ000001”,”20060322.PRP”)将读取深发展2006年3月22日的分笔成交数据。


返回值:返回一个二维字符串数组,每一列为一字段,每一行为一数据记录。注意,这里返回的是一个字符串数组,一般需要根据需要类型转换。


    (2)方法GetFields
语法:public string[,] GetFields(string dataType)
功 能:读取各种数据类型的字段名、字段含义、类型。
参数说明:dataType为指定数据类型同GetData。

返回值:一个二维数组

    (3)方法GetTables
调用格式:public string[,] GetTables()

功 能:读取各表的表名、中文说明、 对应文件。

返回值:一个二维数组
    (4)方法GetMarkets
语法:public string[,] GetMarkets()
功 能:从注册表中读取市场列表:代码、简称、名称,如:SH、沪、上海证券交易所;SZ、深、深圳证券交易所。

返回值:一个二维数组
    (5)方法GetTableDef
语法:public string GetTableDef(string dataType, string descDataType, bool delOldTable)
功 能:生成创建SAS表的PROC SQL语句。

参数:dataType为“dm”等数据表名,descDataType目前只能为“SAS”,delOldTable是否同时生成删除同名数据表的语句。

返回值:一个字符串
    (6)方法GetCodeType
语法:public string GetCodeType(string code)
功 能:根据证券代码获取证券品种,如:GetCodeType("SZ000001")将返回"gp"表示这是股票代码;GetCodeType("SH000001")将返回"zs”(指数);GetCodeType("SZ184688")将返回"jj"(基金),等。

参数:code为证券代码。

返回值:一个字符串:gp(股票)、zq(债券)、jj(基金)、qz(权证)、zs(指数)。

   (7)方法ShowAboutBox
语法:public void ShowAboutBox()
功 能:显示组件的“关于”窗口。

   (8)方法ShowFxjConverter
语法:public void ShowFxjConverter()
功 能: 显示“分析家数据转换器”窗口。可以读取各类数据,不过一般每次只能读取一只证券的数据;可以读取各字段信息;可以将读取出来的数据保存为文本文件。

   (9)方法ShowFxjReader
语法:public void ShowFxjReader()
功 能:显示“分析家数据读取器”窗口。可以将各类数据转换为文本文件,字段间的分隔符可以自定义;

    (10)属性FxjDataPath
功能:字符串型,可读写,返回分析家数据目录(一般为c:\fxj\data\),如果组件无法自动获取正确的分析家数据目录,可以设置该属性指定分析家数据目录。

    (11)属性FxjPath
功能:字符串型,返回分析家安装目录(一般为c:\fxj\)。
    (12)属性Error
功能:整型,只读,返回上一步操作是否出现错误。若该属性为0,表示没有错误发生,若为1则表示发生了错误,具体错误信息可以通过MSG属性获得。
    (13)属性Msg
功能:字符串型,只读,返回上一步操作的错误信息。
    (14)属性Version
功能:实型,返回组件当前版本号。

Fxj2Txt.exe使用说明:

    功能:生成以逗号为分隔符的文本。

    调用格式: fxj2txt.exe methodname  args ...    methodname可以是getdata、getfields、gettabledef、gettables、getmarkets、getcodetype,args为相应参数。如在DOS窗口下健入fxj2txt.exe getdata hq sz000001 将生成SZ000001(深发展)的行情数据等。可以用重定向符将生成的数据保存在一文本文件中:fxj2txt.exe getdata hq sz000001 > hqsz000001.txt。

    SAS通过fxj2txt.exe读取分析家数据的例子见http://www.zhangwenzhang.com/bbs ... =69&replyID=172







 



 

[ 本帖最后由 riskage 于 2006-6-19 22:47 编辑 ]
金币:
奖励:
热心:
注册时间:
2001-12-1

回复 使用道具 举报

发表于 2006-3-27 22:32 | 显示全部楼层
谢谢,但是有点复杂!
金币:
奖励:
热心:
注册时间:
2002-5-28

回复 使用道具 举报

 楼主| 发表于 2006-3-27 22:43 | 显示全部楼层
谢谢!
本组件目前相当于是一个测试版本,欢迎批评指正,希望推出1.0版时功能较为完善。该组件不是数据转换工具的代替品,只适合具有一定编程知识的朋友,不适合最终用户。
金币:
奖励:
热心:
注册时间:
2001-12-1

回复 使用道具 举报

发表于 2006-3-27 23:27 | 显示全部楼层
功能很诱人啊。
谢谢。
金币:
奖励:
热心:
注册时间:
2004-3-10

回复 使用道具 举报

发表于 2006-3-28 01:35 | 显示全部楼层
谢谢!
金币:
奖励:
热心:
注册时间:
2001-7-5

回复 使用道具 举报

签到天数: 2034 天

发表于 2006-3-28 05:50 | 显示全部楼层
谢谢!!!!!!!!!!!!!!
金币:
奖励:
热心:
注册时间:
2005-5-21

回复 使用道具 举报

发表于 2006-3-28 19:10 | 显示全部楼层

3q

金币:
奖励:
热心:
注册时间:
2005-6-16

回复 使用道具 举报

发表于 2006-3-28 20:32 | 显示全部楼层
好,非常好,海洋论坛的很多朋友都在关注你的东东!
金币:
奖励:
热心:
注册时间:
2002-5-14

回复 使用道具 举报

发表于 2006-3-29 17:05 | 显示全部楼层
LZ好像以前就写过一个将动态数据导入EXCEL的东东,看样子是科班出身吧!
金币:
奖励:
热心:
注册时间:
2003-7-2

回复 使用道具 举报

发表于 2006-3-29 21:51 | 显示全部楼层
非常感谢提供!!!!!
金币:
奖励:
热心:
注册时间:
2004-4-17

回复 使用道具 举报

发表于 2006-3-30 17:58 | 显示全部楼层
感谢提供
金币:
奖励:
热心:
注册时间:
2004-1-30

回复 使用道具 举报

发表于 2006-3-31 11:16 | 显示全部楼层
riskage 、zwz:
以后安装软件最好还是搞成EXE吧,现在的MSI需要下载。NET2。X和WINDOWS INSTALLER 3。X,需要几十M多,而且WINDOWS INSTALLER 3。X下载需要正版认证,麻烦啊
金币:
奖励:
热心:
注册时间:
2003-6-12

回复 使用道具 举报

 楼主| 发表于 2006-3-31 14:16 | 显示全部楼层
wj2000:组件是用C# 2.0开发的(因为小弟不是学电脑出身的,就会玩一点点VB、C#),因此安装.NET 2.0是必要的。至于WINDOWS INSTALLER,如果操作系统是XP应该就不需要再安装了,如果需要下载,可以考虑到其它网站下载,不一定到MS网站下载。我也会再想办法改善安装,希望大家多提意见建议。
金币:
奖励:
热心:
注册时间:
2001-12-1

回复 使用道具 举报

签到天数: 4 天

发表于 2006-3-31 21:41 | 显示全部楼层
感谢提供
金币:
奖励:
热心:
注册时间:
2002-2-3

回复 使用道具 举报

发表于 2006-4-1 01:37 | 显示全部楼层
学习,感谢!
金币:
奖励:
热心:
注册时间:
2005-11-5

回复 使用道具 举报

发表于 2006-4-3 10:39 | 显示全部楼层
原帖由 riskage 于 2006-3-31 14:16 发表
wj2000:组件是用C# 2.0开发的(因为小弟不是学电脑出身的,就会玩一点点VB、C#),因此安装.NET 2.0是必要的。至于WINDOWS INSTALLER,如果操作系统是XP应该就不需要再安装了,如果需要下载,可以考虑到其它网站 ...

安装.NET 2.0需要WINDOWS INSTALLER3。0以上,可能我的HP机器的XP是D版的,下载安装WINDOWS INSTALLER 3。X都提示语言版本不同,看来是没希望了,等另一台机器回来再试了。
有没有可能不作成安装文件?直接作为可执行文件(绿色软件)?
金币:
奖励:
热心:
注册时间:
2003-6-12

回复 使用道具 举报

发表于 2006-4-3 12:20 | 显示全部楼层
谁安装成功了将安装好的文件夹压缩成文件传上来。
谢谢
金币:
奖励:
热心:
注册时间:
2003-6-12

回复 使用道具 举报

 楼主| 发表于 2006-4-4 08:58 | 显示全部楼层
wj2000:已把主要文件上传,可以只下载FinData.dll和FinData.tlb这两个文件而不需要安装。如果用在.net环境,直接引用即可,如果用于com环境,还需要用.net的regasm.exe注册一下。当然,不管在什么环境下使用,都需要安装.net framework 2.0.
金币:
奖励:
热心:
注册时间:
2001-12-1

回复 使用道具 举报

 楼主| 发表于 2006-4-4 09:01 | 显示全部楼层
发现一个BUG:读取基金、权证的分笔成交数据时,申报价出现错误,原因是基金、权证的数据存储规则与股票等略有不同,下次版本更新时解决。
金币:
奖励:
热心:
注册时间:
2001-12-1

回复 使用道具 举报

发表于 2006-4-5 09:29 | 显示全部楼层
原帖由 riskage 于 2006-4-4 08:58 发表
wj2000:已把主要文件上传,可以只下载FinData.dll和FinData.tlb这两个文件而不需要安装。如果用在.net环境,直接引用即可,如果用于com环境,还需要用.net的regasm.exe注册一下。当然,不管在什么环境下使用,都需 ...


谢谢,能不能将FinData.FxjReader.exe和Mommon.data.dll(随带的小工具)也传一下?:P
金币:
奖励:
热心:
注册时间:
2003-6-12

回复 使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站声明:1、本站所有广告均与MACD无关;2、MACD仅提供交流平台,网友发布信息非MACD观点与意思表达,因网友发布的信息造成任何后果,均与MACD无关。
MACD俱乐部(1997-2019)官方域名:macd.cn   MACD网校(2006-2019)官方域名:macdwx.com
值班热线[9:00—17:30]:18292674919   24小时网站应急电话:18292674919
找回密码、投诉QQ:89918815 友情链接QQ:95008905 广告商务联系QQ:17017506 电话:18292674919
增值电信业务经营许可证: 陕ICP19026207号—2  陕ICP备20004035号

举报|意见反馈|Archiver|手机版|小黑屋|MACD俱乐部 ( 陕ICP备20004035号 )

GMT+8, 2024-4-25 22:24 , Processed in 0.081745 second(s), 8 queries , Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表