示例#1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="InstrumentControllerData"/> class.
 /// </summary>
 /// <param name="assetValuation">The asset valuation.</param>
 /// <param name="market">The market.</param>
 /// <param name="valuationDate">The valuation date.</param>
 /// <param name="reportingCurrency">The reporting currency.</param>
 public InstrumentControllerData(AssetValuation assetValuation, IMarketEnvironment market, DateTime valuationDate, Currency reportingCurrency)
 {
     AssetValuation    = assetValuation;
     MarketEnvironment = market;
     ValuationDate     = valuationDate;
     ReportingCurrency = reportingCurrency;
 }
        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 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);
        }
示例#4
0
        //  aggregate type, e.g. sum, something else
        //
        public static AssetValuation GetValue(IList <InstrumentControllerBase> listIPriceable, IInstrumentControllerData modelData)
        {
            var            list = listIPriceable.Select(pr => pr.Calculate(modelData)).ToList();
            AssetValuation sum  = AssetValuationHelper.Sum(list);

            return(sum);
        }
示例#5
0
        public static AssetValuation CreateAssetValuationFromValuationSet(List <StringObjectRangeItem> valuationSet)
        {
            var assetValuation   = new AssetValuation();
            var listOfQuotations = new List <Quotation>();

            foreach (StringObjectRangeItem item in valuationSet)
            {
                var quotation = new Quotation
                {
                    measureType = AssetMeasureTypeHelper.Parse(item.StringValue)
                };
                if (item.ObjectValue is double | item.ObjectValue is decimal)
                {
                    quotation.value          = Convert.ToDecimal(item.ObjectValue);
                    quotation.valueSpecified = true;
                }
                else
                {
                    quotation.cashflowType = new CashflowType {
                        Value = item.ObjectValue.ToString()
                    };
                }
                listOfQuotations.Add(quotation);
            }
            assetValuation.quote = listOfQuotations.ToArray();
            return(assetValuation);
        }
        public static ValuationReport Generate(string valuationId, string baseParty,
                                               string tradeId, DateTime tradeDate,
                                               CapFloor capFloor, 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();
            TradeHeader tradeHeader = CreateTradeHeader(tradeDate, tradeId);

            trade.tradeHeader = tradeHeader;
            XsdClassesFieldResolver.TradeSetCapFloor(trade, capFloor);
            tradeValuationItem.Items        = new object[] { trade };
            tradeValuationItem.valuationSet = new ValuationSet
            {
                baseParty      = PartyReferenceFactory.Create(baseParty),
                assetValuation = new[] { assetValuation }
            };
            return(valuationReport);
        }
        public static AssetValuation Copy(AssetValuation baseValuation)
        {
            AssetValuation result = null;

            if (baseValuation != null)
            {
                result = new AssetValuation();
                if (baseValuation.quote != null)
                {
                    result.quote = QuotationHelper.Copy(baseValuation.quote).ToArray();
                }
                if (baseValuation.fxRate != null)
                {
                    var fxRate = new List <FxRate>();
                    //result.fxRate
                    //if (baseValuation.fxRate!=null)
                    //{
                    foreach (var rate in baseValuation.fxRate)
                    {
                        var newRate = new FxRate
                        {
                            quotedCurrencyPair = new QuotedCurrencyPair
                            {
                                currency1 =
                                    CurrencyHelper.Copy(
                                        rate.quotedCurrencyPair.
                                        currency1),
                                currency2 =
                                    CurrencyHelper.Copy(
                                        rate.quotedCurrencyPair.
                                        currency2),
                                quoteBasis =
                                    rate.quotedCurrencyPair.
                                    quoteBasis
                            }
                        };
                        fxRate.Add(newRate);
                    }
                    result.fxRate = fxRate.ToArray();
                }
                if (baseValuation.valuationScenarioReference != null)
                {
                    result.valuationScenarioReference = new ValuationScenarioReference
                    {
                        href = baseValuation.valuationScenarioReference.href
                    };
                }
                if (baseValuation.id != null)
                {
                    result.id = baseValuation.id;
                }
                if (baseValuation.objectReference != null)
                {
                    result.objectReference = new AnyAssetReference {
                        href = baseValuation.objectReference.href
                    };
                }
            }
            return(result);
        }
        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));
        }
示例#9
0
        /// <summary>
        /// Updates the parent valuation with the sum of child valuations, where there is no specific parent valuation.
        /// </summary>
        /// <param name="parentValuation">The parent valuation.</param>
        /// <param name="childValuation">The child valuation.</param>
        public static AssetValuation UpdateValuation(AssetValuation parentValuation, AssetValuation childValuation)
        {
            var parentMetrics         = ExtractMetricsFromAssetValuations(parentValuation);
            var childMetrics          = ExtractMetricsFromAssetValuations(childValuation);
            var parentValuationMerged = UpdateValuation(parentValuation, childValuation, parentMetrics, childMetrics);

            return(parentValuationMerged);
        }
