private async void CreateChart() { var pair = (Сurrency.SelectedItem as ComboBoxItem).Content.ToString(); if (string.IsNullOrEmpty(Interval.Text)) { return; } var interval = Convert.ToInt32(Interval.Text); if (string.IsNullOrEmpty(pair) || interval < 1) { return; } var result = new OHLCResult(); var endTime = DatePickerEnd.SelectedDate.Value.Millisecond; if (!Enum.IsDefined(typeof(Minutes), interval)) { result = await KrakenManager.GetOHLC(pair, 1, endTime); result.Pairs[pair] = Helper.CompressDate(result.Pairs[pair], interval); } else { result = await KrakenManager.GetOHLC(pair, interval, endTime); } var chart = new Chart(result, pair, endTime: endTime); AddChartToForm(chart); }
public Chart(OHLCResult result, string pair, int beginTime = 0, int endTime = 0) { Model = CreatePlotModel(result, pair); Pair = pair; OHLCResult = result; OHLCListBeginer = result.Pairs[pair]; EndTime = endTime; BeginTime = beginTime; }
public async Task <OHLCResult> GetOHLC(string pair, int interval = 1, long since = 0) { var param = new Dictionary <string, string>(); param.Add("pair", pair); param.Add("since", since.ToString()); param.Add("interval", interval.ToString()); var res = await QueryPublic("OHLC", param); JObject obj = (JObject)JsonConvert.DeserializeObject(res); JArray err = (JArray)obj["error"]; if (err.Count != 0) { throw new KrakenException(err[0].ToString(), JsonConvert.DeserializeObject <ResponseBase>(res)); } JObject result = obj["result"].Value <JObject>(); var ret = new OHLCResult(); ret.Pairs = new Dictionary <string, List <OHLC> >(); foreach (var o in result) { if (o.Key == "last") { ret.Last = o.Value.Value <long>(); } else { var ohlc = new List <OHLC>(); foreach (var v in o.Value.ToObject <decimal[][]>()) { ohlc.Add(new OHLC() { Time = (int)v[0], Open = v[1], High = v[2], Low = v[3], Close = v[4], Vwap = v[5], Volume = v[6], Count = (int)v[7] }); } ret.Pairs.Add(o.Key, ohlc); } } return(ret); }
private PlotModel CreatePlotModel(OHLCResult result, string pair) { var tmpModel = new PlotModel { Title = "Chart", Subtitle = pair }; //tmpModel.ZoomAllAxes(0); DateTimeAxis timeSPanAxis1 = new DateTimeAxis() { Position = AxisPosition.Bottom, MinorIntervalType = DateTimeIntervalType.Auto, MajorGridlineStyle = LineStyle.Dot, MinorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColor.FromRgb(44, 44, 44), TicklineColor = OxyColor.FromRgb(82, 82, 82) }; tmpModel.Axes.Add(timeSPanAxis1); LinearAxis YAxisRight = new LinearAxis() { Position = AxisPosition.Right, Minimum = GetMinValueY(result, pair), Maximum = GetMaxValueY(result, pair), StartPosition = 0, Selectable = true, MajorGridlineStyle = LineStyle.Dot, MinorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColor.FromRgb(44, 44, 44), TicklineColor = OxyColor.FromRgb(82, 82, 82) }; LinearAxis XAxisBottom = new LinearAxis() { Position = AxisPosition.Bottom, StartPosition = 0, MajorGridlineStyle = LineStyle.Dot, MinorGridlineStyle = LineStyle.Dot, MajorGridlineColor = OxyColor.FromRgb(44, 44, 44), TicklineColor = OxyColor.FromRgb(82, 82, 82) }; tmpModel.Axes.Add(YAxisRight); tmpModel.Axes.Add(XAxisBottom); CandleStickSeries candle = new CandleStickSeries() { Color = OxyColors.Black, IncreasingColor = OxyColor.FromRgb(0, 197, 49), DecreasingColor = OxyColor.FromRgb(255, 95, 95), DataFieldX = "Time", DataFieldHigh = "H", DataFieldLow = "L", DataFieldClose = "C", DataFieldOpen = "O", TrackerFormatString = "Date: {2}\nOpen: {5:0.00000}\nHigh: {3:0.00000}\nLow: {4:0.00000}\nClose: {6:0.00000}", }; var points = new LineSeries { Title = "Series 1", MarkerType = MarkerType.Circle }; candle.AddToHighLowSeries(result.Pairs[pair]); //candle.Tag = result.Pairs[pair]; // tmp.Series.Add(points); tmpModel.Series.Add(candle); return(tmpModel); }
private double GetMinValueX(OHLCResult result, string pair) { return((double)result.Pairs[pair].First().Time); }
private double GetMinValueY(OHLCResult result, string pair) { return((double)result.Pairs[pair].Min(m => m.Low)); }