public PricePaneModel(Context context, PriceSeries prices) : base(context, PRICES, "$0.0000", true) { var stockPrices = new OhlcDataSeries <DateTime, double> { SeriesName = "EUR/USD" }; stockPrices.Append(prices.TimeData, prices.OpenData, prices.HighData, prices.LowData, prices.CloseData); AddRenderableSeries(new FastCandlestickRenderableSeries { DataSeries = stockPrices, YAxisId = PRICES }); var maLow = new XyDataSeries <DateTime, double> { SeriesName = "Low Line" }; maLow.Append(prices.TimeData, prices.CloseData.MovingAverage(50)); AddRenderableSeries(new FastLineRenderableSeries { DataSeries = maLow, StrokeStyle = new SolidPenStyle(0xFFFF3333, 1f.ToDip(context)), YAxisId = PRICES }); var maHigh = new XyDataSeries <DateTime, double> { SeriesName = "High Line" }; maHigh.Append(prices.TimeData, prices.CloseData.MovingAverage(200)); AddRenderableSeries(new FastLineRenderableSeries { DataSeries = maHigh, StrokeStyle = new SolidPenStyle(0xFF33DD33, 1f.ToDip(context)), YAxisId = PRICES }); var priceMarker = new AxisMarkerAnnotation(context) { Y1 = (Java.Lang.IComparable)stockPrices.YValues.Get(stockPrices.Count - 1), YAxisId = PRICES }; priceMarker.SetBackgroundColor(0xFFFF3333.ToColor()); var maLowMarker = new AxisMarkerAnnotation(context) { Y1 = (Java.Lang.IComparable)maLow.YValues.Get(maLow.Count - 1), YAxisId = PRICES }; maLowMarker.SetBackgroundColor(0xFFFF3333.ToColor()); var maHighMarker = new AxisMarkerAnnotation(context) { Y1 = (Java.Lang.IComparable)maHigh.YValues.Get(maHigh.Count - 1), YAxisId = PRICES }; maHighMarker.SetBackgroundColor(0xFF33DD33.ToColor()); Annotations.Add(priceMarker); Annotations.Add(maLowMarker); Annotations.Add(maHighMarker); }
private void CreateMainPriceChart() { // Create an XAxis and YAxis for our chart var xAxis = new CategoryDateAxis(Activity) { BarTimeFrame = TimeSpan.FromMinutes(5).TotalSeconds, DrawMajorGridLines = false, GrowBy = new DoubleRange(0, 0.1) }; var yAxis = new NumericAxis(Activity) { AutoRange = AutoRange.Always }; // Create RenderableSeries to render the data var ohlcSeries = new FastOhlcRenderableSeries { DataSeries = _ohlcDataSeries, StrokeUpStyle = new SolidPenStyle(StrokeUpColor, StrokeThickness.ToDip(Activity)), StrokeDownStyle = new SolidPenStyle(StrokeDownColor, StrokeThickness.ToDip(Activity)), }; var movingAverage50Series = new FastLineRenderableSeries { DataSeries = _xyDataSeries, StrokeStyle = new SolidPenStyle(0xFFFF6600, 1.0f) }; // Create axis markers annotations to show the last values on real-time chart _smaAxisMarker = new AxisMarkerAnnotation(Activity) { Y1Value = 0d }; _smaAxisMarker.SetBackgroundColor(SmaSeriesColor.ToColor()); _ohlcAxisMarker = new AxisMarkerAnnotation(Activity) { Y1Value = 0d }; _ohlcAxisMarker.SetBackgroundColor(StrokeUpColor.ToColor()); // Populate the chart with Axis, RenderableSeries. The chart automatically updates when any property changes using (MainSurface.SuspendUpdates()) { MainSurface.XAxes.Add(xAxis); MainSurface.YAxes.Add(yAxis); MainSurface.RenderableSeries.Add(ohlcSeries); MainSurface.RenderableSeries.Add(movingAverage50Series); MainSurface.Annotations.Add(_ohlcAxisMarker); MainSurface.Annotations.Add(_smaAxisMarker); // Populate some pinch and touch interactions. Pinch to zoom, drag to pan and double-tap to zoom extents MainSurface.ChartModifiers = new ChartModifierCollection { new XAxisDragModifier(), new ZoomPanModifier { Direction = Direction2D.XDirection }.WithReceiveHandledEvents(true), new ZoomExtentsModifier(), new LegendModifier(Activity).WithOrientation(Orientation.Horizontal).WithPosition(GravityFlags.CenterHorizontal | GravityFlags.Bottom, 20).WithReceiveHandledEvents(true), }; } }