コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        private List <PDI_MacroEconomics> GetScenarioProjectionData()
        {
            var obj = new ProcessECL_PD(this._eclId, this._eclType).Get_PDI_MacroEconomics();

            return(obj);
        }
コード例 #5
0
        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);
        }