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); }
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); }
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); }