public string CreateFraValuationReport(ICoreCache cache, string nameSpace, string id, string baseParty, Fra fra, Market market, AssetValuation assetValuation, NamedValueSet properties) { ValuationReport valuationReport = ValuationReportGenerator.Generate(id, baseParty, fra, market, assetValuation); cache.SaveObject(valuationReport, nameSpace + "." + id, properties); return(id); }
public void TestReportingRoundtripOutThenInValuationReport() { var orig = new ValuationReport { fpmlVersion = "5-10", header = new NotificationMessageHeader { messageId = new MessageId { messageIdScheme = "scheme/1.0", Value = "12345678" }, inReplyTo = new MessageId { messageIdScheme = "scheme/1.0", Value = "87654321" }, sentBy = new MessageAddress { messageAddressScheme = "scheme/1.0", Value = "*****@*****.**" }, creationTimestamp = DateTime.Now }, correlationId = new CorrelationId { correlationIdScheme = "scheme/1.0", Value = "12345678" }, party = GetTestFragment_Parties(), account = GetTestFragment_Accounts(2), tradeValuationItem = new[] { new TradeValuationItem() } }; Roundtrip_OutThenIn(orig, true, true); }
public void TestCreateSwaptionValuationReport() { var curves = CreateInterestRateStreamTestEnvironment(DateTime.Now); Swaption swaption = GenerateSwaptionParametricWithCashflows(); var marketFactory = new MarketFactory(); marketFactory.AddYieldCurve(curves.GetForecastRateCurveFpML()); Market market = marketFactory.Create(); const string baseParty = _NAB; var assetValuation = new AssetValuation(); var listOfQuotations = new List <Quotation>(); IEnumerable <StringDoubleRangeItem> valuationSet = CreateValuationSetList(54321, 123.5); foreach (StringDoubleRangeItem item in valuationSet) { var quotation = new Quotation { measureType = AssetMeasureTypeHelper.Parse(item.StringValue), value = (decimal)item.DoubleValue, valueSpecified = true }; listOfQuotations.Add(quotation); } assetValuation.quote = listOfQuotations.ToArray(); ValuationReport valuationReport = ValuationReportGenerator.Generate("some-valuation-Id", baseParty, "0001", DateTime.Now, swaption, market, assetValuation); Debug.WriteLine("ValuationReport:"); Debug.WriteLine(XmlSerializerHelper.SerializeToString(typeof(Document), valuationReport)); string s1 = XmlSerializerHelper.SerializeToString(typeof(Document), valuationReport); XmlSerializerHelper.DeserializeFromString <ValuationReport>(typeof(Document), s1); XmlSerializerHelper.SerializeToFile(typeof(Document), valuationReport, "some-valuation-Id"); XmlSerializerHelper.DeserializeFromFile <ValuationReport>(typeof(Document), "some-valuation-Id"); }
public void TestCreateFraValuationReport1() { var rateCurve = TestRateCurve(new DateTime(2009, 7, 15)); var fra = new Fra(); var pair = rateCurve.GetFpMLData(); var marketFactory = new MarketFactory(); marketFactory.AddPricingStructure(pair); Market market = marketFactory.Create(); const string baseParty = _NAB; var assetValuation = new AssetValuation(); var listOfQuotations = new List <Quotation>(); IEnumerable <StringDoubleRangeItem> valuationSet = CreateValuationSetList(54321, 123.5); foreach (StringDoubleRangeItem item in valuationSet) { var quotation = new Quotation { measureType = AssetMeasureTypeHelper.Parse(item.StringValue), value = (decimal)item.DoubleValue, valueSpecified = true }; listOfQuotations.Add(quotation); } assetValuation.quote = listOfQuotations.ToArray(); ValuationReport valuationReport = ValuationReportGenerator.Generate("some-valuation-Id", baseParty, fra, market, assetValuation); Debug.WriteLine("ValuationReport:"); Debug.WriteLine(XmlSerializerHelper.SerializeToString(valuationReport)); }
public void GetInfoTwoSwaps() { string valReportId1 = Guid.NewGuid().ToString(); ValuationReport valuationReport1 = CreateSwapValuationReport(valReportId1); string valReportId2 = Guid.NewGuid().ToString(); ValuationReport valuationReport2 = CreateSwapValuationReport(valReportId2); Engine.Cache.SaveObject(valuationReport1, Engine.NameSpace + "." + valReportId1, null); Engine.Cache.SaveObject(valuationReport2, Engine.NameSpace + "." + valReportId2, null); var excelValuation = new Valuation(); string mergedReportId = excelValuation.Merge(Engine.Cache, Engine.NameSpace, valReportId1, valReportId2, null, null, null, null, null, null, null, null); //var valuation = Engine.Cache.LoadObject<ValuationReport>(mergedReportId); List <ValuationInfoRangeItem> valuationInfoRangeItems = excelValuation.GetInfo(Engine.Cache, Engine.NameSpace, mergedReportId); object[,] range = ObjectToArrayOfPropertiesConverter.ConvertListToHorizontalArrayRange(valuationInfoRangeItems); Debug.Print("GetInfo (two swaps)"); Debug.Print(ParameterFormatter.FormatObject(range)); Assert.AreEqual(3, valuationInfoRangeItems.Count); Assert.AreEqual(mergedReportId, valuationInfoRangeItems[0].Id); Assert.AreEqual("envelope", valuationInfoRangeItems[0].Description); Assert.AreEqual(valReportId1, valuationInfoRangeItems[1].Id); Assert.AreEqual("swap(fixed/float)", valuationInfoRangeItems[1].Description); Assert.AreEqual(valReportId2, valuationInfoRangeItems[2].Id); Assert.AreEqual("swap(fixed/float)", valuationInfoRangeItems[2].Description); }
public static ValuationReport Generate(string valuationId, string baseParty, Fra fra, Market market, AssetValuation assetValuation) { var valuationReport = new ValuationReport { header = new NotificationMessageHeader { messageId = new MessageId { Value = valuationId } }, market = market }; // Associate id with the valuation // var tradeValuationItem = new TradeValuationItem(); valuationReport.tradeValuationItem = new[] { tradeValuationItem }; var trade = new Trade(); XsdClassesFieldResolver.TradeSetFra(trade, fra); tradeValuationItem.Items = new object[] { trade }; tradeValuationItem.valuationSet = new ValuationSet { baseParty = PartyReferenceFactory.Create(baseParty), assetValuation = new[] { assetValuation } }; return(valuationReport); }
public static ValuationReport Generate(string valuationId, string party1Name, string party2Name, bool isParty1Base, Trade trade, Market market, AssetValuation assetValuation) { var valuationReport = new ValuationReport { header = new NotificationMessageHeader { messageId = new MessageId { Value = valuationId } }, market = market }; // Associate id with the valuation // var tradeValuationItem = new TradeValuationItem(); valuationReport.tradeValuationItem = new[] { tradeValuationItem }; string baseParty = isParty1Base ? party1Name : party2Name; Party party1 = PartyFactory.Create("Party1", party1Name); Party party2 = PartyFactory.Create("Party2", party2Name); valuationReport.party = new[] { party1, party2 }; tradeValuationItem.Items = new object[] { trade }; tradeValuationItem.valuationSet = new ValuationSet { baseParty = PartyReferenceFactory.Create(baseParty), assetValuation = new[] { assetValuation } }; return(valuationReport); }
public string CreateTradeValuationReport(ICoreCache cache, string nameSpace, string id, string party1, string party2, bool isParty1Base, Trade trade, Market market, AssetValuation assetValuation, NamedValueSet properties) { ValuationReport valuationReport = ValuationReportGenerator.Generate(id, party1, party2, isParty1Base, trade, market, assetValuation); cache.SaveObject(valuationReport, nameSpace + "." + id, properties); return(id); }
internal static void AddOtherPartyPayments(ValuationReport valuationReport, List <OtherPartyPaymentRangeItem> otherPartyPaymentList) { var otherPartyPayments = new List <Payment>(); // other party payments // if (null != otherPartyPaymentList) { foreach (OtherPartyPaymentRangeItem item in otherPartyPaymentList) { var otherPartyPayment = new Payment { payerPartyReference = PartyReferenceFactory.Create(item.Payer), receiverPartyReference = PartyReferenceFactory.Create(item.Receiver), paymentAmount = MoneyHelper.GetNonNegativeAmount(item.Amount), paymentDate = AdjustableOrAdjustedDateHelper.CreateAdjustedDate(item.PaymentDate), paymentType = PaymentTypeHelper.Create(item.PaymentType) }; otherPartyPayments.Add(otherPartyPayment); } } TradeValuationItem valuationItem = valuationReport.tradeValuationItem[0]; Trade[] tradeArray = XsdClassesFieldResolver.TradeValuationItemGetTradeArray(valuationItem); Trade trade = tradeArray[0]; trade.otherPartyPayment = otherPartyPayments.ToArray(); }
public void TestMergeTwoValuationReports() { string valReportId1 = Guid.NewGuid().ToString(); ValuationReport valuationReport1 = CreateSwapValuationReport(valReportId1); Assert.AreEqual( valReportId1, (((Trade)valuationReport1.tradeValuationItem[0].Items[0]).tradeHeader.partyTradeIdentifier[0].Items[0] as TradeId).Value ); string valReportId2 = Guid.NewGuid().ToString(); ValuationReport valuationReport2 = CreateSwapValuationReport(valReportId2); Assert.AreEqual( valReportId2, ((valuationReport2.tradeValuationItem[0].Items[0] as Trade).tradeHeader.partyTradeIdentifier[0].Items[0] as TradeId).Value ); Engine.Cache.SaveObject(valuationReport1, Engine.NameSpace + "." + valReportId1, null); Engine.Cache.SaveObject(valuationReport2, Engine.NameSpace + "." + valReportId2, null); var excelValuation = new Valuation(); string mergedReportId = excelValuation.Merge(Engine.Cache, Engine.NameSpace, valReportId1, valReportId2, null, null, null, null, null, null, null, null); var mergedReport = Engine.Cache.LoadObject <ValuationReport>(Engine.NameSpace + "." + mergedReportId); Assert.AreEqual(2, mergedReport.tradeValuationItem.Length); Assert.AreNotEqual(mergedReport.header.messageId.Value, valReportId1); Assert.AreNotEqual(mergedReport.header.messageId.Value, valReportId2); Assert.AreEqual( valReportId1, ((mergedReport.tradeValuationItem[0].Items[0] as Trade).tradeHeader.partyTradeIdentifier[0].Items[0] as TradeId).Value ); Assert.AreEqual( valReportId2, ((mergedReport.tradeValuationItem[1].Items[0] as Trade).tradeHeader.partyTradeIdentifier[0].Items[0] as TradeId).Value ); }
public static ValuationReport Generate(string valuationId, string baseParty, string tradeId, DateTime tradeDate, Swap swap, Market market, AssetValuation assetValuation) { var valuationReport = new ValuationReport { header = new NotificationMessageHeader { messageId = new MessageId { Value = valuationId } }, market = market }; // Associate id with the valuation // var tradeValuationItem = new TradeValuationItem(); valuationReport.tradeValuationItem = new[] { tradeValuationItem }; //Party nabParty = PartyFactory.Create("Party1"); //Party counterParty = PartyFactory.Create(_counterpartyName); // // valuationReport.party = new Party[] { nabParty, counterParty }; // PartyOrAccountReference nabPartyReference = PartyOrAccountReferenceFactory.Create(nabParty.id); // PartyOrAccountReference counterPartyReference = PartyOrAccountReferenceFactory.Create(counterParty.id); // // NAB is the payer of pay paystream and receiver of receive stream // // // SwapHelper.GetPayerStream(swap).payerPartyReference = nabPartyReference; // SwapHelper.GetReceiverStream(swap).receiverPartyReference = nabPartyReference; // // // CounterParty is the receiver of paystream and payer of receivestream // // // SwapHelper.GetPayStream(swap).receiverPartyReference = counterPartyReference; // SwapHelper.GetReceiveStream(swap).payerPartyReference = counterPartyReference; var trade = new Trade(); // Generate trade header // TradeHeader tradeHeader = CreateTradeHeader(tradeDate, tradeId); trade.tradeHeader = tradeHeader; XsdClassesFieldResolver.TradeSetSwap(trade, swap); tradeValuationItem.Items = new object[] { trade }; tradeValuationItem.valuationSet = new ValuationSet { baseParty = PartyReferenceFactory.Create(baseParty), assetValuation = new[] { assetValuation } }; return(valuationReport); }
public string CreateSwapValuationReport(ICoreCache cache, string nameSpace, string valuationId, string baseParty, string tradeId, DateTime tradeDate, Swap swap, Market market, AssetValuation assetValuation) { ValuationReport valuationReport = ValuationReportGenerator.Generate(valuationId, baseParty, tradeId, tradeDate, swap, market, assetValuation); cache.SaveObject(valuationReport, nameSpace + "." + valuationId, null); return(valuationId); }
public string CreateValuation( ILogger logger, ICoreCache cache, String nameSpace, IBusinessCalendar fixingCalendar, IBusinessCalendar paymentCalendar, List <StringObjectRangeItem> valuationSet, ValuationRange valuationRange, TradeRange tradeRange, CapFloorLegParametersRange_Old legParametersRange, List <InputCashflowRangeItem> legDetailedCashflowsListArray, List <InputPrincipalExchangeCashflowRangeItem> legPrincipleExchangeCashflowListArray, List <AdditionalPaymentRangeItem> legAdditionalPaymentListArray, List <PartyIdRangeItem> partyIdList, //optional List <OtherPartyPaymentRangeItem> otherPartyPaymentList, //optional List <FeePaymentRangeItem> feePaymentList //optional ) { Pair <ValuationResultRange, CapFloor> fpML = GetPriceAndGeneratedFpML(logger, cache, nameSpace, fixingCalendar, paymentCalendar, valuationRange, tradeRange, legParametersRange, legDetailedCashflowsListArray, legPrincipleExchangeCashflowListArray, legAdditionalPaymentListArray, feePaymentList); CapFloor capFloor = fpML.Second; string valuationReportAndProductId = tradeRange.Id ?? Guid.NewGuid().ToString(); capFloor.id = valuationReportAndProductId; AssetValuation assetValuation = InterestRateProduct.CreateAssetValuationFromValuationSet(valuationSet); //Valuation valuation = new Valuation(); // TODO: add Trade Id & Trade data into valuation. (Trade.Id & Trade.TradeHeader.TradeDate) // string baseParty = valuationRange.BaseParty; var uniqueCurves = new List <IRateCurve>(); foreach (string curveName in new[] { legParametersRange.ForecastCurve, legParametersRange.DiscountCurve }) { if (!String.IsNullOrEmpty(curveName)) { var curve = CurveLoader.LoadInterestRateCurve(logger, cache, nameSpace, curveName); if (!uniqueCurves.Contains(curve)) { uniqueCurves.Add(curve); } } } Market fpMLMarket = InterestRateProduct.CreateFpMLMarketFromCurves(uniqueCurves); ValuationReport valuationReport = ValuationReportGenerator.Generate(valuationReportAndProductId, baseParty, valuationReportAndProductId, tradeRange.TradeDate, capFloor, fpMLMarket, assetValuation); cache.SaveObject(valuationReport, valuationReportAndProductId, null); InterestRateProduct.ReplacePartiesInValuationReport(valuationReport, partyIdList); InterestRateProduct.AddOtherPartyPayments(valuationReport, otherPartyPaymentList); return(valuationReportAndProductId); }
internal static void ReplacePartiesInValuationReport(ValuationReport valuationReport, List <PartyIdRangeItem> partyIdList) { if (null == partyIdList) { return; } var listOfParties = new List <Party>(); foreach (PartyIdRangeItem partyIdRangeItem in partyIdList) { Party party = PartyFactory.Create(partyIdRangeItem.IdOrRole); var partyId = new PartyId { Value = partyIdRangeItem.PartyId }; party.partyId = new[] { partyId }; listOfParties.Add(party); } valuationReport.party = listOfParties.ToArray(); }
public static ValuationReport Merge(ValuationReport valuation1, ValuationReport valuation2) { ValuationReport result = XmlSerializerHelper.Clone(valuation1); ValuationReport copyOfValuation2 = XmlSerializerHelper.Clone(valuation2); // generate new id from a valuation report // string valuationIdForCombinedValuationReport = Guid.NewGuid().ToString(); result.header.messageId.Value = valuationIdForCombinedValuationReport; // copy tradeValuationItems from valuation2 to result. // var listOfTradeValuations = new List <TradeValuationItem>(); listOfTradeValuations.AddRange(result.tradeValuationItem); listOfTradeValuations.AddRange(copyOfValuation2.tradeValuationItem); result.tradeValuationItem = listOfTradeValuations.ToArray(); return(result); }
public string CreateValuation( ILogger logger, ICoreCache cache, String nameSpace, IBusinessCalendar fixingCalendar, IBusinessCalendar paymentCalendar, List <StringObjectRangeItem> valuationSet, ValuationRange valuationRange, TradeRange tradeRange, SwapLegParametersRange_Old leg1ParametersRange, List <DetailedCashflowRangeItem> leg1DetailedCashflowsListArray, List <PrincipalExchangeCashflowRangeItem> leg1PrincipalExchangeCashflowListArray, List <AdditionalPaymentRangeItem> leg1AdditionalPaymentListArray, List <PartyIdRangeItem> partyIdList,//optional List <OtherPartyPaymentRangeItem> otherPartyPaymentList ) { Swap floater = GetPriceAndGeneratedFpMLSwap(logger, cache, nameSpace, fixingCalendar, paymentCalendar, valuationRange, tradeRange, leg1ParametersRange, leg1DetailedCashflowsListArray, leg1PrincipalExchangeCashflowListArray, leg1AdditionalPaymentListArray).Second; string baseParty = valuationRange.BaseParty; string valuationReportAndProductId = tradeRange.Id ?? Guid.NewGuid().ToString(); floater.id = valuationReportAndProductId; var uniqueCurves = GetUniqueCurves(logger, cache, nameSpace, leg1ParametersRange); Market fpMLMarket = InterestRateProduct.CreateFpMLMarketFromCurves(uniqueCurves); var valuation = new Valuations.Valuation(); // TODO: add Trade Id & Trade data into valuation. (Trade.Id & Trade.TradeHeader.TradeDate) // AssetValuation assetValuation = InterestRateProduct.CreateAssetValuationFromValuationSet(valuationSet); valuation.CreateSwapValuationReport(cache, nameSpace, valuationReportAndProductId, baseParty, tradeRange.Id, tradeRange.TradeDate, floater, fpMLMarket, assetValuation); ValuationReport valuationReport = valuation.Get(cache, nameSpace, valuationReportAndProductId); InterestRateProduct.ReplacePartiesInValuationReport(valuationReport, partyIdList); InterestRateProduct.AddOtherPartyPayments(valuationReport, otherPartyPaymentList); return(valuationReportAndProductId); }
public static ValuationReport Generate(string valuationId, string baseParty, string tradeId, DateTime tradeDate, Swaption swaption, Market market, AssetValuation assetValuation) { var valuationReport = new ValuationReport { header = new NotificationMessageHeader { messageId = new MessageId { Value = valuationId } }, market = market }; // Associate id with the valuation // var tradeValuationItem = new TradeValuationItem(); valuationReport.tradeValuationItem = new[] { tradeValuationItem }; // Generate trade header // var trade = new Trade(); TradeHeader tradeHeader = CreateTradeHeader(tradeDate, tradeId); trade.tradeHeader = tradeHeader; XsdClassesFieldResolver.TradeSetSwaption(trade, swaption); tradeValuationItem.Items = new object[] { trade }; tradeValuationItem.valuationSet = new ValuationSet { baseParty = PartyReferenceFactory.Create(baseParty), assetValuation = new[] { assetValuation } }; return(valuationReport); }
public CachedSummary(string uniqueId, NamedValueSet properties, ValuationReport summary) { UniqueId = uniqueId; Properties = properties; Summary = summary; }
///<summary> /// Prices the trade. ///</summary> ///<returns></returns> public override ValuationReport Price(IInstrumentControllerData modelData, ValuationReportType reportType) { //Price. if (TradeHelper.IsImplementedProductType(ProductType)) { // A new valuationReport. var valuationReport = new ValuationReport(); //var valSet = new ValuationSet(); InstrumentControllerBase priceableProduct = PriceableProduct; if (priceableProduct == null) { throw new ApplicationException("PriceableProduct is null!"); } //This makes sure the marketenvironment has curves in it, otherwise the pricer will not function. if (modelData.MarketEnvironment == null) { throw new ApplicationException("MarketEnvironment is null!"); } //Set the appropriate Multiplier based on the reporting party var result = new AssetValuation(); var reportingParty = modelData.BaseCalculationParty.Id; if (BaseParty == TradeProp.Party1) { if (reportingParty == TradeProp.Party1) { result = priceableProduct.Calculate(modelData); } if (Parties[0].partyName.Value == reportingParty) { result = priceableProduct.Calculate(modelData); } if (Parties[1].partyName.Value == reportingParty || reportingParty == TradeProp.Party2) { priceableProduct.Multiplier = -1; result = priceableProduct.Calculate(modelData); priceableProduct.Multiplier = 1; } } if (BaseParty == TradeProp.Party2) { if (reportingParty == TradeProp.Party2) { result = priceableProduct.Calculate(modelData); } if (Parties[1].partyName.Value == reportingParty) { result = priceableProduct.Calculate(modelData); } if (Parties[0].partyName.Value == reportingParty || reportingParty == TradeProp.Party1) { priceableProduct.Multiplier = -1; result = priceableProduct.Calculate(modelData); priceableProduct.Multiplier = 1; } } if (modelData.IsReportingCounterpartyRequired) { priceableProduct.Multiplier = 0; result = priceableProduct.Calculate(modelData); priceableProduct.Multiplier = 1; } var valSet = new ValuationSet { assetValuation = new[] { result } }; //The tradevaluation item. var trade = new Trade { id = TradeIdentifier.UniqueIdentifier, tradeHeader = TradeHeader }; //Checks to see if the deatil data is required and if so builds the product.//TODO Add other ItemChoice types.e.g. Fra if (reportType == ValuationReportType.Full) { var item = PriceableProduct.BuildTheProduct(); trade.Item = item; trade.ItemElementName = trade.GetTradeTypeFromItem(); } var tradeValuationItem = new TradeValuationItem { Items = new object[] { trade }, valuationSet = valSet }; valuationReport.tradeValuationItem = new[] { tradeValuationItem }; return(valuationReport); } throw new NotSupportedException("Product pricing is not supported!"); }
public string CreateValuation( ILogger logger, ICoreCache cache, String nameSpace, IBusinessCalendar fixingCalendar, IBusinessCalendar paymentCalendar, SwaptionParametersRange swaptionParametersRange, List <StringObjectRangeItem> valuationSet, ValuationRange valuationRange, TradeRange tradeRange, SwapLegParametersRange leg1ParametersRange, SwapLegParametersRange leg2ParametersRange, List <InputCashflowRangeItem> leg1DetailedCashflowsListArray, List <InputCashflowRangeItem> leg2DetailedCashflowsListArray, List <InputPrincipalExchangeCashflowRangeItem> leg1PrincipalExchangeCashflowListArray, List <InputPrincipalExchangeCashflowRangeItem> leg2PrincipalExchangeCashflowListArray, List <AdditionalPaymentRangeItem> leg1AdditionalPaymentListArray, List <AdditionalPaymentRangeItem> leg2AdditionalPaymentListArray, List <PartyIdRangeItem> partyIdList, //optional List <OtherPartyPaymentRangeItem> otherPartyPaymentList, //opt List <FeePaymentRangeItem> feePaymentList //opt ) { var swap = GetPriceAndGeneratedFpMLSwap(logger, cache, nameSpace, fixingCalendar, paymentCalendar, valuationRange, tradeRange, leg1ParametersRange, leg2ParametersRange, leg1DetailedCashflowsListArray, leg2DetailedCashflowsListArray, leg1PrincipalExchangeCashflowListArray, leg2PrincipalExchangeCashflowListArray, leg1AdditionalPaymentListArray, leg2AdditionalPaymentListArray).Second; string baseParty = valuationRange.BaseParty; List <IRateCurve> uniqueCurves = GetUniqueCurves(logger, cache, nameSpace, leg1ParametersRange, leg2ParametersRange); Market fpMLMarket = InterestRateProduct.CreateFpMLMarketFromCurves(uniqueCurves); // TODO: add Trade Id & Trade data into valuation. (Trade.Id & Trade.TradeHeader.TradeDate) // // create ValuationReport and add it to in-memory collection. // Add methods! AssetValuation assetValuation = InterestRateProduct.CreateAssetValuationFromValuationSet(valuationSet); NonNegativeMoney premium = MoneyHelper.GetNonNegativeAmount(swaptionParametersRange.Premium, swaptionParametersRange.PremiumCurrency); AdjustableDate expirationDate = DateTypesHelper.ToAdjustableDate(swaptionParametersRange.ExpirationDate, swaptionParametersRange.ExpirationDateBusinessDayAdjustments, swaptionParametersRange.ExpirationDateCalendar); AdjustableOrAdjustedDate paymentDate = DateTypesHelper.ToAdjustableOrAdjustedDate(swaptionParametersRange.PaymentDate, swaptionParametersRange.PaymentDateBusinessDayAdjustments, swaptionParametersRange.PaymentDateCalendar); TimeSpan earliestExerciseTimeAsTimeSpan = TimeSpan.FromDays(swaptionParametersRange.EarliestExerciseTime); DateTime earliestExerciseTime = DateTime.MinValue.Add(earliestExerciseTimeAsTimeSpan); TimeSpan expirationTimeAsTimeSpan = TimeSpan.FromDays(swaptionParametersRange.ExpirationTime); DateTime expirationTime = DateTime.MinValue.Add(expirationTimeAsTimeSpan); var swaption = SwaptionFactory.Create(swap, premium, swaptionParametersRange.PremiumPayer, swaptionParametersRange.PremiumReceiver, paymentDate, expirationDate, earliestExerciseTime, expirationTime, swaptionParametersRange.AutomaticExcercise); // overrides the premium created by SwaptionFactort.Create // var feeList = new List <Payment>(); if (null != feePaymentList) { feeList.AddRange(feePaymentList.Select(feePaymentRangeItem => new Payment { paymentDate = DateTypesHelper.ToAdjustableOrAdjustedDate(feePaymentRangeItem.PaymentDate), paymentAmount = MoneyHelper.GetNonNegativeAmount(feePaymentRangeItem.Amount), payerPartyReference = PartyReferenceFactory.Create(feePaymentRangeItem.Payer), receiverPartyReference = PartyReferenceFactory.Create(feePaymentRangeItem.Receiver) })); } swaption.premium = feeList.ToArray(); string valuationReportAndProductId = tradeRange.Id ?? Guid.NewGuid().ToString(); swaption.id = valuationReportAndProductId; ValuationReport valuationReport = ValuationReportGenerator.Generate(valuationReportAndProductId, baseParty, valuationReportAndProductId, tradeRange.TradeDate, swaption, fpMLMarket, assetValuation); cache.SaveObject(valuationReport, valuationReportAndProductId, null); InterestRateProduct.ReplacePartiesInValuationReport(valuationReport, partyIdList); InterestRateProduct.AddOtherPartyPayments(valuationReport, otherPartyPaymentList); return(valuationReportAndProductId); }