Exemple #1
0
        protected override void InitExample()
        {
            View.FindViewById <Button>(Resource.Id.start).Click += (sender, args) => Start();
            View.FindViewById <Button>(Resource.Id.pause).Click += (sender, args) => Pause();
            View.FindViewById <Button>(Resource.Id.reset).Click += (sender, args) => Reset();

            var xAxis = new NumericAxis(Activity)
            {
                VisibleRange = _xVisibleRange, AutoRange = AutoRange.Never
            };
            var yAxis = new NumericAxis(Activity)
            {
                GrowBy = new DoubleRange(0.1, 0.1), AutoRange = AutoRange.Always
            };

            var rs1 = new FastLineRenderableSeries {
                DataSeries = _ds1, StrokeStyle = new SolidPenStyle(0xFF4083B7, 2f.ToDip(Activity))
            };
            var rs2 = new FastLineRenderableSeries {
                DataSeries = _ds2, StrokeStyle = new SolidPenStyle(0xFFFFA500, 2f.ToDip(Activity))
            };
            var rs3 = new FastLineRenderableSeries {
                DataSeries = _ds3, StrokeStyle = new SolidPenStyle(0xFFE13219, 2f.ToDip(Activity))
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);
                Surface.RenderableSeries.Add(rs1);
                Surface.RenderableSeries.Add(rs2);
                Surface.RenderableSeries.Add(rs3);
            }
            Start();
        }
Exemple #2
0
        protected override void InitExample()
        {
            var xAxis = new NumericAxis(Activity)
            {
                GrowBy = new DoubleRange(0.1, 0.1), VisibleRange = new DoubleRange(1.1, 2.7)
            };
            var yAxis = new NumericAxis(Activity)
            {
                GrowBy = new DoubleRange(0.1, 0.1)
            };

            var fourierSeries = DataManager.Instance.GetFourierSeries(1.0, 0.1);
            var dataSeries    = new XyDataSeries <double, double>();

            dataSeries.Append(fourierSeries.XData, fourierSeries.YData);

            var renderableSeries = new FastLineRenderableSeries {
                DataSeries = dataSeries, StrokeStyle = new SolidPenStyle(0xFF279B27, 2f.ToDip(Activity))
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);
                Surface.RenderableSeries.Add(renderableSeries);
                Surface.ChartModifiers = new ChartModifierCollection
                {
                    new ZoomPanModifier(),
                    new PinchZoomModifier(),
                    new ZoomExtentsModifier(),
                };
            }
        }
        public void AddOrUpdateLine(int lineId, int maxNumberOfPoints, string lineName, bool useYAxisRight = true)
        {
            if (LineExist(lineId))
            {
                lineDictionary[lineId] = new XyDataSeries <double, double>(maxNumberOfPoints)
                {
                    SeriesName = lineName
                };
                //sciChart.RenderableSeries.RemoveAt(id);
            }
            else
            {
                lineDictionary.Add(lineId, new XyDataSeries <double, double>(maxNumberOfPoints)
                {
                    SeriesName = lineName
                });

                var lineRenderableSerie = new FastLineRenderableSeries();
                lineRenderableSerie.Name       = "lineRenderableSerie" + lineId.ToString();
                lineRenderableSerie.DataSeries = lineDictionary[lineId];
                lineRenderableSerie.DataSeries.AcceptsUnsortedData = true;
                if (useYAxisRight)
                {
                    lineRenderableSerie.YAxisId = "RightYAxis";
                }
                else
                {
                    lineRenderableSerie.YAxisId = "LeftYAxis";
                }

                //Ajout de la ligne dans le scichart
                sciChart.RenderableSeries.Add(lineRenderableSerie);
            }
        }
Exemple #4
0
        public void LogDiscreteParameter(string parameterName, bool?value)
        {
            _uiNotifier.Notify(() => {
                if (value.HasValue)
                {
                    if (!_logs.ContainsKey(parameterName))
                    {
                        var dataSeries = new XyDataSeries <DateTime, double> {
                            SeriesName = parameterName
                        };

                        var color = _colors.First(c => _usedColors.All(uc => uc != c));
                        _usedColors.Add(color);
                        var renderSeries = new FastLineRenderableSeries {
                            DataSeries = dataSeries, SeriesColor = color
                        };

                        var vm       = new ChartSeriesViewModel(dataSeries, renderSeries);
                        var metadata = new SeriesAdditionalData(vm);

                        DiscreteSeries.Add(vm);
                        DiscreteSeriesAdditionalData.Add(metadata);

                        _logs.Add(parameterName, new PointsSeriesAndAdditionalData(vm, metadata, dataSeries, renderSeries));
                    }
                    _logs[parameterName].DataSeries.Append(DateTime.Now, value.Value ? 1.0 : 0.0);
                    _updatable?.Update();
                }
            });
        }
Exemple #5
0
        protected override void InitExample()
        {
            var xBottomAxis = new NumericAxis(Activity)
            {
                VisibleRange = new DoubleRange(0, 10), AutoRange = AutoRange.Never, AxisTitle = "Time (seconds)"
            };
            var yRightAxis = new NumericAxis(Activity)
            {
                VisibleRange = new DoubleRange(-0.5, 1.5), AxisTitle = "Voltage (mV)"
            };

            var rs1 = new FastLineRenderableSeries {
                DataSeries = _series0
            };
            var rs2 = new FastLineRenderableSeries {
                DataSeries = _series1
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xBottomAxis);
                Surface.YAxes.Add(yRightAxis);
                Surface.RenderableSeries.Add(rs1);
                Surface.RenderableSeries.Add(rs2);
            }
        }
