예제 #1
0
        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);
        }
예제 #6
0
 ///<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());
 }
예제 #8
0
        /// <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);
        }