private void UpdateScrollTabPage(ChartTabPage tabPage)
 {
     if (selectedButton.Text == "Interpolating Line" || selectedButton.Text == "Zoom & Panning")
     {
         Xamarin.Forms.PlatformConfiguration.AndroidSpecific.TabbedPage.SetIsSwipePagingEnabled(tabPage.On <Xamarin.Forms.PlatformConfiguration.Android>(), false);
     }
     else
     {
         Xamarin.Forms.PlatformConfiguration.AndroidSpecific.TabbedPage.SetIsSwipePagingEnabled(tabPage.On <Xamarin.Forms.PlatformConfiguration.Android>(), true);
     }
 }
 // Método público que determina el btn seleccionado y actualiza algunas configuraciones
 public void BtnSelected(ChartTabPage tabPage)
 {
     BtnSelected();
     UpdateScrollTabPage(tabPage);
 }
예제 #3
0
        private void lbSourceList_DoubleClick(object sender, EventArgs e)
        {
            if (lbSourceList.SelectedItem == null)
            {
                return;
            }
            string selectedSource = lbSourceList.SelectedItem.ToString();

            if (tcCharts.TabPages.ContainsKey(selectedSource))
            {
                tcCharts.SelectTab(selectedSource);
            }
            else
            {
                var newTabPage = new ChartTabPage(selectedSource)
                {
                    Name = selectedSource
                };

                tcCharts.TabPages.Add(newTabPage);
                tcCharts.SelectTab(newTabPage);
                var selectTime = new SelectData();

                if (selectTime.ShowDialog() == DialogResult.OK)
                {
                    var chart = tcCharts.SelectedTab as ChartTabPage;
                    if (chart == null)
                    {
                        return;
                    }
                    KeyValuePair <DateTime, double>[] data;
                    if (!(Path.GetExtension(selectedSource) == ".mst"))
                    {
                        data = PrnFinancialParser.ParseFile(folderBrowserDialog.SelectedPath + "\\" +
                                                            selectedSource);
                    }
                    else
                    {
                        data = MstFinancialParser.ParseFile(folderBrowserDialog.SelectedPath + "\\" +
                                                            selectedSource);
                    }

                    if ((data == null) || (data.Count() == 0))
                    {
                        return;
                    }

                    var selectedData = new Stack <KeyValuePair <DateTime, double> >();

                    foreach (var d in data.Where(d => (d.Key >= selectTime.DateFrom) && (d.Key <= selectTime.DateTo)))
                    {
                        selectedData.Push(d);
                    }

                    if (!selectedData.Any())
                    {
                        MessageBox.Show("Brak danych w podanym zakresie.");
                        return;
                    }

                    chart.FixedValues = selectedData.ToArray();
                    chart.UpdateFixedSeries(selectedSource);
                    valueCount.Text = "Value count: " + chart.FixedValues.Length;
                }
            }
        }
예제 #4
0
 public void UpdateSwipeTabbedPageEnabled(ChartTabPage tabPage)
 {
     UpdateScrollTabPage(tabPage);
 }
예제 #5
0
        public double Predict(bool full = true, bool predictOneValue = true, int pred = 0)
        {
            var chartTabPage = tcCharts.SelectedTab as ChartTabPage;

            if ((chartTabPage == null) || (chartTabPage.FixedValues == null))
            {
                return(-1);
            }

            var data = new double[chartTabPage.FixedValues.Length];

            for (int i = 0; i < data.Count(); i++)
            {
                data[i] = chartTabPage.FixedValues[i].Value;
            }

            if (pred == 0)
            {
                try
                {
                    pred = int.Parse(string.IsNullOrEmpty(toPred.Text) ? "0" : toPred.Text);
                }
                catch (FormatException)
                {
                    pred = (int)(chartTabPage.FixedValues.Length * 0.3);
                }
                if (predictOneValue)
                {
                    if (full)
                    {
                        if (pred > chartTabPage.FixedValues.Length - layer[0])
                        {
                            pred = chartTabPage.FixedValues.Length - layer[0];
                        }
                    }
                    else
                    {
                        int maxi = (int)(chartTabPage.FixedValues.Length * 0.3);
                        if (pred > maxi || pred == 0)
                        {
                            pred = maxi;
                        }
                    }
                }
                else
                {
                    int maxi = (int)(chartTabPage.FixedValues.Length * 0.3);
                    if (pred > maxi || pred == 0)
                    {
                        pred = maxi;
                    }
                }
            }
            predLabel.Text = "Predict: " + pred;

            double min   = chartTabPage.FixedValues.Min(pair => pair.Value);
            double max   = chartTabPage.FixedValues.Max(pair => pair.Value);
            double range = (max - min);

            var solution = new double[pred, 2];
            var netInput = new double[layer[0]];

            ProgressBar.Value   = 0;
            ProgressBar.Minimum = 0;
            ProgressBar.Maximum = 100;
            ProgressBar.Step    = 10;

            double[][] indicatorValue = IndicatorsData(data, data.Length);
            for (int j = 0; j < pred; j++)
            {
                for (int k = 0; k < layer[0] - indicator.Count; k++)
                {
                    netInput[k] = TransformData(data[j + data.Length - pred - layer[0] + k], min, range);
                }
                for (int l = layer[0] - indicator.Count; l < layer[0]; l++)
                {
                    netInput[l] = TransformData(indicatorValue[l - layer[0] + indicator.Count][j + data.Length - pred - 1]
                                                , indicatorValue[l - layer[0] + indicator.Count].Min()
                                                ,
                                                indicatorValue[l - layer[0] + indicator.Count].Max() -
                                                indicatorValue[l - layer[0] + indicator.Count].Min());
                }
                solution[j, 1] = TransformBack(network.ComputeOutputVector(netInput)[0], min, max);
                if (!predictOneValue)
                {
                    data[data.Length - pred + j] = solution[j, 1];
                    indicatorValue = IndicatorsData(data, data.Length);
                }
                if (pred > 10 && j % (pred / 10) == 0)
                {
                    ProgressBar.PerformStep();
                }
            }
            var aproximated = new double[pred];

            Console.WriteLine("Try those Values in Excel or whatever");
            using (var writer = new StreamWriter("data_dump_time_series.txt"))
            {
                for (int i = 0; i < aproximated.Length; i++)
                {
                    aproximated[i] = solution[i, 1];
                    writer.WriteLine((aproximated[i]).ToString());
                }
            }
            double error = RMS(chartTabPage.FixedValues, aproximated);

            predErrorLabel.Text = "Predict value RMS error: " + error.ToString("F6");
            ChartTabPage chart = chartTabPage;

            chart.PredictedValues = new KeyValuePair <DateTime, double> [chart.FixedValues.Length];

            int predStartIndex = chart.FixedValues.Length - aproximated.Length;

            Array.Copy(chart.FixedValues, chart.PredictedValues, predStartIndex);

            for (int i = 0; i < aproximated.Length; i++)
            {
                chart.PredictedValues[predStartIndex + i] =
                    new KeyValuePair <DateTime, double>(chart.FixedValues[predStartIndex + i].Key, aproximated[i]);
            }

            chart.UpdatePredictedSeries("predicted");

            return(error);
        }