Exemple #6
0
        public override void OnModifierDoubleClick(ModifierMouseArgs e)
        {
            base.OnModifierDoubleClick(e);

            // First double-click, start drawing
            if (_dataSeries == null)
            {
                _dataSeries = new XyDataSeries <DateTime, double>()
                {
                    AcceptsUnsortedData = true
                };
                var renderableSeries = new FastLineRenderableSeries()
                {
                    StrokeThickness = 2,
                    Stroke          = Colors.LimeGreen,
                    PointMarker     = new EllipsePointMarker()
                    {
                        Fill = Colors.White,
                    }
                };
                renderableSeries.DataSeries = _dataSeries;
                ParentSurface.RenderableSeries.Add(renderableSeries);

                // Start point
                AppendPoint(e.MousePoint);

                // (Dynamic) end point
                AppendPoint(e.MousePoint);
            }
            // Last double-click, complete drawing
            else
            {
                _dataSeries = null;
            }
        }
Exemple #7
0
        private IChartSeriesViewModel CreateChartSeriesViewModel(ITrendViewModel trendViewModel, bool discrete)
        {
            var dataSeries = new XyDataSeries <DateTime, double> {
                SeriesName = trendViewModel.Title
            };

            CopyPointsFromTrendToSeries(trendViewModel, dataSeries);

            IRenderableSeries series = null;

            if (discrete)
            {
                series = new FastMountainRenderableSeries {
                    DataSeries     = dataSeries,
                    Tag            = trendViewModel,
                    AntiAliasing   = false,
                    IsDigitalLine  = true,
                    ResamplingMode = ResamplingMode.None
                };
            }
            else
            {
                series = new FastLineRenderableSeries {
                    DataSeries = dataSeries,
                    Tag        = trendViewModel,
                };
            }

            ChooseSeriesColor(trendViewModel, series);
            return(new ChartSeriesViewModel(dataSeries, series));
        }
Exemple #8
0
 public PointsSeriesAndAdditionalData(ChartSeriesViewModel seriesViewModel, SeriesAdditionalData additionalData, XyDataSeries <DateTime, double> dataSeries, FastLineRenderableSeries renderSeries)
 {
     SeriesVm     = seriesViewModel;
     Metadata     = additionalData;
     DataSeries   = dataSeries;
     RenderSeries = renderSeries;
 }
Exemple #9
0
        public void AddOrUpdateLine(int id, int maxNumberOfPoints, string lineName)
        {
            if (lineDictionary.ContainsKey(id))
            {
                lineDictionary[id] = new XyDataSeries <double, double>(maxNumberOfPoints)
                {
                    SeriesName = lineName
                };
            }
            else
            {
                lineDictionary.Add(id, new XyDataSeries <double, double>(maxNumberOfPoints)
                {
                    SeriesName = lineName
                });

                var lineRenderableSerie = new FastLineRenderableSeries();
                lineRenderableSerie.Name       = "lineRenderableSerie" + id.ToString();
                lineRenderableSerie.DataSeries = lineDictionary[id];
                lineRenderableSerie.DataSeries.AcceptsUnsortedData = true;

                //Ajout de la ligne dans le scichart
                sciChart.RenderableSeries.Add(lineRenderableSerie);
            }
        }
Exemple #10
0
        protected override void InitExample()
        {
            var xAxis = new NumericAxis(Activity)
            {
                AutoRange = AutoRange.Always
            };
            var leftAxis = new NumericAxis(Activity)
            {
                AxisAlignment = AxisAlignment.Left, AxisId = AxisAlignment.Left.Name()
            };
            var rightAxis = new NumericAxis(Activity)
            {
                AxisAlignment = AxisAlignment.Right, AxisId = AxisAlignment.Right.Name()
            };

            var selectedStrokeStyle = new SolidPenStyle(ColorUtil.White, 4f.ToDip(Activity));
            var selectedPointMarker = new EllipsePointMarker
            {
                Width       = 10.ToDip(Activity),
                Height      = 10.ToDip(Activity),
                FillStyle   = new SolidBrushStyle(0xFFFF00DC),
                StrokeStyle = new SolidPenStyle(ColorUtil.White, 1f.ToDip(Activity))
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(leftAxis);
                Surface.YAxes.Add(rightAxis);

                var initialColor = Color.Blue;
                for (var i = 0; i < SeriesCount; i++)
                {
                    var alignment  = i % 2 == 0 ? AxisAlignment.Left : AxisAlignment.Right;
                    var dataSeries = GenerateDataSeries(alignment, i);

                    var rs = new FastLineRenderableSeries
                    {
                        DataSeries  = dataSeries,
                        YAxisId     = alignment.Name(),
                        StrokeStyle = new SolidPenStyle(initialColor, 2f.ToDip(Activity))
                    };

                    // Colors are incremented for visual purposes only
                    var newR = initialColor.R == 255 ? 255 : initialColor.R + 5;
                    var newB = initialColor.B == 0 ? 0 : initialColor.B - 2;
                    initialColor = Color.Argb(255, (byte)newR, initialColor.G, (byte)newB);

                    Surface.RenderableSeries.Add(rs);
                }

                Surface.ChartModifiers.Add(new SeriesSelectionModifier
                {
                    SelectedSeriesStyle = new SelectedSeriesStyle(selectedStrokeStyle, selectedPointMarker)
                });
            }
        }
        protected override void InitExample()
        {
            var xAxis = new DateAxis(Activity)
            {
                GrowBy = new DoubleRange(0, 0.1)
            };
            var yAxis = new NumericAxis(Activity)
            {
                GrowBy = new DoubleRange(0, 0.1)
            };

            var dataSeries      = new XyzDataSeries <DateTime, double, double>();
            var tradeDataSource = DataManager.Instance.GetTradeticks().ToArray();

            dataSeries.Append(
                tradeDataSource.Select(x => x.TradeDate),
                tradeDataSource.Select(x => x.TradePrice),
                tradeDataSource.Select(x => x.TradeSize));

            var lineSeries = new FastLineRenderableSeries
            {
                DataSeries  = dataSeries,
                StrokeStyle = new SolidPenStyle(0xFFFF3333, 1.ToDip(Activity))
            };

            var bubbleSeries = new FastBubbleRenderableSeries
            {
                DataSeries       = dataSeries,
                BubbleBrushStyle = new SolidBrushStyle(0x77CCCCCC),
                StrokeStyle      = new SolidPenStyle(0xFFCCCCCC, 2f.ToDip(Activity)),
                ZScaleFactor     = 3,
                AutoZRange       = false,
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);
                Surface.RenderableSeries.Add(lineSeries);
                Surface.RenderableSeries.Add(bubbleSeries);
                Surface.ChartModifiers = new ChartModifierCollection
                {
                    new RubberBandXyZoomModifier(),
                    new ZoomExtentsModifier(),
                };

                new ScaleAnimatorBuilder(lineSeries, 10600d)
                {
                    Interpolator = new OvershootInterpolator(), Duration = 1000, StartDelay = 600
                }.Start();
                new ScaleAnimatorBuilder(bubbleSeries, 10600d)
                {
                    Interpolator = new OvershootInterpolator(), Duration = 1000, StartDelay = 600
                }.Start();
            }
        }
