Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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));
        }