public async Task <IEnumerable <CandleModel> > GetCandlesAsync(string tradingPair, CandlePeriod candlePeriod, long start, long?end)
        {
            using (var client = GetClient())
            {
                client.DefaultRequestHeaders.Add("API-Key", _krakenOptions.ApiKey);

                var endPointUrl = $"/0/public/OHLC?pair={tradingPair}&interval={(int) candlePeriod}&since={start}";

                using (var response = await client.GetAsync(endPointUrl))
                {
                    if (!response.IsSuccessStatusCode)
                    {
                        throw new Exception($"Response code: {response.StatusCode}");
                    }

                    var resultResponseContent = await response.Content.ReadAsStringAsync();

                    var obj = (JObject)JsonConvert.DeserializeObject(resultResponseContent);
                    var err = (JArray)obj["error"];
                    if (err.Count != 0)
                    {
                        throw new Exception(err[0].ToString());
                    }

                    var result = obj["result"].Value <JObject>();

                    var krakenResult = new KrakenResult
                    {
                        Candles = new Dictionary <string, List <KrakenCandle> >()
                    };

                    foreach (var o in result)
                    {
                        if (o.Key == "last")
                        {
                            krakenResult.Last = o.Value.Value <long>();
                        }
                        else
                        {
                            var ohlc = o.Value.ToObject <decimal[][]>()
                                       .Select(v => new KrakenCandle
                            {
                                Date  = (long)v[0],
                                Open  = v[1],
                                High  = v[2],
                                Low   = v[3],
                                Close = v[4],
                                VolumeWeightedPrice = v[5],
                                Volume       = v[6],
                                TradingCount = (int)v[7]
                            })
                                       .ToList();
                            krakenResult.Candles.Add(o.Key, ohlc);
                        }
                    }

                    return(Mapper.Map <IEnumerable <CandleModel> >(krakenResult.Candles[tradingPair]));
                }
            }
        }
Exemplo n.º 2
0
        public string SerializeExpected <T>(T data)
        {
            var result = new KrakenResult <T>()
            {
                Result = data,
                Error  = new string[] {}
            };

            return(JsonConvert.SerializeObject(result));
        }
Exemplo n.º 3
0
        private void MapKrakenOnlyProperties(KrakenComputingResult result, KrakenResult krakenResult)
        {
            result.GroupSpeed.AddRange(krakenResult.GroupSpeed);
            result.PhaseSpeed.AddRange(krakenResult.PhaseSpeed);
            result.K.AddRange(krakenResult.K);
            result.ModesCount = krakenResult.ModesCount;
            result.Modes.AddRange(krakenResult.Modes);
            result.ZM.AddRange(krakenResult.ZM);

            result.Warnings.AddRange(krakenResult.Warnings);

            result.GroupSpeed.RemoveAt(0);
            result.PhaseSpeed.RemoveAt(0);
            result.K.RemoveAt(0);
            result.ZM.RemoveAt(0);

            result.Modes.RemoveAt(0);
            foreach (var modes in result.Modes)
            {
                modes.RemoveAt(0);
            }
        }
Exemplo n.º 4
0
        public KrakenResult GetKrakenResult()
        {
            var data = new KrakenResult();

            data.ModesCount = 44;
            data.GroupSpeed.AddRange(Enumerable.Repeat(0d, 45));
            data.PhaseSpeed.AddRange(Enumerable.Repeat(0d, 45));
            data.K.AddRange(Enumerable.Repeat(new Complex(), 45));
            data.Modes.AddRange(new List <List <double> > {
                new List <double> {
                    0
                },
                new List <double> {
                    0
                }
            });
            data.ZM.AddRange(new List <double> {
                0, 0, 0
            });

            return(data);
        }