Exemple #12
0
        private SciChartSurface CreateSurface()
        {
            var series = new FastLineRenderableSeries()
            {
                Stroke     = Colors.Red,
                DataSeries = GetDataSeries()
            };

            var xAxes = new AxisCollection()
            {
                new NumericAxis()
            };

            var yAxes = new AxisCollection()
            {
                new NumericAxis()
            };

            var surface = new SciChartSurface()
            {
                ChartTitle       = "Rendered In Memory",
                XAxes            = xAxes,
                YAxes            = yAxes,
                RenderableSeries = new ObservableCollection <IRenderableSeries>()
                {
                    series
                },
                Annotations =
                    new AnnotationCollection()
                {
                    new BoxAnnotation()
                    {
                        X1         = 10,
                        X2         = 30,
                        Y1         = 10,
                        Y2         = 40,
                        Background = new SolidColorBrush(Colors.Green),
                    },
                    new VerticalLineAnnotation()
                    {
                        X1              = 35,
                        Stroke          = new SolidColorBrush(Colors.Yellow),
                        StrokeThickness = 3,
                        ShowLabel       = true,
                        LabelPlacement  = LabelPlacement.Axis
                    }
                }
            };

            ThemeManager.SetTheme(surface, "Chrome");

            surface.Width  = 800;
            surface.Height = 400;

            return(surface);
        }
        private static void OnDataSeriesDependencyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var sciChartSurface = d as SciChartSurface;

            if (sciChartSurface == null)
            {
                return;
            }

            if (e.NewValue == null)
            {
                sciChartSurface.RenderableSeries.Clear();
                return;
            }

            using (sciChartSurface.SuspendUpdates())
            {
                sciChartSurface.RenderableSeries.Clear();

                var random       = new Random();
                var itr          = (IEnumerable <IDataSeries>)e.NewValue;
                var renderSeries = new List <IRenderableSeries>();

                // 1.7.2 specific
                var dataset = new DataSeriesSet <double, double>();

                foreach (var dataSeries in itr)
                {
                    if (dataSeries == null)
                    {
                        continue;
                    }

                    // 1.7.2 specific
                    dataset.Add(dataSeries);

                    var rgb = new byte[3];
                    random.NextBytes(rgb);
                    var renderableSeries = new FastLineRenderableSeries()
                    {
                        ResamplingMode = ResamplingMode.MinMax,
                        SeriesColor    = Color.FromArgb(255, rgb[0], rgb[1], rgb[2]),
                        DataSeries     = dataSeries,
                    };

                    renderSeries.Add(renderableSeries);
                }

                // 1.7.2 specific
                sciChartSurface.DataSet = dataset;

                sciChartSurface.RenderableSeries = new ObservableCollection <IRenderableSeries>(renderSeries);
            }
        }
        protected override void InitExample()
        {
            var dataSeries      = new XyzDataSeries <DateTime, double, double>();
            var tradeDataSource = DataManager.Instance.GetTradeticks().ToArray();

            dataSeries.Append(
                tradeDataSource.Select(x => x.TradeDate),
                tradeDataSource.Select(x => x.TradePrice),
                tradeDataSource.Select(x => x.TradeSize));

            var xAxis = new DateAxis(Activity)
            {
                GrowBy = new DoubleRange(0, 0.1)
            };
            var yAxis = new NumericAxis(Activity)
            {
                GrowBy = new DoubleRange(0, 0.1)
            };

            var lineSeries = new FastLineRenderableSeries
            {
                DataSeries  = dataSeries,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Rgb(0xFF, 0x33, 0x33))
                              .WithThickness(1f, ComplexUnitType.Dip).Build()
            };

            var stops        = new[] { 0, 0.95f, 1 };
            var colors       = new int[] { Color.Transparent, Resources.GetColor(Resource.Color.color_primary), Color.Transparent };
            var gradientFill = new RadialGradientBrushStyle(0.5f, 0.5f, 0.5f, 0.5f, colors, stops, TileMode.Clamp);

            var bubbleSeries = new FastBubbleRenderableSeries
            {
                DataSeries       = dataSeries,
                BubbleBrushStyle = gradientFill,
                ZScaleFactor     = 3,
                AutoZRange       = false,
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);
                Surface.RenderableSeries.Add(lineSeries);
                Surface.RenderableSeries.Add(bubbleSeries);

                Surface.ChartModifiers = new ChartModifierCollection
                {
                    new RubberBandXyZoomModifier(),
                    new ZoomExtentsModifier(),
                };
            }
        }
