static Dictionary <string, DividendData> GetDividendData(string path) { Dictionary <string, DividendData> dicDividendData = new Dictionary <string, DividendData>(); string[] lines = new string[] { }; using (StreamReader sr = new StreamReader(path, true)) { lines = sr.ReadToEnd().Split(new string[] { "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries); } for (int i = 1; i < lines.Length; i++) { string[] tokens = lines[i].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); string Year = tokens[0]; double CashDividend = DoubleParse(tokens[3]); double ShareDividend = DoubleParse(tokens[6]); dicDividendData[Year] = new DividendData(Year, CashDividend, ShareDividend); } return(dicDividendData); }
static void UpdateMonthData(List <MonthData> monthDatas, Dictionary <string, DividendData> dicDividend) { for (int i = 0; i < monthDatas.Count - 1; i++) { string monthCode = monthDatas[i].MonthCode; string month = monthCode.Substring(3); if (month != "08") // 假設9月第一個交易日將現金股息以當日開盤價買入 { monthDatas[i].ValueCostRatio = monthDatas[i + 1].StartPrice / monthDatas[i].StartPrice; } else { int year = int.Parse(monthCode.Substring(0, 2)); year += year < 50 ? 2000 : 1900; if (dicDividend.Keys.Contains(year.ToString())) { DividendData dividendData = dicDividend[year.ToString()]; double newShare = dividendData.ShareDividend / 10; //配股股數 double newCash = dividendData.CashDividend / monthDatas[i + 1].StartPrice; //配息買得股數 monthDatas[i].ValueCostRatio = (monthDatas[i + 1].StartPrice / monthDatas[i].StartPrice) * (1 + newShare + newCash); } } } }