示例#10
0
        public static AssetValuation Create(params Quotation[] quotations)
        {
            var result = new AssetValuation {
                quote = quotations
            };

            return(result);
        }
示例#11
0
        /// <summary>
        /// Creates the specified Basic asset valuation with a reference and set of quotations
        /// </summary>
        /// <param name="reference">The reference.</param>
        /// <param name="quotations">The quotations.</param>
        /// <returns></returns>
        public static AssetValuation Create(string reference, params Quotation[] quotations)
        {
            AssetValuation result = Create(quotations);

            result.objectReference = new AnyAssetReference {
                href = reference
            };
            return(result);
        }
        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);
        }
示例#13
0
        /// <summary>
        /// Updates the parent valuation with the sum of child valuations, where there is no specific parent valuation.
        /// </summary>
        /// <param name="parentValuation">The parent valuation.</param>
        /// <param name="childValuation">The child valuations.</param>
        /// <param name="parentMetrics">A list of the parent metrics.</param>
        /// <param name="childMetrics">A list iof the child netrics to aggregate.</param>
        public static AssetValuation UpdateValuation(AssetValuation parentValuation, AssetValuation childValuation,
                                                     List <string> parentMetrics, List <string> childMetrics)
        {
            var parentQuotes = new List <Quotation>(parentValuation.quote);
            var childQuotes  = new List <Quotation>(childValuation.quote);

            parentQuotes.AddRange(childQuotes.Where(quote => !parentMetrics.Contains(quote.measureType.Value)));
            parentValuation.quote = parentQuotes.ToArray();
            return(parentValuation);
        }
示例#14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="InstrumentControllerData"/> class.
 /// </summary>
 /// <param name="assetValuation">The asset valuation.</param>
 /// <param name="market">The market.</param>
 /// <param name="valuationDate">The valuation date.</param>
 /// <param name="reportingCurrency">The reporting currency.</param>
 /// <param name="baseCalculationParty">The base party.</param>
 /// <param name="isReportingCounterpartyRequired">Is the reporting party required to be one of the trade parties. The default is [false]. </param>
 public InstrumentControllerData(AssetValuation assetValuation, IMarketEnvironment market, DateTime valuationDate, Currency reportingCurrency,
                                 IIdentifier baseCalculationParty, Boolean isReportingCounterpartyRequired)
 {
     AssetValuation                  = assetValuation;
     MarketEnvironment               = market;
     ValuationDate                   = valuationDate;
     ReportingCurrency               = reportingCurrency;
     BaseCalculationParty            = baseCalculationParty;
     IsReportingCounterpartyRequired = isReportingCounterpartyRequired;
 }
示例#15
0
        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);
        }
示例#16
0
        /// <summary>
        /// Aggregates the metrics.
        /// </summary>
        /// <param name="childValuations">The metrics.</param>
        /// <param name="controllerMetrics">THe controller metrics</param>
        /// <param name="currencies">The possible currencies. </param>
        /// <returns></returns>
        public static AssetValuation AggregateMetrics(List <AssetValuation> childValuations, List <string> controllerMetrics, List <string> currencies)
        {
            var result = new AssetValuation();
            var quotes = new List <Quotation>();

            foreach (var quote in controllerMetrics.Select(metric => SumMetricQuotations(childValuations, metric, currencies)))
            {
                quotes.AddRange(quote);
            }
            result.quote = quotes.ToArray();
            return(result);
        }
示例#17
0
        public static AssetValuation Copy(AssetValuation baseValuation)
        {
            AssetValuation result = null;

            if (baseValuation != null)
            {
                result = new AssetValuation();
                if (baseValuation.quote != null)
                {
                    result.quote = QuotationHelper.Copy(baseValuation.quote).ToArray();
                }
                if (baseValuation.fxRate != null)
                {
                    result.fxRate = new FxRate();
                    if (baseValuation.fxRate.quotedCurrencyPair != null)
                    {
                        result.fxRate.quotedCurrencyPair = new QuotedCurrencyPair
                        {
                            currency1 =
                                CurrencyHelper.Copy(
                                    baseValuation.fxRate.quotedCurrencyPair.
                                    currency1),
                            currency2 =
                                CurrencyHelper.Copy(
                                    baseValuation.fxRate.quotedCurrencyPair.
                                    currency2),
                            quoteBasis =
                                baseValuation.fxRate.quotedCurrencyPair.
                                quoteBasis
                        };
                    }
                    result.fxRate.rate = baseValuation.fxRate.rate;
                }
                if (baseValuation.valuationScenarioReference != null)
                {
                    result.valuationScenarioReference = new ValuationScenarioReference
                    {
                        href = baseValuation.valuationScenarioReference.href
                    };
                }
                if (baseValuation.id != null)
                {
                    result.id = baseValuation.id;
                }
                if (baseValuation.objectReference != null)
                {
                    result.objectReference = new AnyAssetReference {
                        href = baseValuation.objectReference.href
                    };
                }
            }
            return(result);
        }
