private void OnComboBoxSelectionChanged(object sender, SelectionChangedEventArgs e) { ComboBox comboBox = sender as ComboBox; if (comboBox.SelectedIndex == 1 && financialChart != null) { HiLoSeries hiLoSeries = new HiLoSeries(); hiLoSeries.XBindingPath = "Date"; hiLoSeries.High = "High"; hiLoSeries.Low = "Low"; hiLoSeries.ItemsSource = hiLowChart.StockPriceDetails; hiLoSeries.VisibilityOnLegend = Visibility.Collapsed; financialChart.PrimaryAxis.ZoomFactor = 1; financialChart.PrimaryAxis.PlotOffset = 10; financialChart.SecondaryAxis.ZoomFactor = 1; financialChart.Series.Clear(); financialChart.Series.Add(hiLoSeries); } else if (comboBox.SelectedIndex == 0 && financialChart != null) { HiLoOpenCloseSeries hiLoOpenClose = new HiLoOpenCloseSeries(); hiLoOpenClose.XBindingPath = "Date"; hiLoOpenClose.High = "High"; hiLoOpenClose.Low = "Low"; hiLoOpenClose.Open = "Open"; hiLoOpenClose.Close = "Close"; hiLoOpenClose.ItemsSource = hiLowChart.StockPriceDetails; hiLoOpenClose.VisibilityOnLegend = Visibility.Collapsed; financialChart.Series.Clear(); financialChart.PrimaryAxis.ZoomFactor = 1; financialChart.SecondaryAxis.ZoomFactor = 1; financialChart.Series.Add(hiLoOpenClose); } else if (comboBox.SelectedIndex == 2 && financialChart != null) { CandleSeries chartSeries = new CandleSeries(); chartSeries.XBindingPath = "Date"; chartSeries.High = "High"; chartSeries.Low = "Low"; chartSeries.Open = "Open"; chartSeries.Close = "Close"; chartSeries.ItemsSource = hiLowChart.StockPriceDetails; chartSeries.BearFillColor = new SolidColorBrush(Colors.Red); chartSeries.BullFillColor = new SolidColorBrush(Colors.Green); chartSeries.VisibilityOnLegend = Visibility.Collapsed; financialChart.Series.Clear(); financialChart.PrimaryAxis.ZoomFactor = 1; financialChart.SecondaryAxis.ZoomFactor = 1; financialChart.Series.Add(chartSeries); } }
void ChartView_PropertyChanged(object sender, PropertyChangedEventArgs e) { switch (selectedIndicator) { case "Accumulation Distribution": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; AccumulationDistributionIndicator indicator = new AccumulationDistributionIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new AccumulationDistributionIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "Average True Range": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; AverageTrueRangeIndicator indicator = new AverageTrueRangeIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new AverageTrueRangeIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "BollingerBand": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; BollingerBandIndicator indicator = new BollingerBandIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new BollingerBandIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "Exponential Average": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; ExponentialAverageIndicator indicator = new ExponentialAverageIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new ExponentialAverageIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "MACDTechnical": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; MACDTechnicalIndicator indicator = new MACDTechnicalIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new MACDTechnicalIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "Momentum Technical": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; MomentumTechnicalIndicator indicator = new MomentumTechnicalIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new MomentumTechnicalIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "RSITechnical": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; RSITechnicalIndicator indicator = new RSITechnicalIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new RSITechnicalIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "Simple Average": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; SimpleAverageIndicator indicator = new SimpleAverageIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new SimpleAverageIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; case "Triangular Average": { HiLoOpenCloseSeries series = StockChart.Series[0] as HiLoOpenCloseSeries; ColumnSeries series1 = StockChart.Series[1] as ColumnSeries; TriangularAverageIndicator indicator = new TriangularAverageIndicator(); NumericalAxis axis1 = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; indicator.YAxis = axis1; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; if (StockChart.TechnicalIndicators.Count > 0) { StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); StockChart.TechnicalIndicators.Remove(StockChart.TechnicalIndicators[0]); } StockChart.TechnicalIndicators.Add(indicator); indicator = new TriangularAverageIndicator(); NumericalAxis axis = new NumericalAxis() { Visibility = Visibility.Collapsed, ShowGridLines = false }; UI.Xaml.Charts.SfChart.SetRow(axis, 1); indicator.YAxis = axis; indicator.ItemsSource = series.ItemsSource; indicator.High = series.High; indicator.Low = series.Low; indicator.Open = series.Open; indicator.Close = series.Close; indicator.XBindingPath = series.XBindingPath; indicator.Volume = series.Open; StockChart.TechnicalIndicators.Add(indicator); } break; } }
public override View GetSampleContent(Context context) { chart = new SfChart(context); chart.SetPadding(0, 10, 0, 0); chart.Behaviors.Add(new ChartTrackballBehavior()); DateTimeAxis dateTimeAxis = new DateTimeAxis(); dateTimeAxis.LabelStyle.LabelFormat = "MM/yyyy"; chart.PrimaryAxis = dateTimeAxis; NumericalAxis numericalAxis = new NumericalAxis(); chart.SecondaryAxis = numericalAxis; HiLoOpenCloseSeries candleSeries = new HiLoOpenCloseSeries(); candleSeries.ItemsSource = MainPage.GetTechnicalIndicatorData(); candleSeries.XBindingPath = "XValue"; candleSeries.Open = "Open"; candleSeries.Close = "Close"; candleSeries.High = "High"; candleSeries.Low = "Low"; candleSeries.EnableAnimation = true; candleSeries.Name = "Series"; chart.Series.Add(candleSeries); SimpleMovingAverageIndicator sMA = new SimpleMovingAverageIndicator(); sMA.SeriesName = "Series"; sMA.XBindingPath = "XValue"; sMA.Open = "Open"; sMA.Close = "Close"; sMA.High = "High"; sMA.Low = "Low"; sMA.EnableAnimation = true; chart.TechnicalIndicators.Add(sMA); TextView labelDisplayMode = new TextView(context); labelDisplayMode.TextSize = 20; labelDisplayMode.Text = "Technical Indicator type"; Spinner selectLabelMode = new Spinner(context, SpinnerMode.Dialog); adapter = new List <String>() { "Simple Moving Average Indicator", "Average True Indicator", "Exponential Moving Averge Indicator", "Momentum Indicator", "Accumulation Distribution Indicator", "RSI Indicator", "Triangular Moving Average Indicator", "MACD Indicator", "Stochastic Indicator", "Bollinger Band Indicator" }; ArrayAdapter <String> dataAdapter = new ArrayAdapter <String> (context, Android.Resource.Layout.SimpleSpinnerItem, adapter); dataAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleDropDownItem1Line); selectLabelMode.Adapter = dataAdapter; selectLabelMode.ItemSelected += SelectLabelMode_ItemSelected; LinearLayout linearLayout = new LinearLayout(context); linearLayout.SetPadding(20, 0, 20, 30); linearLayout.SetBackgroundColor(Color.Rgb(236, 235, 242)); linearLayout.LayoutParameters = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WrapContent, LinearLayout.LayoutParams.WrapContent); linearLayout.Orientation = Orientation.Vertical; linearLayout.SetBackgroundColor(Color.White); linearLayout.AddView(selectLabelMode); linearLayout.AddView(chart); return(linearLayout); }
override protected void DrawPath(SeriesBase series, System.Drawing.Pen pen) { if (series is LineSeries || series is HiLoSeries || series is HiLoOpenCloseSeries) { var points = new PointCollection(); var lowPoints = new PointCollection(); var pointCount = 0; PartsCollection partsCollection = new PartsCollection(); if (series is LineSeries) { LineSeries lineSeries = series as LineSeries; points = lineSeries.LinePoints; pointCount = lineSeries.LinePoints.Count; partsCollection = lineSeries.Parts; } else if (series is HiLoSeries) { HiLoSeries lineSeries = series as HiLoSeries; points = lineSeries.HighPoints; lowPoints = lineSeries.LowPoints; pointCount = lineSeries.HighPoints.Count; partsCollection = lineSeries.Parts; } else if (series is HiLoOpenCloseSeries) { HiLoOpenCloseSeries lineSeries = series as HiLoOpenCloseSeries; points = lineSeries.HighPoints; lowPoints = lineSeries.LowPoints; pointCount = lineSeries.HighPoints.Count; partsCollection = lineSeries.Parts; } if (RenderingMode == RenderingMode.Default) { for (int i = 0; i < partsCollection.Count; i++) { UIElement renderElement = partsCollection[i].CreatePart(); if (renderElement != null && !PartsCanvas.Children.Contains(renderElement)) { PartsCanvas.Children.Add(renderElement); } } } else { if (series is LineSeries) { for (int i = 0; i < pointCount - 1; i++) { switch (RenderingMode) { case RenderingMode.GDIRendering: GDIGraphics.DrawLine(pen, points[i].AsDrawingPointF(), points[i + 1].AsDrawingPointF()); break; case RenderingMode.Default: break; case RenderingMode.WritableBitmap: this.WritableBitmap.Lock(); WritableBitmapGraphics.DrawLine(pen, points[i].AsDrawingPointF(), points[i + 1].AsDrawingPointF()); this.WritableBitmap.Unlock(); break; default: break; } } } else { for (int i = 0; i < pointCount; i++) { switch (RenderingMode) { case RenderingMode.GDIRendering: GDIGraphics.DrawLine(pen, points[i].AsDrawingPointF(), lowPoints[i].AsDrawingPointF()); break; case RenderingMode.Default: break; case RenderingMode.WritableBitmap: this.WritableBitmap.Lock(); WritableBitmapGraphics.DrawLine(pen, points[i].AsDrawingPointF(), lowPoints[i].AsDrawingPointF()); this.WritableBitmap.Unlock(); break; default: break; } } } this.Collection.InvalidateBitmap(); } } }