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;
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 4
0
        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));
            }
        }
Exemplo n.º 8
0
        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));
            });
        }
Exemplo n.º 9
0
        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));
            });
        }
Exemplo n.º 11
0
        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);
            }
        }
Exemplo n.º 12
0
        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();
        }
Exemplo n.º 13
0
        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;
            }
        }