Exemple #15
0
        public static void AddIndicator(ChartPaneViewModel paneViewModel, string market, IIndicator indicator, Color color, Timeframe timeframe, IList <Candle> candles, bool showInLegend = true)
        {
            var series           = CreateIndicatorSeries(market, indicator, color, timeframe, candles);
            var renderableSeries = new FastLineRenderableSeries
            {
                AntiAliasing    = false,
                SeriesColor     = color,
                StrokeThickness = 2
            };

            renderableSeries.SetValue(FilteringLegendModifier.IncludeSeriesProperty, showInLegend);

            paneViewModel.ChartSeriesViewModels.Add(new ChartSeriesViewModel(series, renderableSeries));
        }
        private static void OnDataSeriesDependencyPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            var sciChartSurface = d as SciChartSurface;

            if (sciChartSurface == null)
            {
                return;
            }

            if (e.NewValue == null)
            {
                sciChartSurface.RenderableSeries.Clear();
                return;
            }

            using (sciChartSurface.SuspendUpdates())
            {
                sciChartSurface.RenderableSeries.Clear();

                var random       = new Random();
                var itr          = (IEnumerable <IDataSeries>)e.NewValue;
                var renderSeries = new List <IRenderableSeries>();

                var strokeThckness = GetStrokeThickness(sciChartSurface);
                var aa             = GetAntiAliasing(sciChartSurface);

                foreach (var dataSeries in itr)
                {
                    if (dataSeries == null)
                    {
                        continue;
                    }

                    var rgb = new byte[3];
                    random.NextBytes(rgb);
                    var renderableSeries = new FastLineRenderableSeries()
                    {
                        ResamplingMode  = ResamplingMode.MinMax,
                        StrokeThickness = (int)strokeThckness,
                        Stroke          = Color.FromArgb(255, rgb[0], rgb[1], rgb[2]),
                        AntiAliasing    = aa,
                        DataSeries      = dataSeries,
                    };

                    renderSeries.Add(renderableSeries);
                }

                sciChartSurface.RenderableSeries = new ObservableCollection <IRenderableSeries>(renderSeries);
            }
        }
Exemple #17
0
        void bindDataWpf()
        {
            FastLineRenderableSeries series = new FastLineRenderableSeries();

            sciChart.RenderableSeries.Clear();
            sciChart.RenderableSeries.Add(series);
            XyDataSeries <float, double> dataSeries = new XyDataSeries <float, double>();

            series.DataSeries = dataSeries;
            IEnumerable <float>  x = chartSource.Select(i => i.Argument);
            IEnumerable <double> y = chartSource.Select(i => i.Value);

            dataSeries.Append(x, y);
            sciChart.ZoomExtents();
        }
Exemple #18
0
        protected override void InitExample()
        {
            View.FindViewById <Button>(Resource.Id.start).Click += (sender, args) => Start();
            View.FindViewById <Button>(Resource.Id.pause).Click += (sender, args) => Pause();
            View.FindViewById <Button>(Resource.Id.reset).Click += (sender, args) => Reset();

            var xAxis = new NumericAxis(Activity)
            {
                AutoRange = AutoRange.Always
            };
            var yAxis = new NumericAxis(Activity)
            {
                AutoRange = AutoRange.Always
            };

            var rs1 = new FastLineRenderableSeries {
                DataSeries = _mainSeries, StrokeStyle = new SolidPenStyle(0xFF4083B7, 2f.ToDip(Activity))
            };
            var rs2 = new FastLineRenderableSeries {
                DataSeries = _maLowSeries, StrokeStyle = new SolidPenStyle(0xFFFFA500, 2f.ToDip(Activity))
            };
            var rs3 = new FastLineRenderableSeries {
                DataSeries = _maHighSeries, StrokeStyle = new SolidPenStyle(0xFFE13219, 2f.ToDip(Activity))
            };

            _textView = new TextView(Activity);
            _textView.SetPadding(20, 20, 20, 20);
            var annotation = new CustomAnnotation(Activity)
            {
                CoordinateMode = AnnotationCoordinateMode.Relative,
                ZIndex         = -1,
                X1Value        = 0,
                Y1Value        = 0,
            };

            annotation.SetContentView(_textView);

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);
                Surface.RenderableSeries.Add(rs1);
                Surface.RenderableSeries.Add(rs2);
                Surface.RenderableSeries.Add(rs3);
                Surface.Annotations.Add(annotation);
            }
            Start();
        }
Exemple #19
0
        public static void SetChartViewModelIndicatorPaneData(IList <Candle> candles, ChartViewModel cvm, IIndicator indicator)
        {
            indicator.Reset();
            var indicatorDataSeries = new XyDataSeries <DateTime, double>();

            for (var i = 0; i < candles.Count; i++)
            {
                var time = new DateTime(candles[i].CloseTimeTicks, DateTimeKind.Utc).ToLocalTime();

                var v = indicator.Process(candles[i]);
                indicatorDataSeries.Append(time, v.IsFormed ? v.Value : float.NaN);
            }

            indicatorDataSeries.SeriesName = indicator.Name;

            var indicatorPaneVm = cvm.ChartPaneViewModels.Count > 1 ? cvm.ChartPaneViewModels[1] : null;

            if (indicatorPaneVm == null)
            {
                var indicatorPane = new ChartPaneViewModel(cvm, cvm.ViewportManager)
                {
                    IsFirstChartPane    = false,
                    IsLastChartPane     = true,
                    YAxisTextFormatting = "0.0000"
                };

                indicatorPane.ChartSeriesViewModels.Add(new ChartSeriesViewModel(indicatorDataSeries, new FastLineRenderableSeries
                {
                    AntiAliasing    = false,
                    SeriesColor     = Colors.DarkBlue,
                    StrokeThickness = 2
                }));

                cvm.ChartPaneViewModels.Add(indicatorPane);
            }
            else
            {
                indicatorPaneVm.ChartSeriesViewModels.Clear();
                var fastLineRenderableSeries = new FastLineRenderableSeries
                {
                    AntiAliasing    = false,
                    SeriesColor     = Colors.DarkBlue,
                    StrokeThickness = 2
                };

                indicatorPaneVm.ChartSeriesViewModels.Add(new ChartSeriesViewModel(indicatorDataSeries, fastLineRenderableSeries));
            }
        }
