public async Task GetCandlesHistory_EmptyResponse_ReturnsEmptyArray() { const int fromSeconds = 1549490400; const int toSeconds = 1549494000; _fakeHttpMessageHandler.HandleRequestAsync = TestHelper.HandleQueryString(form => { Assert.Equal("BTC_USDT", form["symbol"]); Assert.Equal("1", form["resolution"]); Assert.Equal(fromSeconds.ToString(CultureInfo.InvariantCulture), form["from"]); Assert.Equal(toSeconds.ToString(CultureInfo.InvariantCulture), form["to"]); }); _fakeHttpMessageHandler.ResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("{\"s\":\"no_data\",\"nextTime\":1549488540}") }; var request = new CandlesHistoryRequest { Pair = "BTC_USDT", Resolution = Resolution.Minute, From = DateTimeOffset.FromUnixTimeSeconds(fromSeconds), To = DateTimeOffset.FromUnixTimeSeconds(toSeconds), }; var candles = await _publicApi.GetCandlesHistoryAsync(request); Assert.Empty(candles); }
public async Task <Candle[]> GetCandlesHistoryAsync(CandlesHistoryRequest request, CancellationToken cancellationToken = default) { var jsonToken = await _client.GetAsync <JToken>("candles_history", request, cancellationToken); _candleHistoryErrorHandler.HandleResponse(jsonToken); var errorToken = ((JObject)jsonToken).GetValue("s", StringComparison.OrdinalIgnoreCase); if (errorToken?.Type == JTokenType.String && string.Equals(errorToken.Value <string>(), "no_data", StringComparison.OrdinalIgnoreCase)) { return(Array.Empty <Candle>()); } var result = jsonToken.ToObject <CandlesHistory>(JsonHelper.Serializer); return(result.Candles); }
public async Task GetCandlesHistory() { const int fromSeconds = 1587844151; const int toSeconds = 1587844532; _fakeHttpMessageHandler.HandleRequestAsync = TestHelper.HandleQueryString(form => { Assert.Equal("BTC_USD", form["symbol"]); Assert.Equal("5", form["resolution"]); Assert.Equal(fromSeconds.ToString(CultureInfo.InvariantCulture), form["from"]); Assert.Equal(toSeconds.ToString(CultureInfo.InvariantCulture), form["to"]); }); _fakeHttpMessageHandler.ResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent("{\"candles\":[{\"t\":1587844200000,\"o\":7546.6259,\"c\":7540.4937,\"h\":7546.6259,\"l\":7539.06212565,\"v\":0.46677045000000006},{\"t\":1587844500000,\"o\":7543.4013,\"c\":7543.3275,\"h\":7545,\"l\":7539.53903772,\"v\":0.65390688}]}") }; var request = new CandlesHistoryRequest { Pair = "BTC_USD", Resolution = Resolution.Minute5, From = DateTimeOffset.FromUnixTimeSeconds(fromSeconds), To = DateTimeOffset.FromUnixTimeSeconds(toSeconds), }; var candles = await _publicApi.GetCandlesHistoryAsync(request); Assert.Equal(2, candles.Length); Assert.Equal(1587844200000, candles[0].Time.ToUnixTimeMilliseconds()); Assert.Equal(7546.6259m, candles[0].Open); Assert.Equal(7540.4937m, candles[0].Close); Assert.Equal(7546.6259m, candles[0].High); Assert.Equal(7539.06212565m, candles[0].Low); Assert.Equal(0.46677045000000006m, candles[0].Volume); Assert.Equal(1587844500000, candles[1].Time.ToUnixTimeMilliseconds()); Assert.Equal(7543.4013m, candles[1].Open); Assert.Equal(7543.3275m, candles[1].Close); Assert.Equal(7545m, candles[1].High); Assert.Equal(7539.53903772m, candles[1].Low); Assert.Equal(0.65390688m, candles[1].Volume); }
public async Task GetCandlesHistory_ErrorResponse_ThrowsExmoApiException(string response, int?code, string message) { const int fromSeconds = 1587844151; const int toSeconds = 1587844532; _fakeHttpMessageHandler.ResponseMessage = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StringContent(response) }; var request = new CandlesHistoryRequest { Pair = "BTC_USD", Resolution = Resolution.Minute5, From = DateTimeOffset.FromUnixTimeSeconds(fromSeconds), To = DateTimeOffset.FromUnixTimeSeconds(toSeconds), }; var exception = await Assert.ThrowsAsync <ExmoApiException>(async() => await _publicApi.GetCandlesHistoryAsync(request)); Assert.Equal(code, exception.Code); Assert.Equal(message, exception.Message); }
public async Task <IActionResult> GetHistoryCandles([FromRoute] string assetPairId, [FromBody] CandlesHistoryRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState.ToApiError())); } IEnumerable <IFeedCandle> candles = await _feedCandlesRepository.GetCandlesAsync( assetPairId, request.Period.Value.ToDomainModel(), isBuy : request.Type == PriceType.Bid, from : request.DateFrom.Value, to : request.DateTo.Value); var response = new CandlesHistoryResponse() { AssetPair = assetPairId, Period = request.Period.Value, DateFrom = request.DateFrom.Value, DateTo = request.DateTo.Value, Type = request.Type.Value, Data = candles.ToApiModel().ToList() }; return(Ok(response)); }