Пример #1
0
        public void TestROEAnalyticsCall()
        {
            var modelMetrics    = new [] { ROEMetrics.ROE }; // specify metrics to calculate
            var modelParameters = new ROEParameters();

            // Populate input parameters
            PopulateModelParameters(modelParameters);

            var model       = new ROEAnalytic();
            var modelResult = model.Calculate <IROEResult, ROEResult>(modelParameters, modelMetrics);

            // Dump a content of the modelResult
            Dump(modelResult);

            Assert.IsTrue(true);
        }
Пример #2
0
        //[Test]
        //public void TestROEAnalyticsDummyCall()
        //{
        //    var modelMetrics = new [] { ROEMetrics.ROE  }; // what analytics we want to calculate

        //    var modelParameters = new ROEParameters();

        //    var model = new ROEAnalytic();

        //    var modelResult = model.Calculate<IROEResult, ROEResult>(modelParameters, modelMetrics);

        //    // Dump a content of the modelResult
        //    //
        //    Dump(modelResult);
        //}

        private void PopulateModelParameters(ROEParameters parameters)
        {
            parameters.BaseCalculationDate    = DateTime.Today;
            parameters.CounterpartyRatingID   = 2;                 //Note: must be eCRS 1-23, 98, 99
            parameters.LendingCategory        = "J";               //LGD lending category
            parameters.LGDCounterpartyType    = "LARGE CORPORATE"; //LGD counterparty type
            parameters.RegCapCounterpartyType = "CORPORATE";       //used to determine risk weights in reg cap calc (Basel I only)

            parameters.Region      = "Australia";
            parameters.CapitalType = "TIER1";

            parameters.Notional = 100000000.0m;
            parameters.Margin   = 0.0m;

            parameters.TransactionStartDate    = DateTime.Today;
            parameters.TransactionMaturityDate = parameters.TransactionStartDate.AddYears(4);

            parameters.TransactionProductType          = "IR";
            parameters.TransactionCurrency             = "AUD";
            parameters.FXExchRateStatProvCcyToTransCcy = 0.65m;
            parameters.FrequencyOfFuturePoints         = 3; /* used as multiplier for future point set in final ROE calc */

            parameters.DayCountConvention = "ACT365";

            parameters.TraceMode = false;
            //time buckets to use
            parameters.TimeBuckets = new int[] { 0, 90, 180, 270, 360, 450, 540, 630, 730, 820, 910, 1000, 1095, 1460 };


            var cashflowDates = new List <DateTime>();

            foreach (var dayOffset in parameters.TimeBuckets)
            {
                cashflowDates.Add(parameters.TransactionStartDate.AddDays(dayOffset));
            }
            parameters.CashflowDates = cashflowDates.ToArray();


            parameters.CashflowAmounts = new[]
            {
                0.0M,
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //0 to 90
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //90 to 180
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //180 to 270
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //270 to 360
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //360 to 450
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //450 to 540
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //540 to 630
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //630 to 730
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //730 to 820
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //820 to 910
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //910 to 1000
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //1000 to 1095
                parameters.Notional * 0.05m * 0.25m * 0.01m,                                  //1095 to 1460
            };

            parameters.Costs = new[]
            {
                0.0M,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m,
                parameters.Notional * 0.05m * 0.25m * 0.001m
            };

            //should be from rate curve (ie market data) in practice
            parameters.DiscountFactors = new[]
            {
                0.0M,
                1.0m / (1m + 0.05m * 0.25m * 1m),
                1.0m / (1m + 0.05m * 0.25m * 2m),
                1.0m / (1m + 0.05m * 0.25m * 3m),
                1.0m / (1m + 0.05m * 0.25m * 4m),
                1.0m / (1m + 0.05m * 0.25m * 5m),
                1.0m / (1m + 0.05m * 0.25m * 6m),
                1.0m / (1m + 0.05m * 0.25m * 7m),
                1.0m / (1m + 0.05m * 0.25m * 8m),
                1.0m / (1m + 0.05m * 0.25m * 9m),
                1.0m / (1m + 0.05m * 0.25m * 10m),
                1.0m / (1m + 0.05m * 0.25m * 11m),
                1.0m / (1m + 0.05m * 0.25m * 12m),
                1.0m / (1m + 0.05m * 0.25m * 13m)
            };


            var npvs = new List <decimal>();

            for (int i = 0; i < parameters.CashflowAmounts.Length; ++i)
            {
                var nonDiscountedAmount = parameters.CashflowAmounts[i];
                var discountedAmount    = nonDiscountedAmount * parameters.DiscountFactors[i];
                npvs.Add(discountedAmount);
            }

            parameters.NPVs = npvs.ToArray();
            parameters.StatisticalProvisions = new[]
            { 0.0M,
              //just dummy data here
              100m,
              100m,
              100m,
              100m,
              100m,
              100m,
              100m,
              100m,
              100m,
              100m,
              100m,
              100m,
              100m };
        }