public RollResultContractItem Concat(RollResultContractItem other) { return new RollResultContractItem { MMS = MMS.Concat(other.MMS), TrueSpread = TrueSpread.Concat(other.TrueSpread), spread = spread.Concat(other.spread), Yield = Yield.Concat(other.Yield), Price = Price.Concat(other.Price), }; }
private static DatedDataCollectionGen<RollResultItem> ComputeSmoothRollResultWrapper(RollResultContractItem resultseries1, RollResultContractItem resultseries2, Func<RollResultContractItem, DatedDataCollectionGen<RollResultItem>> GetComputedRollResult, bool smoothStart, string moniker, Func<RollResults, RollResultContractItem> generationResult1, Func<RollResults, RollResultContractItem> generationResult2) { var priceResult1 = resultseries1.ResultDates.Select(d => new Tuple<DateTime, RollResultItem>(d, GetComputedRollResult(resultseries1).ValueOnDate(d))).ToArray(); var priceResult2 = resultseries2.ResultDates.Select(d => new Tuple<DateTime, RollResultItem>(d, GetComputedRollResult(resultseries2).ValueOnDate(d))).ToArray(); if (!priceResult1.Any() || (!smoothStart && !priceResult2.Any())) return null; double smoothpoint = 0.0; var priceResultAdjTup = IntersectDates(priceResult1, priceResult2); var priceResult1List = priceResultAdjTup.Item1.ToList(); var priceResult2List = priceResultAdjTup.Item2.ToList(); // get last point smooth result from carbon if (smoothStart) { var savedFrame = CarbonModel.RetrieveFrameFromCarbon(moniker).Result; var savedResults = savedFrame.ToRollResult(moniker); var lastSavedDate = savedResults.CurrentResult.ResultDates.Last(); var fetchedDate = resultseries1.ResultDates.First() > lastSavedDate ? lastSavedDate : FindPreviousDayFromSaveData(savedResults.CurrentResult.ResultDates, resultseries1.ResultDates.First()); smoothpoint = GetComputedRollResult(savedResults.SmoothResult).ValueOnDate(fetchedDate).Value; priceResult1List.Insert(0, new Tuple<DateTime, RollResultItem>(fetchedDate, GetComputedRollResult(generationResult1(savedResults)).ValueOnDate(fetchedDate))); priceResult2List.Insert(0, new Tuple<DateTime, RollResultItem>(fetchedDate, GetComputedRollResult(generationResult2(savedResults)).ValueOnDate(fetchedDate))); } var smooth = SmoothCalculator.ComputeSmoothSeries(priceResult1List.ToArray(), p1 => p1.Name, p1 => p1.Value, priceResult2List.ToArray(), p2 => p2.Name, p2 => p2.Value, smoothStart, smoothpoint); var resultArray = smooth.Dates.Select(d => new RollResultItem { Name = "smooth", Value = smooth.ValueOnDate(d) }).ToArray(); return new DatedDataCollectionGen<RollResultItem>(smooth.Dates, resultArray); }
public static RollResultContractItem SmoothAllResultSeries(RollResultContractItem resultseries1, RollResultContractItem resultseries2, bool smoothStart, string moniker, Func<RollResults, RollResultContractItem> generationResult1, Func<RollResults, RollResultContractItem> generationResult2) { var price = ComputeSmoothRollResultWrapper(resultseries1, resultseries2, r => r.Price, smoothStart, moniker, generationResult1, generationResult2); var yield = ComputeSmoothRollResultWrapper(resultseries1, resultseries2, r => r.Yield, smoothStart, moniker, generationResult1, generationResult2); var mms = ComputeSmoothRollResultWrapper(resultseries1, resultseries2, r => r.MMS, smoothStart, moniker, generationResult1, generationResult2); var ts = ComputeSmoothRollResultWrapper(resultseries1, resultseries2, r => r.TrueSpread, smoothStart, moniker, generationResult1, generationResult2); var s = ComputeSmoothRollResultWrapper(resultseries1, resultseries2, r => r.spread, smoothStart, moniker, generationResult1, generationResult2); return new RollResultContractItem { Price = price, Yield = yield, MMS = mms, TrueSpread = ts, spread = s, }; }