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); }
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; } } }
public void UpdateSwipeTabbedPageEnabled(ChartTabPage tabPage) { UpdateScrollTabPage(tabPage); }
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); }