最近股市過山車,我不會股票,也沒那麼多時間玩,於是我玩起了股基。在玩的過程中我發現這玩意挺好玩的呀,只是我在網頁來回切換,不停按F5的過程中煩了,於是就自己寫了一個股基小助手,在這裡拿出來和大家一起分享。
我發現呢,今日估值,預估升率,最新淨值,最新升率,昨日升率和最新淨賺是我比較想要知道的。看了和訊網和百度理財,看了他們傳的數據,覺得和訊網的比較全面和准確,於是采用抓取和訊網的數據。先來個效果圖:
接下來說說我是怎麼做的吧,首先,確定請求的地址是:http://quote.funds.hexun.com/list/outxml/quote/IOpenFundData.aspx?fundcode=XXX,查看得到的數據:
可以看到得到的有四個數據,包括最新淨值,最新升率,昨日淨值,更新時間。但當時間到了股市開市時間時,得到的數據是不一樣的,“最新淨值”變成“今日估值”,“最新升率”變成“預估升率”。於是我把一些信息放到配置文件:
其中自動刷新時間用於每隔一段時間自動刷新數據,Funds配置存放想要監控的股基,組成形式是“基金編號,基金名稱,購買金額,持有份額,起始日期。沒買的賦值前兩個字段,有買的賦值所有字段”,沒買的賦值前兩個字段,有買的賦值所有字段。然後建一個股基類:
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,最新淨賺是用最新淨值乘以持有份額再減去總額,持有份額就是持有的股基數量,總額就是購買的金錢總額,這樣得到的最新淨賺其實是沒減去手續費,管理費和贖回費的,需要減的大家自己下載一下代碼,自己改去吧。