示例#1
0
        public List <IndexForecast> ComputeIndexForecast()
        {
            List <IndexForecast> indexForecast = new List <IndexForecast>();

            var statisticalInputs = GetStatisticalInputData();
            var principalData     = ComputeScenarioPrincipalComponents(statisticalInputs);

            double indexStandardDeviation = ComputeHistoricIndexStandardDeviation();
            double indexMean = ComputeHistoricIndexMean();

            var cp = new Macro_Processor().GetMacroResult_Statistics(this._eclId, this._eclType);

            var engenValues = statisticalInputs.Where(o => o.Mode == StatisticalInputsRowKeys.Eigenvalues).Select(p => p.MacroEconomicValue).ToList();

            for (int i = 0; i < engenValues.Count; i++)
            {
                if (i == 0)
                {
                    cp.IndexWeight1 = engenValues[i] / engenValues.Take(2).Sum();
                }

                if (i == 1)
                {
                    cp.IndexWeight2 = engenValues[i] / engenValues.Take(2).Sum();
                }

                if (i == 2)
                {
                    cp.IndexWeight3 = 0;// engenValues[i] / engenValues.Take(3).Sum();
                }
                if (i == 3)
                {
                    cp.IndexWeight4 = 0;// engenValues[i] / engenValues.Take(4).Sum();
                }
            }

            foreach (var itm in principalData)
            {
                double actual = (itm.Principal1 * cp.IndexWeight1.Value) + (itm.Principal2 * cp.IndexWeight2.Value) + (itm.Principal3 * cp.IndexWeight3.Value) + (itm.Principal4 * cp.IndexWeight4.Value);

                var dr = new IndexForecast();
                dr.Date         = itm.Date;
                dr.Actual       = actual;
                dr.Standardised = indexStandardDeviation == 0 ? 0 : (actual - indexMean) / indexStandardDeviation;

                indexForecast.Add(dr);
            }

            return(indexForecast);
        }
示例#2
0
        protected List <IndexForecast> ComputeScenarioStandardisedData(List <PDI_StatisticalInputs> statisticalInputs)
        {
            List <IndexForecast> standardisedData = new List <IndexForecast>();

            //var statisticalInputs = GetStatisticalInputData();
            var originalData = GetScenarioProjectionOriginalData();

            //double macroeconomicStandardDeviation = ComputeHistoricIndexStandardDeviation();
            //double macroeconomicMean = ComputeHistoricIndexMean();

            foreach (var row in originalData)
            {
                var macroeconomicMean = statisticalInputs.FirstOrDefault(o => o.MacroEconomicVariableId == row.MacroEconomicVariableId && o.Mode == StatisticalInputsRowKeys.Mean);
                var macroeconomicStandardDeviation = statisticalInputs.FirstOrDefault(o => o.MacroEconomicVariableId == row.MacroEconomicVariableId && o.Mode == StatisticalInputsRowKeys.StandardDeviation);
                //****************************************
                if (macroeconomicMean == null)
                {
                    macroeconomicMean = new PDI_StatisticalInputs {
                        MacroEconomicValue = 0, MacroEconomicVariableId = 0
                    }
                }
                ;

                if (macroeconomicStandardDeviation == null)
                {
                    macroeconomicStandardDeviation = new PDI_StatisticalInputs {
                        MacroEconomicValue = 0, MacroEconomicVariableId = 0
                    }
                }
                ;

                var dr = new IndexForecast();
                dr.Date = row.Date;
                dr.MacroEconomicVariableId = row.MacroEconomicVariableId;
                if (macroeconomicStandardDeviation.MacroEconomicValue == 0)
                {
                    macroeconomicStandardDeviation.MacroEconomicValue = 1;
                }
                dr.MacroEconomicValue = (row.MacroEconomicValue - macroeconomicMean.MacroEconomicValue) / macroeconomicStandardDeviation.MacroEconomicValue;

                standardisedData.Add(dr);
                //Log4Net.Log.Info($"{dr.Date},{dr.MacroEconomicVariableId},{dr.MacroEconomicValue},{this._Scenario.ToString()}++++++");
            }

            return(standardisedData);
        }
