public MarketTriple GetMarketTriple(string btrxLiteral) { try { using (var conn = new SQLiteConnection(ConnectionString)) { conn.Open(); var command = conn.CreateCommand(); command.CommandText = $"SELECT * FROM MARKETLITERALS WHERE BtrxApiLiteral = '{btrxLiteral}'"; var dataReader = command.ExecuteReader(); var columnIndex = dataReader.GetOrdinal("Exchange"); MarketTriple triple = null; while (dataReader.Read()) { triple = new MarketTriple(dataReader.GetString(1), dataReader.GetString(2), dataReader.GetString(3)); } dataReader.Close(); return(triple); } } catch (Exception ex) { _logger.LogError($"Failed at GetFavouriteBtrxLiterals, Message: {ex.Message}"); _logger.LogDebug($"Failed at GetFavouriteBtrxLiterals, Stacktrace: {ex.StackTrace}"); throw; } }
public async Task <CandleData> GetCandleData(MarketTriple triple, OlhcBeforeAfterParam param, double unixTimeStamp, IEnumerable <int> timeIntervalsInSeconds) { try { using (var client = new HttpClient()) { var literal = triple.CryptoWatchLiteral; var intervalsInSeconds = timeIntervalsInSeconds as int[] ?? timeIntervalsInSeconds.ToArray(); var intervalParam = string.Join(",", intervalsInSeconds.Select(x => x.ToString()).ToArray()); var uri = $"https://api.cryptowat.ch/markets/{triple.ExchangeName}/{literal}/ohlc?{param}={unixTimeStamp}&periods={intervalParam}".ToLower(); var json = await client.GetStringAsync(new Uri(uri)); var candleResult = JObject.Parse(json); var candleData = new CandleData(); foreach (var interval in intervalsInSeconds) { var result = candleResult["result"][$"{interval}"] .Select(cs => cs.ToArray()).Select(cs => new CandleStick() { CloseTime = cs[0].ToObject <decimal>(), OpenPrice = cs[1].ToObject <decimal>(), HighPrice = cs[2].ToObject <decimal>(), LowPrice = cs[3].ToObject <decimal>(), ClosePrice = cs[4].ToObject <decimal>(), Volume = cs[5].ToObject <decimal>() }) .ToList(); candleData.ResultSet.Add(interval, result); } _logger.LogInformation($"Finished fetching candledata for {literal} - Success: {candleData.ResultSet.First().Value.Count > 0}"); return(candleData); } } catch (Exception ex) { _logger.LogError($"GetCandleData threw an exception!: {ex.Message}"); _logger.LogDebug($"GetCandleData threw an exception!: {ex.StackTrace}"); } return(null); }
public async Task <double> GetSimpleMovingAverageForMarket(MarketTriple triple, int startSecondsAgo, int candleTimeInterval, int periods) { var unixTimeStart = DateTime.Now.ConvertDateTimeToUnixAndSubstractSeconds(startSecondsAgo); var candleDataTask = await _cryptoWatchApi.GetCandleData( triple, OlhcBeforeAfterParam.After, unixTimeStart, new List <int>() { candleTimeInterval } ); await Task.Delay(500); var result = _processor.GetMovingAverage(candleDataTask.ResultSet.Values.First()); return(result); }