Exemple #20
0
        protected override void InitExample()
        {
            View.FindViewById <Button>(Resource.Id.start).Click += (sender, args) => Start();
            View.FindViewById <Button>(Resource.Id.pause).Click += (sender, args) => Pause();
            View.FindViewById <Button>(Resource.Id.reset).Click += (sender, args) => Reset();

            var xAxis = new NumericAxis(Activity)
            {
                AutoRange = AutoRange.Always,
                AxisTitle = "X-Axis"
            };

            var yAxis = new NumericAxis(Activity)
            {
                AutoRange = AutoRange.Always,
                AxisTitle = "Y-Axis"
            };

            var rs1 = new FastLineRenderableSeries
            {
                DataSeries  = _mainSeries,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Argb(0xFF, 0x40, 0x83, 0xB7)).WithThickness(2, ComplexUnitType.Dip).Build()
            };
            var rs2 = new FastLineRenderableSeries
            {
                DataSeries  = _maLowSeries,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Argb(0xFF, 0xFF, 0xA5, 0x00)).WithThickness(2, ComplexUnitType.Dip).Build()
            };
            var rs3 = new FastLineRenderableSeries
            {
                DataSeries  = _maHighSeries,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Argb(0xFF, 0xE1, 0x32, 0x19)).WithThickness(2, ComplexUnitType.Dip).Build()
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);

                Surface.RenderableSeries.Add(rs1);
                Surface.RenderableSeries.Add(rs2);
                Surface.RenderableSeries.Add(rs3);
            }

            Start();
        }
        protected override void InitExample()
        {
            View.FindViewById <Button>(Resource.Id.start).Click += (sender, args) => Start();
            View.FindViewById <Button>(Resource.Id.pause).Click += (sender, args) => Pause();
            View.FindViewById <Button>(Resource.Id.reset).Click += (sender, args) => Reset();

            var xAxis = new NumericAxis(Activity)
            {
                VisibleRange = _xVisibleRange,
                AutoRange    = AutoRange.Never
            };

            var yAxis = new NumericAxis(Activity)
            {
                GrowBy    = new DoubleRange(0.1, 0.1),
                AutoRange = AutoRange.Always
            };

            var rs1 = new FastLineRenderableSeries
            {
                DataSeries  = _ds1,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Argb(0xFF, 0x40, 0x83, 0xB7)).WithThickness(2, ComplexUnitType.Dip).Build()
            };

            var rs2 = new FastLineRenderableSeries
            {
                DataSeries  = _ds2,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Argb(0xFF, 0xFF, 0xA5, 0x00)).WithThickness(2, ComplexUnitType.Dip).Build()
            };

            var rs3 = new FastLineRenderableSeries
            {
                DataSeries  = _ds3,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Argb(0xFF, 0xE1, 0x32, 0x19)).WithThickness(2, ComplexUnitType.Dip).Build()
            };

            Surface.XAxes.Add(xAxis);
            Surface.YAxes.Add(yAxis);
            Surface.RenderableSeries.Add(rs1);
            Surface.RenderableSeries.Add(rs2);
            Surface.RenderableSeries.Add(rs3);

            Start();
        }
Exemple #22
0
        private static ChartSeriesViewModel GenerateSeries(DateTime startDateTime, double koeff, string seriesName)
        {
            var dataSeries = new XyDataSeries <DateTime, double> {
                SeriesName = seriesName
            };
            var dt2 = startDateTime;

            for (int i = 0; i < 10000; i++)
            {
                dataSeries.Append(dt2, Math.Sin(2 * Math.PI * i / 1000 + koeff));
                dt2 += TimeSpan.FromMilliseconds(20);
            }

            var series = new FastLineRenderableSeries {
                DataSeries = dataSeries
            };

            return(new Abt.Controls.SciChart.ChartSeriesViewModel(dataSeries, series));
        }
        private void InitFirstChart()
        {
            WvlLogger.Log(LogType.TraceAll, "InitFirstChart()");

            var xAxis = new NumericAxis(this)
            {
                AutoRange          = AutoRange.Always,
                DrawMajorBands     = false,
                DrawLabels         = false,
                DrawMajorTicks     = false,
                DrawMinorTicks     = false,
                DrawMajorGridLines = false,
                DrawMinorGridLines = false,
                AxisTitle          = "Time (seconds)"
            };

            var yAxis = new NumericAxis(this)
            {
                AutoRange          = AutoRange.Never,
                VisibleRange       = new DoubleRange(short.MinValue, short.MaxValue),
                DrawMajorBands     = false,
                DrawLabels         = false,
                DrawMajorTicks     = false,
                DrawMinorTicks     = false,
                DrawMajorGridLines = false,
                DrawMinorGridLines = false,
                AxisTitle          = "Freq (hZ)"
            };

            samplesDataSeries = new XyDataSeries <int, int> {
                FifoCapacity = new Java.Lang.Integer(500000)
            };
            var rs = new FastLineRenderableSeries {
                DataSeries = samplesDataSeries
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);
                Surface.RenderableSeries.Add(rs);
            }
        }
        private void AddSeriesClick(object sender, RoutedEventArgs e)
        {
            // Create a DataSeries and append some data
            var dataSeries = new XyDataSeries <double, double>();
            var doubleData = DataManager.Instance.GetRandomDoubleSeries(250);

            dataSeries.Append(doubleData.XData, doubleData.YData);

            // Create a RenderableSeries and ensure DataSeries is set
            var renderSeries = new FastLineRenderableSeries
            {
                Stroke          = DataManager.Instance.GetRandomColor(),
                DataSeries      = dataSeries,
                StrokeThickness = 2,
            };

            // Add the new RenderableSeries
            sciChart.RenderableSeries.Add(renderSeries);
            sciChart.ZoomExtents();
        }
