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;
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }