Exemplo n.º 1
0
        private void btnCreatePurchaseOrder_Click(object sender, EventArgs e)
        {
            try
            {
#if DEBUG
                CreatePurchaseOrders();
#else
                ReportProgress = bgWorkerCreatePO.ReportProgress;
                bgWorkerCreatePO.WorkerReportsProgress = true;
                bgWorkerCreatePO.RunWorkerAsync();
#endif
            }
            catch (Exception ex)
            {
                CommonFunctions.ShowErrorDialog("VendorPurchaseOrderForm.btnCreatePurchaseOrder_Click()", ex);
            }
        }
Exemplo n.º 2
0
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            try
            {
                VendorPOFile            = txtBoxVendorPOFile.Text.Trim();
                VendorHistoryFile       = txtBoxVendorHistoryFile.Text.Trim();
                ProductInventoryFile    = txtBoxProductInventoryFile.Text.Trim();
                ProductStockHistoryFile = txtBoxProductStockHistoryFile.Text.Trim();

#if DEBUG
                UpdateDetailsFromVendorPOFile();
#else
                ReportProgress = bgWorkerUpdPurchasesForm.ReportProgress;
                bgWorkerUpdPurchasesForm.WorkerReportsProgress = true;
                bgWorkerUpdPurchasesForm.RunWorkerAsync();
#endif
            }
            catch (Exception ex)
            {
                CommonFunctions.ShowErrorDialog("UpdateProductPurchasesForm.btnUpdate_Click()", ex);
            }
        }
        /// <summary>
        /// моделировать поведение портфеля методом монте-карло
        /// возвращает массив: кол-во строк равно количеству percentiles
        /// в каждой строке intervalsCount значений по каждому перцентилю
        /// </summary>
        public static double[][] CalculateRisks(List<PortfolioActive> actives, double [][] corrM, List<double> sigmas,
            int intervalMinutes, int intervalsCount, 
            int iterationsCount,
            List<double> percentiles,
            ReportProgressDel reportProgress)
        {
            // преобразование Холецкого
            var chM = CholeskyTransform(corrM, corrM.Length, corrM.Length);
            // массив: одна строка соотв. одному испытанию
            // ячейка i строки - накопленнный за i-интервалов профит, %
            var profitByDay = new float[intervalsCount][];
            for (var i = 0; i < intervalsCount; i++)
            {
                profitByDay[i] = new float[iterationsCount];
            }

            var lastPercent = 0;
            for (var i = 0; i < iterationsCount; i++)
            {
                if (stoppingCalculation)
                {
                    stoppingCalculation = false;
                    return null;
                }
                var startPrices = actives.Select(a => a.Price).ToList();
                for (var j = 0; j < intervalsCount; j++)
                {
                    ShiftPrices(startPrices, chM, sigmas);
                    // посчитать отклонение портфеля
                    var profit = PortfolioActive.CalculateProfitPercent(actives, startPrices);
                    profitByDay[j][i] = profit;
                }
                var percent = 100*i/iterationsCount;
                if (percent - lastPercent >= 5)
                {
                    reportProgress(string.Format(Localizer.GetString("MessagePortfolioSimulationCompletedPercentFmt"), percent));
                    lastPercent = percent;
                }
            }

            // посчитать перцентили
            var percents = new double[percentiles.Count][];
            for (var i = 0; i < percentiles.Count; i++)
                percents[i] = new double[intervalsCount];

            lastPercent = 0;
            for (var j = 0; j < intervalsCount; j++)
            {
                if (stoppingCalculation)
                {
                    stoppingCalculation = false;
                    return null;
                }
                // упорядочить массив профитов на день (ну, вообще-то - на данный интервал времени)
                var intervalProfit = new EverSortedList<float>();
                for (var i = 0; i < iterationsCount; i++)
                {
                    intervalProfit.Add(profitByDay[j][i]);
                }

                // записать перцентили на интервал
                for (var i = 0; i < percentiles.Count; i++)
                {
                    var index = (int)(iterationsCount * percentiles[i] / 100);
                    percents[i][j] = intervalProfit[index];
                    if (j > 0) if (Math.Abs(percents[i][j]) < Math.Abs(percents[i][j - 1]))
                        percents[i][j] = percents[i][j - 1];
                }

                var percent = 100 * j / intervalsCount;
                if (percent - lastPercent >= 5)
                {
                    reportProgress(string.Format(Localizer.GetString("MessageResultProcessingCompletedPercentFmt"), percent));
                    lastPercent = percent;
                }
            }
            return percents;
        }
        /// <summary>
        /// моделировать поведение портфеля методом монте-карло
        /// возвращает массив: кол-во строк равно количеству percentiles
        /// в каждой строке intervalsCount значений по каждому перцентилю
        /// </summary>
        public static double[][] CalculateRisks(List <PortfolioActive> actives, double [][] corrM, List <double> sigmas,
                                                int intervalMinutes, int intervalsCount,
                                                int iterationsCount,
                                                List <double> percentiles,
                                                ReportProgressDel reportProgress)
        {
            // преобразование Холецкого
            var chM = CholeskyTransform(corrM, corrM.Length, corrM.Length);
            // массив: одна строка соотв. одному испытанию
            // ячейка i строки - накопленнный за i-интервалов профит, %
            var profitByDay = new float[intervalsCount][];

            for (var i = 0; i < intervalsCount; i++)
            {
                profitByDay[i] = new float[iterationsCount];
            }

            var lastPercent = 0;

            for (var i = 0; i < iterationsCount; i++)
            {
                if (stoppingCalculation)
                {
                    stoppingCalculation = false;
                    return(null);
                }
                var startPrices = actives.Select(a => a.Price).ToList();
                for (var j = 0; j < intervalsCount; j++)
                {
                    ShiftPrices(startPrices, chM, sigmas);
                    // посчитать отклонение портфеля
                    var profit = PortfolioActive.CalculateProfitPercent(actives, startPrices);
                    profitByDay[j][i] = profit;
                }
                var percent = 100 * i / iterationsCount;
                if (percent - lastPercent >= 5)
                {
                    reportProgress(string.Format(Localizer.GetString("MessagePortfolioSimulationCompletedPercentFmt"), percent));
                    lastPercent = percent;
                }
            }

            // посчитать перцентили
            var percents = new double[percentiles.Count][];

            for (var i = 0; i < percentiles.Count; i++)
            {
                percents[i] = new double[intervalsCount];
            }

            lastPercent = 0;
            for (var j = 0; j < intervalsCount; j++)
            {
                if (stoppingCalculation)
                {
                    stoppingCalculation = false;
                    return(null);
                }
                // упорядочить массив профитов на день (ну, вообще-то - на данный интервал времени)
                var intervalProfit = new EverSortedList <float>();
                for (var i = 0; i < iterationsCount; i++)
                {
                    intervalProfit.Add(profitByDay[j][i]);
                }

                // записать перцентили на интервал
                for (var i = 0; i < percentiles.Count; i++)
                {
                    var index = (int)(iterationsCount * percentiles[i] / 100);
                    percents[i][j] = intervalProfit[index];
                    if (j > 0)
                    {
                        if (Math.Abs(percents[i][j]) < Math.Abs(percents[i][j - 1]))
                        {
                            percents[i][j] = percents[i][j - 1];
                        }
                    }
                }

                var percent = 100 * j / intervalsCount;
                if (percent - lastPercent >= 5)
                {
                    reportProgress(string.Format(Localizer.GetString("MessageResultProcessingCompletedPercentFmt"), percent));
                    lastPercent = percent;
                }
            }
            return(percents);
        }