Exemple #25
0
        private static ChartSeriesViewModel GenerateDiscreteSeries(DateTime startDateTime, double koeff, string seriesName)
        {
            var dataSeries = new XyDataSeries <DateTime, double> {
                SeriesName = seriesName
            };
            var dt2 = startDateTime;
            var r   = new Random();

            for (int i = 0; i < MaxPoints; i++)
            {
                var val = Math.Sin(2 * Math.PI * i / 1000 + koeff);
                dataSeries.Append(dt2, Math.Round(val > 0?val:0));
                dt2 += TimeSpan.FromMilliseconds(20);
            }

            var series = new FastLineRenderableSeries {
                DataSeries = dataSeries
            };

            return(new ChartSeriesViewModel(dataSeries, series));
        }
        public void SeriesSelectionExampleView_OnLoaded(object sender, RoutedEventArgs e)
        {
            // Create a number of DataSeries of type X=double, Y=double
            var allDataSeries = new IDataSeries <double, double> [SeriesCount];

            var initialColor = Colors.Blue;

            // Suspend visual updates while we add N RenderableSeries
            using (sciChartSurface.SuspendUpdates())
            {
                // Add N data and renderable series
                for (int i = 0; i < SeriesCount; i++)
                {
                    AxisAlignment alignment = i % 2 == 0 ? AxisAlignment.Left : AxisAlignment.Right;

                    allDataSeries[i] = GenerateDataSeries(alignment, i);

                    var renderableSeries = new FastLineRenderableSeries {
                        Stroke = initialColor
                    };

                    renderableSeries.YAxisId = alignment.ToString();

                    // Assign DataSeries to RenderableSeries
                    renderableSeries.DataSeries = allDataSeries[i];

                    // Assign RenderableSeries to SciChartSurface
                    sciChartSurface.RenderableSeries.Add(renderableSeries);

                    // Colors are incremented for visual purposes only
                    int newR = initialColor.R == 255 ? 255 : initialColor.R + 5;
                    int newB = initialColor.B == 0 ? 0 : initialColor.B - 2;
                    initialColor = Color.FromArgb(255, (byte)newR, initialColor.G, (byte)newB);
                }
            }

            sciChartSurface.ZoomExtents();
        }
Exemple #27
0
        protected override void InitExample()
        {
            var fourierSeries = DataManager.Instance.GetFourierSeries(1.0, 0.1);

            var dataSeries = new XyDataSeries <double, double>();

            dataSeries.Append(fourierSeries.XData, fourierSeries.YData);

            var xAxis = new NumericAxis(Activity)
            {
                GrowBy = new DoubleRange(0.1, 0.1)
            };
            var yAxis = new NumericAxis(Activity)
            {
                GrowBy = new DoubleRange(0.1, 0.1)
            };

            var renderableSeries = new FastLineRenderableSeries
            {
                DataSeries  = dataSeries,
                StrokeStyle = new PenStyle.Builder(Activity).WithColor(Color.Rgb(0x27, 0x9B, 0x27)).WithThickness(2f, ComplexUnitType.Dip).Build()
            };

            using (Surface.SuspendUpdates())
            {
                Surface.XAxes.Add(xAxis);
                Surface.YAxes.Add(yAxis);
                Surface.RenderableSeries.Add(renderableSeries);

                Surface.ChartModifiers = new ChartModifierCollection
                {
                    new ZoomPanModifier(),
                    new PinchZoomModifier(),
                    new ZoomExtentsModifier(),
                };
            }
        }
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            // Get our chart from the layout resource,
            var chart = FindViewById <SciChartSurface>(Resource.Id.Chart);

            // Create a numeric X axis
            var xAxis = new NumericAxis(this)
            {
                AxisTitle = "Number of Samples (per Series)"
            };

            // Create a numeric Y axis
            var yAxis = new NumericAxis(this)
            {
                AxisTitle    = "Value",
                VisibleRange = new DoubleRange(-1, 1)
            };

            // Add xAxis to the XAxes collection of the chart
            chart.XAxes.Add(xAxis);

            // Add yAxis to the YAxes collection of the chart
            chart.YAxes.Add(yAxis);

            // Create XyDataSeries to host data for our chart
            var lineData = new XyDataSeries <double, double>()
            {
                SeriesName = "Sin(x)"
            };
            var scatterData = new XyDataSeries <double, double>()
            {
                SeriesName = "Cos(x)"
            };

            // Append data which should be drawn
            for (var i = 0; i < 1000; i++)
            {
                lineData.Append(i, Math.Sin(i * 0.1));
                scatterData.Append(i, Math.Cos(i * 0.1));
            }

            double phase = 0;

            var timer = new Timer(30)
            {
                AutoReset = true
            };
            var lineBuffer    = new DoubleValues(1000);
            var scatterBuffer = new DoubleValues(1000);

            // Update on each tick of timer
            timer.Elapsed += (s, e) =>
            {
                lineBuffer.Clear();
                scatterBuffer.Clear();

                for (int i = 0; i < 1000; i++)
                {
                    lineBuffer.Add(Math.Sin(i * 0.1 + phase));
                    scatterBuffer.Add(Math.Cos(i * 0.1 + phase));
                }

                using (chart.SuspendUpdates())
                {
                    lineData.UpdateRangeYAt(0, lineBuffer);
                    scatterData.UpdateRangeYAt(0, scatterBuffer);
                }

                phase += 0.01;
            };

            timer.Start();

            var lineSeries = new FastLineRenderableSeries()
            {
                DataSeries  = lineData,
                StrokeStyle = new SolidPenStyle(Color.LightBlue, 2)
            };

            // Create scatter series with data appended into scatterData
            var scatterSeries = new XyScatterRenderableSeries()
            {
                DataSeries  = scatterData,
                PointMarker = new EllipsePointMarker()
                {
                    Width       = 10,
                    Height      = 10,
                    StrokeStyle = new SolidPenStyle(Color.Green, 2),
                    FillStyle   = new SolidBrushStyle(Color.LightBlue)
                }
            };

            // Add the renderable series to the RenderableSeries collection of the chart
            chart.RenderableSeries.Add(lineSeries);
            chart.RenderableSeries.Add(scatterSeries);

            // Create interactivity modifiers
            var pinchZoomModifier = new PinchZoomModifier();

            pinchZoomModifier.SetReceiveHandledEvents(true);

            var zoomPanModifier = new ZoomPanModifier();

            zoomPanModifier.SetReceiveHandledEvents(true);

            var zoomExtentsModifier = new ZoomExtentsModifier();

            zoomExtentsModifier.SetReceiveHandledEvents(true);

            var yAxisDragModifier = new YAxisDragModifier();

            yAxisDragModifier.SetReceiveHandledEvents(true);

            // Create and configure legend
            var legendModifier = new LegendModifier(this);

            legendModifier.SetLegendPosition(GravityFlags.Bottom | GravityFlags.CenterHorizontal, 10);
            legendModifier.SetOrientation(Orientation.Horizontal);

            // Create RolloverModifier to show tooltips
            var rolloverModifier = new RolloverModifier();

            rolloverModifier.SetReceiveHandledEvents(true);

            // Create modifier group from declared modifiers
            var modifiers = new ModifierGroup(pinchZoomModifier, zoomPanModifier, zoomExtentsModifier, yAxisDragModifier, rolloverModifier, legendModifier);

            // Add the interactions to the ChartModifiers collection of the chart
            chart.ChartModifiers.Add(modifiers);
        }
