///<summary> ///</summary> ///<param name="valuationDate"></param> ///<param name="floatMargin"></param> ///<param name="fixedRate"></param> ///<param name="payTerms"></param> ///<param name="payRolls"></param> ///<param name="receiveTerms"></param> ///<param name="receiveRolls"></param> ///<param name="originalReceiveCurve"></param> ///<param name="bulletPaymentDate"></param> ///<param name="bulletPaymentValue"></param> ///<param name="listInstrumentIdAndQuotes"></param> ///<param name="listPerturbations"></param> ///<param name="filterByInstruments"></param> ///<returns></returns> public static double CalculateFixedSideDelta(DateTime valuationDate, double floatMargin, double fixedRate, BillsSwapPricer2TermsRange payTerms, List <AmortisingResultItem> payRolls, BillsSwapPricer2TermsRange receiveTerms, List <AmortisingResultItem> receiveRolls, RateCurve originalReceiveCurve, DateTime bulletPaymentDate, double bulletPaymentValue, List <InstrumentIdAndQuoteRangeItem> listInstrumentIdAndQuotes, List <DoubleRangeItem> listPerturbations, string filterByInstruments) { if (null == listPerturbations) { listPerturbations = new List <DoubleRangeItem>(); foreach (InstrumentIdAndQuoteRangeItem item in listInstrumentIdAndQuotes) { item.InstrumentId = RemoveExtraInformationFromInstrumentId(item.InstrumentId); var defaultPerturbationAmount = new DoubleRangeItem { Value = GetDefaultPerturbationAmount(item.InstrumentId) }; listPerturbations.Add(defaultPerturbationAmount); } } var perturbationArray = new List <Pair <string, decimal> >(); for (int i = 0; i < listInstrumentIdAndQuotes.Count; i++) { InstrumentIdAndQuoteRangeItem item = listInstrumentIdAndQuotes[i]; item.InstrumentId = RemoveExtraInformationFromInstrumentId(item.InstrumentId); DoubleRangeItem perturbItem = listPerturbations[i]; if (!String.IsNullOrEmpty(filterByInstruments)) { if (item.InstrumentId.StartsWith(filterByInstruments, true, null)) { perturbationArray.Add(new Pair <string, decimal>(item.InstrumentId, (decimal)perturbItem.Value)); } } else { perturbationArray.Add(new Pair <string, decimal>(item.InstrumentId, (decimal)perturbItem.Value)); } } //var perturbedCurveId = originalReceiveCurve.PerturbCurve(perturbationArray); // Perturb the curve // //Curves.RateCurve perturbedReceiveCurve = RateCurveInMemoryCollection.Instance.Get(perturbedCurveId); var perturbedReceiveCurve = (RateCurve)originalReceiveCurve.PerturbCurve(perturbationArray); //ObjectCacheHelper.GetPricingStructureFromSerialisable(perturbedCurveId); // pay == fixed. // IDayCounter dayCounter = DayCounterHelper.Parse(payTerms.DayCountConvention); double sensitivity = GetFixedSideSensitivity(valuationDate, payRolls, receiveRolls, dayCounter, originalReceiveCurve, perturbedReceiveCurve, floatMargin, fixedRate, bulletPaymentDate, bulletPaymentValue); return(sensitivity); }
///<summary> ///</summary> ///<param name="valuationDate"></param> ///<param name="floatMargin"></param> ///<param name="fixedRate"></param> ///<param name="payTerms"></param> ///<param name="payRolls"></param> ///<param name="receiveTerms"></param> ///<param name="receiveRolls"></param> ///<param name="originalCurve"></param> ///<param name="bulletPaymentDate"></param> ///<param name="bulletPaymentValue"></param> ///<param name="listInstrumentIdAndQuotes"></param> ///<param name="listPerturbations"></param> ///<returns></returns> public static List <DoubleRangeItem> CalculateFixedSideSensitivity2(DateTime valuationDate, double floatMargin, double fixedRate, BillsSwapPricer2TermsRange payTerms, List <AmortisingResultItem> payRolls, BillsSwapPricer2TermsRange receiveTerms, List <AmortisingResultItem> receiveRolls, RateCurve originalCurve, DateTime bulletPaymentDate, double bulletPaymentValue, List <InstrumentIdAndQuoteRangeItem> listInstrumentIdAndQuotes, List <DoubleRangeItem> listPerturbations) { var result = new List <DoubleRangeItem>(); if (null == listPerturbations) { listPerturbations = new List <DoubleRangeItem>(); foreach (InstrumentIdAndQuoteRangeItem item in listInstrumentIdAndQuotes) { item.InstrumentId = RemoveExtraInformationFromInstrumentId(item.InstrumentId); var defaultPerturbationAmount = new DoubleRangeItem { Value = GetDefaultPerturbationAmount(item.InstrumentId) }; listPerturbations.Add(defaultPerturbationAmount); } } for (int i = 0; i < listInstrumentIdAndQuotes.Count; i++) { InstrumentIdAndQuoteRangeItem item = listInstrumentIdAndQuotes[i]; item.InstrumentId = RemoveExtraInformationFromInstrumentId(item.InstrumentId); DoubleRangeItem perturbItem = listPerturbations[i]; // pay == fixed. // IDayCounter dayCounter = DayCounterHelper.Parse(payTerms.DayCountConvention); var perturbationArray = new List <Pair <string, decimal> > { new Pair <string, decimal>(item.InstrumentId, (decimal)perturbItem.Value) }; //var perturbedCurveId = ObjectCacheHelper.PerturbRateCurve(curveId, perturbationArray); // Perturb the curve // var perturbedReceiveCurve = (RateCurve)originalCurve.PerturbCurve(perturbationArray); double sensitivity = GetFixedSideSensitivity(valuationDate, payRolls, receiveRolls, dayCounter, originalCurve, perturbedReceiveCurve, floatMargin, fixedRate, bulletPaymentDate, bulletPaymentValue); var bucketSensitivityItem = new DoubleRangeItem { Value = sensitivity }; result.Add(bucketSensitivityItem); } return(result); }