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(); }
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); } }
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(); } }); }
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); } }
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; } }
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)); }
public PointsSeriesAndAdditionalData(ChartSeriesViewModel seriesViewModel, SeriesAdditionalData additionalData, XyDataSeries <DateTime, double> dataSeries, FastLineRenderableSeries renderSeries) { SeriesVm = seriesViewModel; Metadata = additionalData; DataSeries = dataSeries; RenderSeries = renderSeries; }
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); } }
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(); } }
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(), }; } }
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); } }
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(); }
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(); }
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)); } }
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(); }
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(); }
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(); }
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); }
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); }); }); }
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; }
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); }
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); }