Пример #1
0
        public async Task GetCandlesticks()
        {
            const int limit = 24;

            var candlesticks = await _api.GetCandlesticksAsync(Symbol.BTC_USDT, CandlestickInterval.Hour, limit);

            Assert.NotNull(candlesticks);
            Assert.NotEmpty(candlesticks);
            Assert.True(candlesticks.Count() == limit);
        }
Пример #2
0
        public async Task <IEnumerable <Interface.Model.Candlestick> > GetCandlesticksAsync(string symbol, Interface.Model.CandlestickInterval interval, DateTime startTime, DateTime endTime, int limit = 0, CancellationToken token = default(CancellationToken))
        {
            var candlestickInterval = interval.ToBinanceCandlestickInterval();
            var results             = await binanceApi.GetCandlesticksAsync(symbol, candlestickInterval, startTime, endTime, limit, token).ConfigureAwait(false);

            var candlesticks = results.Select(cs => NewCandlestick(cs)).ToList();

            return(candlesticks);
        }
Пример #3
0
        private async Task <ImmutableList <Candlestick> > InitializeCandleticks(string symbol, CandlestickInterval interval)
        {
            var candlesticks = await _binanceApi.GetCandlesticksAsync(symbol, interval);

            var immutableCandlesticks = candlesticks.ToImmutableList();

            _cache.SetCandlestick(symbol, interval, immutableCandlesticks);

            return(immutableCandlesticks);
        }
        private async Task <ImmutableList <Candlestick> > InitializeCandleticks(string symbol, CandlestickInterval interval)
        {
            try
            {
                var candlesticks = await _binanceApi.GetCandlesticksAsync(symbol, interval);

                var immutableCandlesticks = candlesticks.ToImmutableList();

                _cache.SetCandlestick(symbol, interval, immutableCandlesticks);

                return(immutableCandlesticks);
            }
            catch (Exception ex)
            {
                _cache.ClearCandlestick(symbol, interval);

                _log.LogError($"Canlestick initialization error {ex.Message}");

                return(new List <Candlestick>().ToImmutableList());
            }
        }
        /// <summary>
        /// Given the symbol, will fetch the startDate of the first candlestick recorded to the minute.
        /// Will call the API 2-4 times
        /// </summary>
        /// <param name="symbol">The symbol to use for the search</param>
        /// <returns></returns>
        public async Task <DateTime?> GetStartDate(Symbol symbol, DateTime?initialDate)
        {
            try
            {
                var startDate = initialDate.HasValue ? new DateTime(initialDate.Value.Ticks, DateTimeKind.Utc) : new DateTime(2015, 1, 1, 12, 0, 0, DateTimeKind.Utc); // This should go far enough back before all Exchange APIs ;

                var endDate      = startDate.AddDays(999);
                var candlesticks = await _api.GetCandlesticksAsync(symbol, CandlestickInterval.Day, startDate, endDate, 1000);

                while (!candlesticks.Any() && startDate <= DateTime.UtcNow)
                {
                    startDate    = endDate;
                    endDate      = startDate.AddDays(999);
                    candlesticks = await _api.GetCandlesticksAsync(symbol, CandlestickInterval.Day, startDate, endDate, 1000);
                }
                if (!candlesticks.Any() && startDate > DateTime.UtcNow)
                {
                    Log.Logger.ForContext("Action", "GetStartDate")
                    .Warning("No start time found for symbol {Symbol}", symbol);

                    return(null);
                }

                startDate    = candlesticks.First().OpenTime;
                endDate      = startDate.AddMinutes(999);
                candlesticks = await _api.GetCandlesticksAsync(symbol, CandlestickInterval.Minute, startDate, endDate, 1000);

                while (!candlesticks.Any())
                {
                    startDate    = startDate.AddMinutes(1000);
                    endDate      = startDate.AddMinutes(999);
                    candlesticks = await _api.GetCandlesticksAsync(symbol, CandlestickInterval.Minute, startDate, endDate, 1000);
                }
                return(candlesticks.Any() ? candlesticks.First().OpenTime : startDate);
            }
            catch (Exception e)
            {
                Log.Logger.ForContext("Action", "GetStartDate")
                .Error(e, "Error getting start date for symbol {Symbol}", symbol);
            }

            return(null);
        }