示例#18
0
        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);
        }
示例#19
0
        /// <summary>
        /// Sets the metric result.
        /// </summary>
        /// <param name="valuation">The valuation.</param>
        /// <param name="metric">The metric.</param>
        /// <param name="value">The value.</param>
        /// <param name="sensitivitySet">The sensitivity set.</param>
        public static void SetMetricResult(AssetValuation valuation, string metric, Decimal value, SensitivitySet[] sensitivitySet)
        {
            var       quotes       = new List <Quotation>(valuation.quote);
            Quotation matchedQuote = quotes.Find(
                item => String.Compare(item.measureType.Value, metric, StringComparison.OrdinalIgnoreCase) == 0
                );

            if (matchedQuote == null)
            {
                return;
            }
            matchedQuote.value          = value;
            matchedQuote.valueSpecified = true;
            matchedQuote.sensitivitySet = sensitivitySet;
        }
示例#20
0
        public static IInstrumentControllerData CreateInstrumentModelData(List <string> metrics, DateTime baseDate, IMarketEnvironment market, string reportingCurrency, string baseParty)
        {
            var bav      = new AssetValuation();
            var currency = CurrencyHelper.Parse(reportingCurrency);
            var quotes   = new Quotation[metrics.Count];
            var index    = 0;

            foreach (var metric in metrics)
            {
                quotes[index] = QuotationHelper.Create(0.0m, metric, "DecimalValue", baseDate);
                index++;
            }
            bav.quote = quotes;
            return(new InstrumentControllerData(bav, market, baseDate, currency, new PartyIdentifier(baseParty)));
        }
示例#21
0
        protected static IInstrumentControllerData CreateInstrumentModelData(string[] metrics, DateTime valuationDate, IMarketEnvironment market, string reportingCurrency, IIdentifier baseCounterParty)
        {
            var bav      = new AssetValuation();
            var currency = CurrencyHelper.Parse(reportingCurrency);
            var quotes   = new Quotation[metrics.Length];
            var index    = 0;

            foreach (var metric in metrics)
            {
                quotes[index] = QuotationHelper.Create(0.0m, metric);
                index++;
            }
            bav.quote = quotes;
            return(new InstrumentControllerData(bav, market, valuationDate, currency, baseCounterParty));
        }
示例#22
0
        static internal IInstrumentControllerData CreateInstrumentModelData(string[] metrics, DateTime baseDate, IMarketEnvironment market)
        {
            var bav = new AssetValuation();

            var quotes = new Quotation[metrics.Length];
            var index  = 0;

            foreach (var metric in metrics)
            {
                quotes[index] = QuotationHelper.Create(0.0m, metric);
                index++;
            }
            bav.quote = quotes;
            return(new InstrumentControllerData(bav, market, baseDate));
        }
示例#23
0
        static internal IInstrumentControllerData CreateInstrumentModelData(string[] metrics, DateTime baseDate, IMarketEnvironment market, string reportingCurrency)
        {
            var bav = new AssetValuation();

            var curreny = Currency.Parse(reportingCurrency);

            var quotes = new Quotation[metrics.Length];
            var index  = 0;

            foreach (var metric in metrics)
            {
                quotes[index] = QuotationHelper.Create(0.0m, metric, "DecimalValue");
                index++;
            }
            bav.quote = quotes;
            return(new InstrumentControllerData(bav, market, baseDate, curreny));
        }
        /// <summary>
        /// Aggregates the coupon metric.
        /// </summary>
        /// <param name="childValuations">The metrics.</param>
        /// <param name="controllerMetrics">The controller metrics</param>
        /// <returns></returns>
        protected static AssetValuation AggregateMetrics(List <AssetValuation> childValuations, List <string> controllerMetrics)
        {
            var result = new AssetValuation();
            var quotes = new List <Quotation>();

            foreach (var metric in controllerMetrics)
            {
                var quote   = new Quotation();
                var measure = new AssetMeasureType {
                    Value = metric
                };
                quote.measureType    = measure;
                quote.value          = Aggregator.SumDecimals(childValuations.Select(valuation => Aggregator.SumDecimals(GetMetricResults(valuation, metric))).ToArray());
                quote.valueSpecified = true;
                quotes.Add(quote);
            }
            result.quote = quotes.ToArray();
            return(result);
        }