示例#3
0
        protected List <IndexForecast> GetScenarioProjectionOriginalData()
        {
            var originalData = new List <IndexForecast>();

            var projections = GetScenarioProjectionData();

            //originalData = projections.AsEnumerable()
            //                    .Where(row => row.Field<DateTime>(MacroeconomicProjectionColumns.Date) > TempEclData.ReportDate)
            //                    .CopyToDataTable();


            var qry = Queries.Get_AffiliateId(this._eclId, this._eclType);
            var dt  = DataAccess.i.GetData(qry);

            var affiliateId = Convert.ToInt32(dt.Rows[0][0]);

            qry = Queries.Get_AffiliateMEVBackDateValues(this._eclId, this._eclType);
            dt  = DataAccess.i.GetData(qry);



            var MEVBackDate = new List <AffiliateMEVBackDateValues>();

            foreach (DataRow dr in dt.Rows)
            {
                MEVBackDate.Add(DataAccess.i.ParseDataToObject(new AffiliateMEVBackDateValues(), dr));
            }

            var lastMacroVariableId = MEVBackDate.Select(o => o.MicroEconomicId).Distinct().Last();

            projections = projections.OrderByDescending(o => o.Date).ToList();

            for (int i = 0; i < projections.Count; i++)
            {
                if (1 != 1)//(affiliateId == 5 || affiliateId == 46 || affiliateId == 47) && projections[i].MacroEconomicVariableId == lastMacroVariableId)
                {
                    var prevItm = projections.FirstOrDefault(o => o.MacroEconomicVariableId == lastMacroVariableId && o.Date < projections[i].Date);
                    if (prevItm != null)
                    {
                        projections[i].BestEstimateMacroEconomicValue = projections[i].BestEstimateMacroEconomicValue - prevItm.BestEstimateMacroEconomicValue;
                        projections[i].OptimisticMacroEconomicValue   = projections[i].OptimisticMacroEconomicValue - prevItm.OptimisticMacroEconomicValue;
                        projections[i].DownturnMacroEconomicValue     = projections[i].DownturnMacroEconomicValue - prevItm.DownturnMacroEconomicValue;
                    }
                    else
                    {
                        projections[i].BestEstimateMacroEconomicValue = 0;
                        projections[i].OptimisticMacroEconomicValue   = 0;
                        projections[i].DownturnMacroEconomicValue     = 0;
                    }
                }
            }


            var reportingDate = GetReportingDate(_eclType, _eclId);

            //Log4Net.Log.Info("=================");
            for (int i = 0; i < projections.Count; i++)
            {
                if (projections[i].Date > reportingDate)// && i > 3
                {
                    var itm    = projections[i];
                    var bdate  = MEVBackDate.FirstOrDefault(o => o.MicroEconomicId == itm.MacroEconomicVariableId);
                    var _bdate = 0;
                    if (bdate != null)
                    {
                        //if (bdate.BackDateQuarters == 1)
                        //{
                        //    bdate.BackDateQuarters = bdate.BackDateQuarters;
                        //}
                        _bdate = bdate.BackDateQuarters * 3;
                    }
                    var _dt  = itm.Date.AddMonths(-_bdate);
                    var _itm = projections.OrderBy(p => p.Date).FirstOrDefault(o => o.MacroEconomicVariableId == itm.MacroEconomicVariableId && o.Date.Month == _dt.Month && o.Date.Year == _dt.Year); // == GetLastDayOfMonth(itm.Date.AddMonths(-_bdate))
                    if (_itm == null)
                    {
                        if (projections.Count > 0)
                        {
                            _itm = projections.Last();
                        }
                    }
                    var dr = new IndexForecast();
                    dr.Date = itm.Date;
                    dr.MacroEconomicVariableId = itm.MacroEconomicVariableId;
                    if (this._Scenario == ECL_Scenario.Best)
                    {
                        dr.MacroEconomicValue = _itm.BestEstimateMacroEconomicValue;
                    }
                    if (this._Scenario == ECL_Scenario.Downturn)
                    {
                        dr.MacroEconomicValue = _itm.DownturnMacroEconomicValue;
                    }
                    if (this._Scenario == ECL_Scenario.Optimistic)
                    {
                        dr.MacroEconomicValue = _itm.OptimisticMacroEconomicValue;
                    }

                    originalData.Add(dr);


                    //Log4Net.Log.Info($"{dr.Date},{dr.MacroEconomicVariableId},{dr.MacroEconomicValue},{this._Scenario.ToString()}");
                }
            }


            return(originalData);
        }