private void RollingReturnTest() { var ctx = new RepGenDataContext(); ReturnCalculation calc = new ReturnCalculation(); // calculate prices //ctx.ModelReturn("CO"); var data = ctx.ModelReturn("CO", "HNW"); var prices = from d in data select new ReturnData { Value = calc.Price(d), Date = d.Date }; var p1 = prices.ToList(); p1.Insert(0, new ReturnData() { Value = 100D }); var p2 = p1.Skip(12 * 3); var p3 = new List<ReturnData>(); int i = 0; foreach (var item in p2) { var rd = new ReturnData { Value = calc.RollingReturn(item, p1.ElementAt(i++)), Date = item.Date }; p3.Add(rd); } foreach (var item in p3) { Console.WriteLine("{0}\t{1}", item.Date, item.Value); } }
private List<ReturnData> calulateRollingReturn(List<ReturnData> data, int years) { ReturnCalculation calc = new ReturnCalculation(); var prices = from d in data select new ReturnData { Value = calc.Price(d), Date = d.Date }; // create the 'From' list, starting with index value of 100 var from = prices.ToList(); from.Insert(0, new ReturnData() { Value = 100D }); // create the 'To' list, starting with a years * 12 offset var to = from.Skip(12 * years); // new list for return values var rv = new List<ReturnData>(); int i = 0; foreach (var item in to) { var rd = new ReturnData { Value = calc.RollingReturn(item, from.ElementAt(i++), years), Date = item.Date }; rv.Add(rd); } return rv; }