Exemple #29
0
 private static void ApplyBindingToNormalLithology(FastLineRenderableSeries actualLithologySeries, FastLineRenderableSeries series)
 {
     var multiBinding = new MultiBinding();
     multiBinding.Converter = new LithologyVisibilityConverter();
     multiBinding.Bindings.Add(new Binding("IsVisible")
     {
         Source = actualLithologySeries,
         Mode = BindingMode.TwoWay,
         UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
     });
     multiBinding.Bindings.Add(new Binding("IsLithologyVisible")
     {
         Source = IoC.Kernel.Get<IGlobalDataModel>().MainViewModel.GeologyMenu,
         Mode = BindingMode.TwoWay,
         UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
     });
     series.SetBinding(FastLineRenderableSeries.IsVisibleProperty, multiBinding);
 }
        private void SciChart_OnLoaded(object sender, RoutedEventArgs e)
        {
            var count            = 50;
            var renderableSeries = new ObservableCollection <IRenderableSeries>();

            sciChart.YAxes.Clear();
            sciChart.XAxes.Clear();

            for (var i = 0; i < count; i++)
            {
                var yAxis = new CustomWaterfallNumericAxis();
                yAxis.offset             = 3.0 * -i;
                yAxis.min                = -60.0;
                yAxis.max                = 60;
                yAxis.Id                 = "AxisY" + i;
                yAxis.AutoRange          = AutoRange.Once;
                yAxis.DrawMinorTicks     = false;
                yAxis.DrawMinorGridLines = false;
                yAxis.DrawMajorGridLines = false;
                yAxis.DrawMajorBands     = false;
                yAxis.DrawMajorTicks     = false;
                yAxis.AxisAlignment      = AxisAlignment.Left;
                yAxis.BorderBrush        = Brushes.Black;
                yAxis.BorderThickness    = new Thickness(0, 0, 1, 0);
                yAxis.Margin             = new Thickness(0, sciChart.ActualHeight * 0.6, 0, 0);

                var xAxis = new CustomWaterfallNumericAxis();
                xAxis.offset             = 2.0 * i;
                xAxis.max                = 10.0;
                xAxis.Id                 = "AxisX" + i;
                xAxis.DrawMinorTicks     = false;
                xAxis.DrawMinorGridLines = false;
                xAxis.DrawMajorGridLines = false;
                xAxis.DrawMajorBands     = false;
                xAxis.DrawMajorTicks     = false;
                xAxis.BorderThickness    = new Thickness(0, 1, 0, 0);
                xAxis.BorderBrush        = Brushes.Black;
                xAxis.Margin             = new Thickness(0, 0, sciChart.ActualWidth * 0.1, 0);

                var series = new FastLineRenderableSeries();
                series.YAxisId         = yAxis.Id;
                series.PaletteProvider = _paletteProvider;
                series.XAxisId         = xAxis.Id;
                series.DataSeries      = UpdateXyDataSeries();
                series.Stroke          = Colors.DarkGreen;
                if (i != 0)
                {
                    xAxis.Visibility = Visibility.Hidden;
                    xAxis.Height     = 0.0;

                    yAxis.Visibility = Visibility.Hidden;
                    yAxis.Width      = 0.0;
                }
                sciChart.YAxes.Add(yAxis);
                sciChart.XAxes.Add(xAxis);

                renderableSeries.Add(series);
            }

            sciChart.RenderableSeries = renderableSeries;
            sciChart.RenderableSeries[25].IsSelected = true;
            sciChart.XAxes[0].VisibleRangeChanged   += OnVisibleRangeChanged;

            OnSeriesSelect();
            OnAxisMarkerAnnotationMove();
        }
        private void UpdateChartData(List <Trade> trades)
        {
            var series = new XyDataSeries <DateTime, double>();

            Task.Run(() =>
            {
                var xvalues = new List <DateTime>();
                var yvalues = new List <double>();

                var startedTrades = trades.Where(t => t.EntryDateTime != null && !t.Ignore).ToList();

                if (startedTrades.Count > 0)
                {
                    var earliest = startedTrades.OrderBy(t => t.EntryDateTime).First().EntryDateTime.Value.Date;
                    var latest   = DateTime.UtcNow;
                    var broker   = _brokerService.GetBroker("FXCM");

                    for (var date = earliest; date <= latest; date = date.AddDays(1))
                    {
                        var balance       = 10000M;
                        var currentTrades = trades.Where(t => t.EntryDateTime <= date).ToList();
                        foreach (var t in currentTrades)
                        {
                            if (date >= t.CloseDateTime)
                            {
                                balance += (decimal)t.Profit.Value;
                            }
                            else
                            {
                                var risk   = t.RiskAmount.Value;
                                var candle =
                                    _brokersCandlesService.GetLastClosedCandle(t.Market, _brokerService.GetBroker(t.Broker), Timeframe.D1, date,
                                                                               false);
                                var price = (decimal)(t.TradeDirection == TradeDirection.Long
                                    ? candle.Value.CloseBid
                                    : candle.Value.CloseAsk);


                                /*var stopDist = t.InitialStop.Value - t.EntryPrice;
                                 * var profit = (((decimal)price - t.EntryPrice.Value) / stopDist) * risk;*/
                                var profit = price * t.EntryQuantity.Value - t.EntryPrice.Value * t.EntryQuantity.Value; //TODO Add commission
                                balance   += (decimal)profit;
                            }
                        }

                        xvalues.Add(date);
                        yvalues.Add((double)balance);
                    }

                    series.Append(xvalues, yvalues);
                }

                _dispatcher.Invoke(() =>
                {
                    var renderableSeries = new FastLineRenderableSeries
                    {
                        DataSeries      = series,
                        StrokeThickness = 2
                    };

                    SeriesList.Add(renderableSeries);
                });
            });
        }
