コード例 #1
0
ファイル: RollResults.cs プロジェクト: heimanhon/researchwork
 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),
     };
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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,
            };
        }