public MacdPaneViewModel(CreateMultiPaneStockChartsViewModel parentViewModel, PriceSeries prices) : base(parentViewModel) { IEnumerable <MacdPoint> macdPoints = prices.CloseData.Macd(12, 26, 9).ToList(); var histogramDataSeries = new XyDataSeries <DateTime, double>() { SeriesName = "Histogram" }; histogramDataSeries.Append(prices.TimeData, macdPoints.Select(x => x.Divergence)); ChartSeriesViewModels.Add(new ColumnRenderableSeriesViewModel { DataSeries = histogramDataSeries }); var macdDataSeries = new XyyDataSeries <DateTime, double>() { SeriesName = "MACD" }; macdDataSeries.Append(prices.TimeData, macdPoints.Select(x => x.Macd), macdPoints.Select(x => x.Signal)); ChartSeriesViewModels.Add(new BandRenderableSeriesViewModel { DataSeries = macdDataSeries, StrokeThickness = 2, }); YAxisTextFormatting = "0.00"; Height = 100; }
public VolumePaneViewModel(CreateMultiPaneStockChartsViewModel parentViewModel, PriceSeries prices) : base(parentViewModel) { var volumePrices = new XyDataSeries <DateTime, double>() { SeriesName = "Volume" }; volumePrices.Append(prices.TimeData, prices.VolumeData.Select(x => (double)x)); ChartSeriesViewModels.Add(new ColumnRenderableSeriesViewModel { DataSeries = volumePrices }); YAxisTextFormatting = "###E+0"; }
public PricePaneViewModel(CreateMultiPaneStockChartsViewModel parentViewModel, PriceSeries prices) : base(parentViewModel) { // We can add Series via the SeriesSource API, where SciStockChart or SciChartSurface bind to IEnumerable<IChartSeriesViewModel> // Alternatively, you can delcare your RenderableSeries in the SciStockChart and just bind to DataSeries // A third method (which we don't have an example for yet, but you can try out) is to create an Attached Behaviour to transform a collection of IDataSeries into IRenderableSeries // Add the main OHLC chart var stockPrices = new OhlcDataSeries <DateTime, double>() { SeriesName = "OHLC" }; stockPrices.Append(prices.TimeData, prices.OpenData, prices.HighData, prices.LowData, prices.CloseData); ChartSeriesViewModels.Add(new CandlestickRenderableSeriesViewModel { DataSeries = stockPrices, AntiAliasing = false, }); // Add a moving average var maLow = new XyDataSeries <DateTime, double>() { SeriesName = "Low Line" }; maLow.Append(prices.TimeData, prices.CloseData.MovingAverage(50)); ChartSeriesViewModels.Add(new LineRenderableSeriesViewModel { DataSeries = maLow, StyleKey = "LowLineStyle", }); // Add a moving average var maHigh = new XyDataSeries <DateTime, double>() { SeriesName = "High Line" }; maHigh.Append(prices.TimeData, prices.CloseData.MovingAverage(200)); ChartSeriesViewModels.Add(new LineRenderableSeriesViewModel { DataSeries = maHigh, StyleKey = "HighLineStyle", }); YAxisTextFormatting = "$0.0000"; }
public RsiPaneViewModel(CreateMultiPaneStockChartsViewModel parentViewModel, PriceSeries prices) : base(parentViewModel) { var rsiSeries = new XyDataSeries <DateTime, double>() { SeriesName = "RSI" }; rsiSeries.Append(prices.TimeData, prices.Rsi(14)); ChartSeriesViewModels.Add(new LineRenderableSeriesViewModel { DataSeries = rsiSeries }); YAxisTextFormatting = "0.0"; Height = 100; }