protected List <LogOddRatio> ComputeLogRates() { var snpCummulativeRate = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_SnPCummlativeDefaultRate(); var logRateResult = new List <LogOddRatio>(); //DataTable snpCummulativeRating = snpCummulativeRate.DefaultView.ToTable(false, SnPCummlativeDefaultRateColumns.Rating ); foreach (var row in snpCummulativeRate) { string rating = row.Rating; //Type myObjOriginalType = row.GetType(); //PropertyInfo[] myProps = myObjOriginalType.GetProperties(); //for (int year = 1; year <= _maxLogRateYear; year++) //{ //double defaultRate = double.Parse(myProps.FirstOrDefault(o => o.Name.ToString() == $"_{row.Years.ToString()}").GetValue(row).ToString()); double log = Math.Log((1 - row.Value) / row.Value); var dataRow = new LogOddRatio(); dataRow.Rating = rating; dataRow.Year = row.Years; dataRow.LogOddsRatio = log; logRateResult.Add(dataRow); //} } return(logRateResult); }
public bool ComputePdMappingTable(List <Loanbook_Data> loanbook_Data) { var expireNoExpire = new CalibrationInput_EAD_Behavioural_Terms_Processor().GetBehaviouralData(this._eclId, this._eclType); var temp = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_Assumptions(); //string[] testAccounts = { "103ABLD150330005", "15036347", "222017177" }; //***************************************************** int expOdPerformacePastRepoting = 0; try { expOdPerformacePastRepoting = int.Parse(expireNoExpire.Expired.ToString()); } catch { } int odPerformancePastExpiry = 0; try { odPerformancePastExpiry = int.Parse(expireNoExpire.NonExpired.ToString()); } catch { } //Get Data Excel/Database //var qry = Queries.Raw_Data(this._eclId,this._eclType); //var _lstRaw = DataAccess.i.GetData(qry); var _NonEXPLOANbook_data = loanbook_Data;//.Where(o => o.ContractId.Substring(0, 3) != ECLStringConstants.i.ExpiredContractsPrefix).ToList(); var lifetimePds = _scenarioLifetimePd.ComputeLifetimePd(); var redefaultLifetimePds = _scenarioRedefaultLifetimePd.ComputeRedefaultLifetimePd(); RunPDMappingJob(_NonEXPLOANbook_data, _eclId, _eclType, lifetimePds, redefaultLifetimePds, expOdPerformacePastRepoting, odPerformancePastExpiry); //var threads = _NonEXPLOANbook_data.Count / 500; //threads = threads + 1; //var taskLst = new List<Task>(); //for (int i = 0; i < threads; i++) //{ // var sub_LoanBook = _NonEXPLOANbook_data.Skip(i * 500).Take(500).ToList(); // var task = Task.Run(() => { // RunPDMappingJob(sub_LoanBook, _eclId, _eclType, lifetimePds, redefaultLifetimePds, expOdPerformacePastRepoting, odPerformancePastExpiry); // }); // taskLst.Add(task); //} //Log4Net.Log.Info($"Total Task : {taskLst.Count()}"); //var completedTask = taskLst.Where(o => o.IsCompleted).Count(); //Log4Net.Log.Info($"Task Completed: {completedTask}"); ////while (!taskLst.Any(o => o.IsCompleted)) //var tskStatusLst = new List<TaskStatus> { TaskStatus.RanToCompletion, TaskStatus.Faulted }; //while (0 < 1) //{ // if (taskLst.All(o => tskStatusLst.Contains(o.Status))) // { // break; // } // //Do Nothing //} return(true); }
public List <VasicekEtiNplIndex> ComputeEtiNplIndex() { var etiNpl = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_ETI_NPL(); var historicIndex = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_HistoricIndex(); historicIndex = historicIndex.OrderBy(o => o.Date).ToList(); double pdTtc = etiNpl.Take(32).Average(o => o.Series);// ComputePdTtc(); var vasicekEtiNplIndex = new List <VasicekEtiNplIndex>(); var ecls = Queries.EclsRegister(_eclType.ToString(), _eclId.ToString()); var dtR = DataAccess.i.GetData(ecls); var eclReg = new EclRegister { OrganizationUnitId = -1 }; if (dtR.Rows.Count > 0) { eclReg = DataAccess.i.ParseDataToObject(new EclRegister(), dtR.Rows[0]); } var rho = ECLNonStringConstants.i.Rho(eclReg.OrganizationUnitId); foreach (var etiNplRecord in etiNpl) { double index = 0; try { index = historicIndex.FirstOrDefault(o => o.Date == etiNplRecord.Date).Standardised; } catch { } var newRecord = new VasicekEtiNplIndex(); newRecord.Date = etiNplRecord.Date; newRecord.EtiNpl = etiNplRecord.Series; newRecord.Index = index; newRecord.Fitted = ComputeVasicekIndex(index, pdTtc, rho); newRecord.Residuals = etiNplRecord.Series - ComputeVasicekIndex(index, pdTtc, rho); vasicekEtiNplIndex.Add(newRecord); } vasicekEtiNplIndex = vasicekEtiNplIndex.OrderBy(o => o.Date).ToList(); return(vasicekEtiNplIndex); }
private List <PDI_MacroEconomics> GetScenarioProjectionData() { var obj = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_MacroEconomics(); return(obj); }
protected List <LogOddRatio> ComputeLogsOddsRatio() { var pd12MonthAssumption = new CalibrationInput_PD_CR_RD_Processor().GetPD12MonthsPD(this._eclId, this._eclType);// new ProcessECL_Wholesale_PD(this._eclId).Get_PDI_Assumptions(); //.Get_PDI_12MonthPds(); var pdInputAssumptions = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_Assumptions(); var logRates = ComputeLogRates(); var logOddsRatioResult = new List <LogOddRatio>(); //********************************************** string snpMappingInput = PdAssumptionsRowKey.SnpMappingValueBestFit; try { snpMappingInput = pdInputAssumptions.FirstOrDefault(o => o.PdGroup == PdInputAssumptionGroupEnum.General && o.Key == ECLNonStringConstants.i.SnpMapping).Value; } catch { } for (int rank = 1; rank <= _maxRatingRank; rank++) { //***************************** var _12MonthAssumption = new PDI_Assumptions { Value = PdAssumptionsRowKey.SnpMappingValueBestFit }; if (snpMappingInput == PdAssumptionsRowKey.SnpMappingValueBestFit) { _12MonthAssumption = pdInputAssumptions.Where(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditBestFit).FirstOrDefault(o => o.InputName == rank.ToString()); } if (snpMappingInput == PdAssumptionsRowKey.SnpMappingValueEtiCreditPolicy) { _12MonthAssumption = pdInputAssumptions.Where(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditEtiPolicy).FirstOrDefault(o => o.InputName == rank.ToString()); } string rating = _12MonthAssumption.Value;// snpMappingInput == _12MonthAssumption.Policy ? _12MonthAssumption.Policy : _12MonthAssumption.Fit; //Year 1 computation double pdValue = 0; try { pdValue = pd12MonthAssumption.FirstOrDefault(o => o.Rating == rank).Months_PDs_12; } catch { pdValue = 0; }// double.Parse(pdInputAssumptions.FirstOrDefault(o => o.PdGroup == PdInputAssumptionGroupEnum.CreditPD && o.InputName == rank.ToString()).Value); double year1LogOddRatio = Math.Log((1 - pdValue) / pdValue); var dataRow = new LogOddRatio(); dataRow.Rank = rank; dataRow.Rating = rating; dataRow.Year = 1; dataRow.LogOddsRatio = year1LogOddRatio; logOddsRatioResult.Add(dataRow); //Year to Max computation double year1RatingLogRate = 0; try { year1RatingLogRate = logRates.FirstOrDefault(row => row.Rating == rating && row.Year == 1).LogOddsRatio; } catch { } for (int year = 2; year <= _maxRatingYear; year++) { double currentYearRatingLogRate = logRates.FirstOrDefault(row => row.Rating == rating && row.Year == Math.Min(year, _maxLogRateYear)).LogOddsRatio; double currentYearLogOddRatio = year1LogOddRatio + currentYearRatingLogRate - year1RatingLogRate; var currentYeardataRow = new LogOddRatio(); currentYeardataRow.Rank = rank; currentYeardataRow.Rating = rating; currentYeardataRow.Year = year; currentYeardataRow.LogOddsRatio = currentYearLogOddRatio; logOddsRatioResult.Add(currentYeardataRow); } } return(logOddsRatioResult); }