Example #1
0
        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);
            }
        }
Example #2
0
        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);
        }
Example #4
0
        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();
                }
            }
        }