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