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); }
//[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 }; }