private void BtnCalcRiskClick(object sender, EventArgs e)
        {
            if (tickerSigmas == null || tickerSigmas.Count == 0) return;

            // считать таблицу корреляций
            var lines = rtbCorr.Text.Split(
                new[] {Environment.NewLine, "\n"}, StringSplitOptions.RemoveEmptyEntries);
            if (lines.Length < (portfolio.Count + 1)) return;
            var tickers = lines[0].Split(
                new[] { (char)9, ' ' }, StringSplitOptions.RemoveEmptyEntries);
            if (tickers.Length != portfolio.Count) return;
            var curM = new double[tickers.Length][];
            for (var i = 1; i < lines.Length; i++)
            {
                var values = lines[i].ToDoubleArrayUniform();
                if (values.Length != tickers.Length) return;
                curM[i - 1] = values;
            }

            // моделировать
            var dlg = new RiskCalculationPopupForm(portfolio, curM, testSettings, tickerSigmas);
            if (dlg.ShowDialog() != DialogResult.OK) return;
            calculatedPercentiles = dlg.riskPercentiles;
            if (calculatedPercentiles == null || calculatedPercentiles.Length == 0) return;

            // заполнить список перцентилей
            cbPercentiles.Items.Clear();
            foreach (var p in testSettings.percentiles)
            {
                cbPercentiles.Items.Add(p.ToString("f1", CultureProvider.Common));
            }
            for (var i = 0; i < testSettings.percentiles.Count; i++)
                cbPercentiles[i] = true;

            // перейти на страницу графика
            tabControl.SelectedTab = tabPageChart;
            btnDrawChart.Focus();
        }
        private void BtnCalcRiskClick(object sender, EventArgs e)
        {
            if (tickerSigmas == null || tickerSigmas.Count == 0)
            {
                return;
            }

            // считать таблицу корреляций
            var lines = rtbCorr.Text.Split(
                new[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries);

            if (lines.Length < (portfolio.Count + 1))
            {
                return;
            }
            var tickers = lines[0].Split(
                new[] { (char)9, ' ' }, StringSplitOptions.RemoveEmptyEntries);

            if (tickers.Length != portfolio.Count)
            {
                return;
            }
            var curM = new double[tickers.Length][];

            for (var i = 1; i < lines.Length; i++)
            {
                var values = lines[i].ToDoubleArrayUniform();
                if (values.Length != tickers.Length)
                {
                    return;
                }
                curM[i - 1] = values;
            }

            // моделировать
            var dlg = new RiskCalculationPopupForm(portfolio, curM, testSettings, tickerSigmas);

            if (dlg.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            calculatedPercentiles = dlg.riskPercentiles;
            if (calculatedPercentiles == null || calculatedPercentiles.Length == 0)
            {
                return;
            }

            // заполнить список перцентилей
            cbPercentiles.Items.Clear();
            foreach (var p in testSettings.percentiles)
            {
                cbPercentiles.Items.Add(p.ToString("f1", CultureProvider.Common));
            }
            for (var i = 0; i < testSettings.percentiles.Count; i++)
            {
                cbPercentiles[i] = true;
            }

            // перейти на страницу графика
            tabControl.SelectedTab = tabPageChart;
            btnDrawChart.Focus();
        }