示例#25
0
        public static AssetValuation Sum(List <AssetValuation> assetValuationList)
        {
            if (0 == assetValuationList.Count)
            {
                throw new ArgumentException("basicAssetValuationList is empty");
            }
            if (1 == assetValuationList.Count)
            {
                return(Copy(assetValuationList[0]));//BinarySerializerHelper.Clone(assetValuationList[0]);//TODO problem with the binary serializer
            }
            // clone collection internally - just to keep invariant of the method.
            //
            List <AssetValuation> clonedCollection = Copy(assetValuationList);//BinarySerializerHelper.Clone(assetValuationList);//TODO problem with the binary serializer
            AssetValuation        firstElement     = clonedCollection[0];

            clonedCollection.RemoveAt(0);
            AssetValuation sumOfTheTail = Sum(clonedCollection);

            return(Add(firstElement, sumOfTheTail));
        }
示例#26
0
        public static AssetValuation Add(AssetValuation assetValuation1, AssetValuation assetValuation2)
        {
            AssetValuation result = Copy(assetValuation1);//BinarySerializerHelper.Clone(assetValuation1);//TODO problem with the binary serializer
            var            proccessedMeasureTypes = new List <string>();

            foreach (Quotation bq1 in result.quote)
            {
                proccessedMeasureTypes.Add(bq1.measureType.Value);
                Quotation bq2 = GetQuotationByMeasureType(assetValuation2, bq1.measureType.Value);
                if (null != bq2)
                {
                    bq1.value += bq2.value;
                }
            }
            var bqToAddToList = assetValuation2.quote.Where(bq2 => - 1 == proccessedMeasureTypes.IndexOf(bq2.measureType.Value)).ToList();

            bqToAddToList.AddRange(result.quote);
            result.quote = bqToAddToList.ToArray();
            return(result);
        }
示例#27
0
        /// <summary>
        /// Creates the asset valuation.
        /// </summary>
        /// <param name="metrics">The metrics.</param>
        /// <param name="baseDate">The base date.</param>
        /// <returns></returns>
        static public AssetValuation CreateAssetValuation(IEnumerable <string> metrics, DateTime baseDate)
        {
            var av     = new AssetValuation();
            var quotes = new List <Quotation>();

            foreach (string metric in metrics)
            {
                var quotation   = new Quotation();
                var measureType = new AssetMeasureType {
                    Value = metric
                };
                quotation.value                  = 0.0m;
                quotation.valueSpecified         = true;
                quotation.measureType            = measureType;
                quotation.valuationDate          = baseDate;
                quotation.valuationDateSpecified = true;
                quotes.Add(quotation);
            }
            av.quote = quotes.ToArray();
            return(av);
        }
示例#28
0
        /// <summary>
        /// Creates the asset valuation.
        /// </summary>
        /// <param name="metrics">The metrics.</param>
        /// <param name="baseDate">The base date.</param>
        /// <returns></returns>
        public static AssetValuation CreateAssetValuation(string[] metrics, DateTime baseDate)
        {
            var av     = new AssetValuation();
            var quotes = new Quotation[metrics.Length];
            int index  = 0;

            foreach (string metric in metrics)
            {
                var quotation   = new Quotation();
                var measureType = new AssetMeasureType {
                    Value = metric
                };
                quotation.value                  = 0.0m;
                quotation.measureType            = measureType;
                quotation.valuationDate          = baseDate;
                quotation.valuationDateSpecified = true;
                quotes[index] = quotation;
                index++;
            }
            av.quote = quotes;
            return(av);
        }
示例#29
0
        /// <summary>
        /// Gets the metric results.
        /// </summary>
        /// <param name="valuation">The valuation.</param>
        /// <param name="metric">The metric.</param>
        /// <returns></returns>
        private static decimal[] GetMetricResults(AssetValuation valuation, string metric)
        {
            var results       = new List <decimal>();
            var quotes        = new List <Quotation>(valuation.quote);
            var matchedQuotes = quotes.FindAll(item => String.Compare(item.measureType.Value, metric, StringComparison.OrdinalIgnoreCase) == 0);

            if (matchedQuotes.Count > 0)
            {
                foreach (Quotation quotation in matchedQuotes)
                {
                    if (quotation.sensitivitySet != null)
                    {
                        results.AddRange(quotation.sensitivitySet[0].sensitivity.Select(sensitivity => sensitivity.Value));
                    }
                    else
                    {
                        results.Add(quotation.value);
                    }
                }
            }
            return(results.ToArray());
        }
示例#30
0
        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);
        }