最近股市过山车,我不会股票,也没那么多时间玩,于是我玩起了股基。在玩的过程中我发现这玩意挺好玩的呀,只是我在网页来回切换,不停按F5的过程中烦了,于是就自己写了一个股基小助手,在这里拿出来和大家一起分享。
我发现呢,今日估值,预估升率,最新净值,最新升率,昨日升率和最新净赚是我比较想要知道的。看了和讯网和百度理财,看了他们传的数据,觉得和讯网的比较全面和准确,于是采用抓取和讯网的数据。先来个效果图:
接下来说说我是怎么做的吧,首先,确定请求的地址是:http://quote.funds.hexun.com/list/outxml/quote/IOpenFundData.aspx?fundcode=XXX,查看得到的数据:
可以看到得到的有四个数据,包括最新净值,最新升率,昨日净值,更新时间。但当时间到了股市开市时间时,得到的数据是不一样的,“最新净值”变成“今日估值”,“最新升率”变成“预估升率”。于是我把一些信息放到配置文件:
其中自动刷新时间用于每隔一段时间自动刷新数据,Funds配置存放想要监控的股基,组成形式是“基金编号,基金名称,购买金额,持有份额,起始日期。没买的赋值前两个字段,有买的赋值所有字段”,没买的赋值前两个字段,有买的赋值所有字段。然后建一个股基类:
class="brush:csharp;gutter:true;"> public class Fund { public string 基金编号 { get; set; } public string 基金名 { get; set; } public double 今日估值 { get; set; } public double 预估升率 { get; set; } public double 最新净值 { get; set; } public double 最新升率 { get; set; } public double 昨日净值 { get; set; } public double 总额 { get; set; } public double 最新净赚 { get; set; } public DateTime 起始日期 { get; set; } public double 持有份额 { get; set; } public string 更新时间 { get; set; } }
然后在界面加个DataGridView和一个“刷新”按钮(用于手动刷新),代码的重点是刷新单个基金类的方法:
private void UpdateFund(Fund fund) { string data = _client.DownloadString(Resources.UrlHexunFund + fund.基金编号); string[] datas = data.Split(','); if (datas[0].Contains("最新净值")) { fund.最新净值 = Convert.ToDouble(datas[1]); fund.最新升率 = Convert.ToDouble(datas[2]); fund.昨日净值 = Convert.ToDouble(datas[4].Split(']')[0]); } else { fund.今日估值 = Convert.ToDouble(datas[1]); fund.预估升率 = Convert.ToDouble(datas[2]); fund.最新净值 = Convert.ToDouble(datas[4].Split(']')[0]); } var money = fund.最新净值 * fund.持有份额 - fund.总额; fund.最新净赚 = money; fund.更新时间 = datas[5].Split('\'')[1]; }
需要说明一下的是_client是一个WebClient,最新净赚是用最新净值乘以持有份额再减去总额,持有份额就是持有的股基数量,总额就是购买的金钱总额,这样得到的最新净赚其实是没减去手续费,管理费和赎回费的,需要减的大家自己下载一下代码,自己改去吧。