public CustomPointMarker() { InitializeComponent(); var count = 100; // Create a DataSeriesSet var dataSeries = new XyDataSeries <double, double>(); // Create a single data-series _dataSource = new RandomWalkGenerator(); var data = _dataSource.GetRandomWalkSeries(count); // Create a single metadata IList <IPointMetadata> metadata = new List <IPointMetadata>(); for (int i = 0; i < 100; ++i) { IPointMetadata pointMetadata = new SelectedPointMetadata(); if (i % 9 == 0) { pointMetadata.IsSelected = true; } metadata.Add(pointMetadata); } // Append data to series. dataSeries.Append(data.XData, data.YData, metadata); fastLineSeries.DataSeries = dataSeries; }
public void Execute(TestParameters testParameters, TimeSpan duration, Action <double> fpsResult) { int pointCount = testParameters.PointCount; int seriesCount = testParameters.PointCount; DataSeries = null; // Generate Data and mark time XyData[] xyData = new XyData[seriesCount]; var random = new Random(); for (int i = 0; i < seriesCount; i++) { var generator = new RandomWalkGenerator(random.Next(0, int.MaxValue)); xyData[i] = generator.GetRandomWalkSeries(pointCount); } // Append to SciChartSurface var allDataSeries = new IDataSeries[seriesCount]; for (int i = 0; i < seriesCount; i++) { var dataSeries = new XyDataSeries <double, double>(); dataSeries.Append(xyData[i].XData, xyData[i].YData); allDataSeries[i] = dataSeries; } DataSeries = allDataSeries; // Run test (just refresh) _testRunner = new DispatcherTimerRunner(duration, () => this.sciChart.InvalidateElement(), fpsResult); sciChart.Rendered += _testRunner.OnSciChartRendered; _testRunner.Run(); }
// Create a table of Variance data. Each row in the table consists of // // DateTime, Actual (Y-Value), Projected Min, Variance 1, 2, 3, 4 and Projected Maximum // // DateTime Actual Min Var1 Var2 Var3 Var4 Max // Jan-11 y0 - - - - - - // Feb-11 y1 - - - - - - // Mar-11 y2 - - - - - - // Apr-11 y3 - - - - - - // May-11 y4 - - - - - - // Jun-11 y5 min0 var1_0 var2_0 var3_0 var4_0 max_0 // Jul-11 y6 min1 var1_1 var2_1 var3_1 var4_1 max_1 // Aug-11 y7 min2 var1_2 var2_2 var3_2 var4_2 max_2 // Dec-11 y8 min3 var1_3 var2_3 var3_3 var4_3 max_3 // Jan-12 y9 min4 var1_4 var2_4 var3_4 var4_4 max_4 private IEnumerable <VarPoint> GetVarianceData() { var dates = Enumerable.Range(0, 10).Select(i => new DateTime(2011, 01, 01).AddMonths(i)).ToArray(); var yValues = new RandomWalkGenerator().GetRandomWalkSeries(10).YData; for (int i = 0; i < 10; i++) { double varMax = double.NaN; double var4 = double.NaN; double var3 = double.NaN; double var2 = double.NaN; double var1 = double.NaN; double varMin = double.NaN; if (i > 4) { varMax = yValues[i] + (i - 5) * 0.3; var4 = yValues[i] + (i - 5) * 0.2; var3 = yValues[i] + (i - 5) * 0.1; var2 = yValues[i] - (i - 5) * 0.1; var1 = yValues[i] - (i - 5) * 0.2; varMin = yValues[i] - (i - 5) * 0.3; } yield return(new VarPoint(dates[i], yValues[i], var4, var3, var2, var1, varMin, varMax)); } }
public MainViewModel() { var ds0 = new XyDataSeries <double, double>(); var someData = new RandomWalkGenerator().GetRandomWalkSeries(200); // RandomWalkGenerator is found in the examples source code ds0.Append(someData.XData, someData.YData); // With SeriesSource API you do not need a DataSet. This is created automatically to match // the type of DataSeries<Tx,Ty>. All DataSeries must be the same type however // Create a list of ChartSeriesViewModel which unify dataseries and render series // This way you can add/remove your series and change the render series type easily // without worrying about DataSeriesIndex as per SciChart v1.3 _chartSeries = new ObservableCollection <IChartSeriesViewModel>(); _chartSeries.Add(new ChartSeriesViewModel(ds0, new FastLineRenderableSeries())); // Now create the labels _chartLabels = new[] { new LabelViewModel(5, -2.5, "Label0", "Label0 Tooltip!"), new LabelViewModel(20, -2, "Label1", "Label1 Tooltip!"), new LabelViewModel(35, 3, "Label2", "Label2 Tooltip!"), new LabelViewModel(50, 1.5, "Label3", "Label3 Tooltip!"), new LabelViewModel(65, -0.5, "Label4", "Label4 Tooltip!"), }; }
public CustomModifierSandboxViewModel() { // Generate some data var r = new RandomWalkGenerator(); var data = r.GetRandomWalkSeries(500); _bidDataSeries.Append(data.XData.Select(x => DateTime.Today.AddDays(x)), data.YData); r = new RandomWalkGenerator(); data = r.GetRandomWalkSeries(500); _offerDataSeries.Append(data.XData.Select(x => DateTime.Today.AddDays(x)), data.YData); }
public BindToDataSeriesSetViewModel() { ViewportManager = new DefaultViewportManager(); // Create a DataSeriesSet _dataSeries0 = new XyDataSeries <double, double>(); // Create a single data-series _dataSource = new RandomWalkGenerator(); var data = _dataSource.GetRandomWalkSeries(1000); // Append data to series. _dataSeries0.Append(data.XData, data.YData); }
private IEnumerable <BoxPoint> GetBoxPlotData() { var dates = Enumerable.Range(0, PointsCount).Select(i => i).ToArray(); var medianValues = new RandomWalkGenerator().GetRandomWalkSeries(PointsCount).YData; var random = new FasterRandom(); for (int i = 0; i < PointsCount; i++) { double med = medianValues[i]; double min = med - random.NextDouble(); double max = med + random.NextDouble(); double lower = (med - min) * random.NextDouble() + min; double upper = (max - med) * random.NextDouble() + med; yield return(new BoxPoint(dates[i], min, lower, med, upper, max)); } }
private void OnRunExample() { Task.Factory.StartNew(() => { DataSeries = null; // Generate Data and mark time var dataSeries = new XyDataSeries <double, double>(); var stopwatch = Stopwatch.StartNew(); var xyData = new RandomWalkGenerator(0.0d).GetRandomWalkSeries(Count); stopwatch.Stop(); // Append to SciChartSurface and mark time stopwatch = Stopwatch.StartNew(); dataSeries.Append(xyData.XData, xyData.YData); DataSeries = dataSeries; stopwatch.Stop(); // Zoom viewport to extents ViewportManager.AnimateZoomExtents(TimeSpan.FromMilliseconds(500)); }); }
private void Initialize() { RenderableSeriesViewModels = new ObservableCollection <IRenderableSeriesViewModel>(); var random = new Random(); var generator = new RandomWalkGenerator(); for (int i = 0; i < SeriesCount; i++) { var dataSeries = new XyDataSeries <double, double>(); var someData = generator.GetRandomWalkSeries(PointCount); generator.Reset(); dataSeries.Append(someData.XData, someData.YData); var rgb = new byte[3]; random.NextBytes(rgb); RenderableSeriesViewModels.Add(new LineRenderableSeriesViewModel { DataSeries = dataSeries, AntiAliasing = false, Stroke = Color.FromArgb(255, rgb[0], rgb[1], rgb[2]), }); } }
private void OnRunExample() { Task.Factory.StartNew(() => { DataSeries = null; IsBusy = true; var stopwatch = Stopwatch.StartNew(); // Generate Data and mark time DoubleSeries[] xyData = new DoubleSeries[SeriesCount]; var generator = new RandomWalkGenerator(0d); for (int i = 0; i < SeriesCount; i++) { xyData[i] = generator.GetRandomWalkSeries(PointCount); generator.Reset(); } stopwatch.Stop(); IsBusy = false; // Append to SciChartSurface and mark time stopwatch = Stopwatch.StartNew(); var allDataSeries = new IDataSeries[SeriesCount]; for (int i = 0; i < SeriesCount; i++) { var dataSeries = new XyDataSeries <double, double>(); dataSeries.Append(xyData[i].XData, xyData[i].YData); allDataSeries[i] = dataSeries; } DataSeries = allDataSeries; stopwatch.Stop(); ViewportManager.AnimateZoomExtents(TimeSpan.FromMilliseconds(500)); }); }
public void LoadRandomData(int candlesCount, int ticksPerCandle) { _ticksPerCandle = ticksPerCandle; _data = null; var dataSource = new RandomWalkGenerator(); var ticksCount = (candlesCount + 1) * ticksPerCandle; _data = dataSource.GetRandomWalkSeries(ticksCount).YData.ToArray(); _index = 0; //var baseDate = DateTime.Now; for (int j = 0; j < candlesCount; j++) { var date = _baseTime.AddMinutes(j * 30); var volume = _random.Next(100); var bidOrAsk = _random.Next(2) == 0 ? BidOrAsk.Bid : BidOrAsk.Ask; var cumulativeVolume = default(double); var metaData = new CandlestickMetaData(); metaData.AddTick(new CandleTick { BidOrAsk = bidOrAsk, Price = _data[_index], Volume = volume, TimeStamp = date }); cumulativeVolume += bidOrAsk.Equals(BidOrAsk.Ask) ? volume : -volume; var high = cumulativeVolume > 0 ? cumulativeVolume : 0; var low = cumulativeVolume < 0 ? cumulativeVolume : 0; _dataSeries1.Append(date, cumulativeVolume, high, low, cumulativeVolume); _dataSeries0.Append(date, _data[_index], _data[_index], _data[_index], _data[_index], metaData); _candleCount = _dataSeries0.Count; for (int i = 0; i < ticksPerCandle; i++) { _index++; volume = _random.Next(100); bidOrAsk = _random.Next(2) == 0 ? BidOrAsk.Bid : BidOrAsk.Ask; //date = date; var newTick = _data[_index]; var open = _dataSeries0.OpenValues[_candleCount - 1]; high = _dataSeries0.HighValues[_candleCount - 1]; high = high > newTick ? high : newTick; low = _dataSeries0.LowValues[_candleCount - 1]; low = low < newTick ? low : newTick; var meta = (CandlestickMetaData)_dataSeries0.Metadata[_candleCount - 1]; meta.AddTick(new CandleTick { BidOrAsk = bidOrAsk, Price = newTick, Volume = volume, TimeStamp = date }); _dataSeries0.Update(_candleCount - 1, open, high, low, newTick); cumulativeVolume += bidOrAsk.Equals(BidOrAsk.Ask) ? volume : -volume; open = _dataSeries1.OpenValues[_candleCount - 1]; high = _dataSeries1.HighValues[_candleCount - 1]; high = high > cumulativeVolume ? high : cumulativeVolume; low = _dataSeries1.LowValues[_candleCount - 1]; low = low < cumulativeVolume ? low : cumulativeVolume; _dataSeries1.Update(_candleCount - 1, open, high, low, cumulativeVolume); } _filterDataSeries.Append(date, _movingAverage.Push(cumulativeVolume).Current); } }
public void Execute(TestParameters testParameters, TimeSpan duration, Action <double> fpsResult) { int pointCount = testParameters.PointCount; int seriesCount = testParameters.PointCount; DataSeries = null; using (sciChart.SuspendUpdates()) { // Generate Data and mark time XyData[] xyData = new XyData[seriesCount]; var random = new Random(); for (int i = 0; i < seriesCount; i++) { var generator = new RandomWalkGenerator(random.Next(0, int.MaxValue)); xyData[i] = generator.GetRandomWalkSeries(pointCount); } // Append to SciChartSurface var allDataSeries = new IDataSeries[seriesCount]; for (int i = 0; i < seriesCount; i++) { var dataSeries = new XyDataSeries <double, double>() { DataDistributionCalculator = d }; dataSeries.Append(xyData[i].XData, xyData[i].YData); allDataSeries[i] = dataSeries; } DataSeries = allDataSeries; LineSeriesSource.SetStrokeThickness(sciChart, testParameters.StrokeThickness); LineSeriesSource.SetAntiAliasing(sciChart, testParameters.AntiAliasing); LineSeriesSource.SetDataSeries(sciChart, allDataSeries); sciChart.ZoomExtents(); // Run test (just refresh) //int inc = 1; } System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); sw.Restart(); if (testParameters.TestRunner == TestRunnerType.Composition) { _testRunner = new CompositionTestRunner(duration, () => { // Make small changes to the YAxis Visible Range to trigger an update and cause some rescaling //var currentRange = this.sciChart.YAxis.VisibleRange.AsDoubleRange(); double dY = (double)sw.ElapsedMilliseconds / 1000.0; this.sciChart.YAxis.VisibleRange = new DoubleRange(-40 - dY, 40 + dY); //this.sciChart.YAxis.VisibleRange.SetMinMax(-1 - dY, 1 + dY); //inc = -inc; }, fpsResult); } else { _testRunner = new DispatcherTimerRunner(duration, () => { // Make small changes to the YAxis Visible Range to trigger an update and cause some rescaling //var currentRange = this.sciChart.YAxis.VisibleRange.AsDoubleRange(); //this.sciChart.YAxis.VisibleRange = new DoubleRange(currentRange.Min - RangeIncrement, currentRange.Max + RangeIncrement); //If not setting large scale enough, SciChart crashes randomly. (-30 ... 30) is not enough double dY = (double)sw.ElapsedMilliseconds / 1000.0; this.sciChart.YAxis.VisibleRange = new DoubleRange(-40 - dY, 40 + dY); //inc = -inc; }, fpsResult); } sciChart.Rendered += _testRunner.OnSciChartRendered; _testRunner.Run(); }
private void _generateTerrain() { try { IGenerator generator = null; switch (_configurationManager.Algorithm) { case GeneratorAlgorithm.PerlinNoise: generator = new PerlinNoiseGenerator(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.Hill: generator = new HillAlgorithmGenerator(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.Random: generator = new RandomGenerator(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.Rectangle: generator = new RectangleGenerator(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.Voronoi: generator = new VoronoiGenerator(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.SimplexNoise: generator = new SimplexNoise(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.DiamondSquare: generator = new DiamondSquareGenerator(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.RandomWalk: generator = new RandomWalkGenerator(GraphicsDevice, Graphics, _configurationManager.Parameters); break; case GeneratorAlgorithm.DrunkardWalk: generator = new DrunkardWalk(GraphicsDevice, Graphics, _configurationManager.Parameters); break; default: throw new NotImplementedException("Unknown algorithm"); } if (generator == null) { throw new NullReferenceException("Generator cannot be null"); } var timeStart = System.DateTime.Now; Scene.AddObjectToRender(generator.Generate()); Logger.Log.Info("Generated time = " + (DateTime.Now - timeStart).TotalMilliseconds + " ms for " + _configurationManager.Algorithm.ToString()); } catch (Exception e) { Logger.Log.Error(e); throw; } }