public static void SetChartViewModelPriceData(IList <Candle> candles, ChartViewModel cvm) { var priceDataSeries = new OhlcDataSeries <DateTime, double>(); var xvalues = new List <DateTime>(); var openValues = new List <double>(); var highValues = new List <double>(); var lowValues = new List <double>(); var closeValues = new List <double>(); var atr = new AverageTrueRange(); for (var i = 0; i < candles.Count; i++) { var time = new DateTime(candles[i].CloseTimeTicks, DateTimeKind.Utc).ToLocalTime(); xvalues.Add(time); openValues.Add((double)candles[i].OpenBid); highValues.Add((double)candles[i].HighBid); lowValues.Add((double)candles[i].LowBid); closeValues.Add((double)candles[i].CloseBid); } priceDataSeries.Append(xvalues, openValues, highValues, lowValues, closeValues); priceDataSeries.SeriesName = "Price"; var pricePaneVm = cvm.ChartPaneViewModels.Count > 0 ? cvm.ChartPaneViewModels[0] : null; var atrPaneVm = cvm.ChartPaneViewModels.Count > 1 ? cvm.ChartPaneViewModels[1] : null; if (pricePaneVm == null) { pricePaneVm = new ChartPaneViewModel(cvm, cvm.ViewportManager) { IsFirstChartPane = true, IsLastChartPane = false }; var series = new FastCandlestickRenderableSeries { AntiAliasing = false }; series.SetValue(FilteringLegendModifier.IncludeSeriesProperty, false); series.SeriesColor = Colors.DarkBlue; pricePaneVm.ChartSeriesViewModels.Add(new ChartSeriesViewModel(priceDataSeries, series)); cvm.ChartPaneViewModels.Add(pricePaneVm); } else { pricePaneVm.ChartSeriesViewModels.Clear(); var renderableSeries = new FastCandlestickRenderableSeries { AntiAliasing = false }; renderableSeries.SetValue(FilteringLegendModifier.IncludeSeriesProperty, false); pricePaneVm.ChartSeriesViewModels.Add(new ChartSeriesViewModel(priceDataSeries, renderableSeries)); } }
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)); }
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)); } }