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 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 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 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 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); }
///<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 static Trade[] TradeValuationItemGetTradeArray(TradeValuationItem tradeValuationItem) { return(tradeValuationItem.Items.Cast <Trade>().ToArray()); }
/// <summary> /// Builds the results. /// </summary> /// <param name="metrics">The metrics.</param> /// <param name="productReferenceKeys">The swap product reference keys.</param> /// <param name="valuations">The valuations.</param> /// <param name="displayHeadersInd">The no of swap products.</param> /// <returns></returns> public static object BuildResults(string[] metrics, string[] productReferenceKeys, TradeValuationItem[] valuations, Boolean displayHeadersInd) { int index = 0; int noOfSwapProducts = productReferenceKeys.Length; int horizontalArrayCellCount = displayHeadersInd ? 1 + (metrics.Length * 2) : metrics.Length; int verticalArrayCellCount = noOfSwapProducts; var result = new object[verticalArrayCellCount, horizontalArrayCellCount]; var valuationList = new List <TradeValuationItem>(valuations); foreach (string productReferenceKey in productReferenceKeys) { if (!string.IsNullOrEmpty(productReferenceKey)) { TradeValuationItem valuation = valuationList.Find( valuationItem => String.Compare(valuationItem.valuationSet.id, productReferenceKey, StringComparison.OrdinalIgnoreCase) == 0 ); if (valuation != null) { if (displayHeadersInd) { result[index, 0] = valuation.valuationSet.id; } var metricsList = new List <string>(metrics); metricsList.RemoveAll(item => item.Length == 0); int metricIndex = displayHeadersInd ? 1 : 0; foreach (string metric in metricsList) { var quotes = new List <Quotation>(valuation.valuationSet.assetValuation[0].quote); List <Quotation> matchedQuotes = quotes.FindAll(item => String.CompareOrdinal(item.measureType.Value, metric) == 0); if (matchedQuotes.Count > 0) { result[index, metricIndex] = matchedQuotes[0].measureType.Value; int metricValueIndex = displayHeadersInd ? metricIndex + 1 : metricIndex; if (matchedQuotes.Count == 1) { result[index, metricValueIndex] = matchedQuotes[0].value; } else { var sb = new StringBuilder(); int quoteIndex = 1; Boolean maxLimitReached = false; foreach (Quotation quotation in matchedQuotes) { string delimiter = quoteIndex < matchedQuotes.Count ? ", " : string.Empty; string value = $"{quotation.value}{delimiter}"; if ((sb.Length + value.Length + 8) > 255) { maxLimitReached = true; break; } sb.Append(value); quoteIndex++; } string resultValue = maxLimitReached == false?sb.ToString() : sb + " more..."; result[index, metricValueIndex] = resultValue; } } metricIndex = displayHeadersInd ? metricIndex + 2 : metricIndex + 1; } } } index++; } return(result); }