Exemple #32
0
 private static FastLineRenderableSeries GetFullLithologySeries(XyDataSeries<double, double> dataSeries, string imageName, TrackToShow track)
 {
     var marker = new LithologyMarker(imageName)
     {
         Fill = Colors.Red,
         Stroke = Colors.Green
     };
     FastLineRenderableSeries series = new FastLineRenderableSeries
     {
         Tag = imageName,
         DataSeries = dataSeries,
         XAxisId = "Lithology",
         ResamplingMode = ResamplingMode.None,
         PointMarker = marker
     };
     BindingOperations.SetBinding(marker, LithologyMarker.WidthProperty, new Binding("Width")
     {
         Source = track.TrackObject
     });
     return series;
 }
Exemple #33
0
        private static void BindMarkerProperties(FastLineRenderableSeries fastLineSeries, CurveToShow curveToShow)
        {
            var markerStyleBinding = new MultiBinding
            {
                Converter = new MarkerStyleToPointMarkerConverter()
            };

            markerStyleBinding.Bindings.Add(new Binding("DatasetObject.MarkerStyle")
            {
                Source = curveToShow
            });
            markerStyleBinding.Bindings.Add(new Binding("DatasetObject.MarkerSize")
            {
                Source = curveToShow
            });
            markerStyleBinding.Bindings.Add(new Binding("DatasetObject.ShouldApplyBorderColor")
            {
                Source = curveToShow
            });
            markerStyleBinding.Bindings.Add(new Binding("DatasetObject.MarkerColor")
            {
                Source = curveToShow
            });
            fastLineSeries.SetBinding(FastLineRenderableSeries.PointMarkerProperty, markerStyleBinding);
        }
Exemple #34
0
        private void BindCurveProperties(FastLineRenderableSeries fastLineSeries, CurveToShow curveToShow)
        {
            var multiBindingOne = new MultiBinding();
            multiBindingOne.Bindings.Add(new Binding("DatasetObject.LineColor")
                {
                    Source = curveToShow,
                    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
                });
            multiBindingOne.Bindings.Add(new Binding("DatasetObject.LineStyle")
                 {
                     Source = curveToShow,
                     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
                 });
            multiBindingOne.Converter = new ColourToMultiColorConverter();
            fastLineSeries.SetBinding(FastLineRenderableSeries.SeriesColorProperty, multiBindingOne);
            fastLineSeries.SetBinding(FastLineRenderableSeries.XAxisIdProperty, new Binding("CurveObject.ID")
            {
                Source = curveToShow
            });

            var multiBinding = new MultiBinding();
            multiBinding.Bindings.Add(new Binding("DatasetObject.LineGrossor")
            {
                Source = curveToShow,
                Mode = BindingMode.TwoWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
            });
            multiBinding.Bindings.Add(new Binding("DatasetObject.LineStyle")
            {
                Source = curveToShow,
                Mode = BindingMode.TwoWay,
                UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
            });

            multiBinding.Converter = new LineGrossorToDatasetStrokeThicknessConverter();
            fastLineSeries.SetBinding(FastLineRenderableSeries.StrokeThicknessProperty, multiBinding);

            fastLineSeries.SetBinding(FastLineRenderableSeries.StrokeDashArrayProperty, new Binding("DatasetObject.LineStyle")
            {
                Source = curveToShow,
                Converter = new LineStyleToStrokeDashArrayConverter()
            });

            BindMarkerProperties(fastLineSeries, curveToShow);
        }