/// <summary> /// Downloads all symbols from the exchanges and filters out the coins with enough 24hr Volume /// </summary> /// <returns></returns> private void FindCoinsWithEnoughVolume() { _symbols = new List <ExtendedSymbol>(); var allSymbolsMeta = _api.GetMarketSymbolsMetadataAsync().Result; var allTickers = _api.GetTickersAsync().Result; // for each symbol foreach (var metadata in allSymbolsMeta) { string symbol = metadata.MarketSymbol.ToUpperInvariant(); if (!IsValidCurrency(symbol)) { // ignore, symbol has wrong currency continue; } // check 24hr volume var ticker = allTickers.FirstOrDefault(e => e.Key == symbol).Value; var volume = ticker.Volume.QuoteCurrencyVolume; if (_api is ExchangeBittrexAPI) { // bittrex reports wrong volume :-( volume = ticker.Volume.BaseCurrencyVolume; } if (volume < _settings.Min24HrVolume) { // ignore since 24hr volume is too low continue; } if (ticker.Ask < _settings.MinPrice) { Trace.WriteLine($"Ignoring because price is too low: {ticker.Ask}"); continue; } SymbolTrend fourHourTrend = new SymbolTrend(4); SymbolTrend oneHourTrend = new SymbolTrend(1); // add to list ExtendedSymbol extendedSymbol = new ExtendedSymbol() { Symbol = metadata, Ticker = ticker, Trends = new SymbolTrend[2] }; extendedSymbol.Trends[0] = fourHourTrend; extendedSymbol.Trends[1] = oneHourTrend; _symbols.Add(extendedSymbol); } _symbols = _symbols.OrderBy(e => e.Symbol.MarketSymbol).ToList(); }
public void FinalizeTrendCandlesLookup(bool wasSuccesful) { // schedule the next time if (wasSuccesful) { SymbolTrend firstTrend = _symbols[0].Trends[0]; MarketCandle candle = firstTrend.Candle; nextFetchCandlesTime = candle.Timestamp.AddHours(firstTrend.TimeframeInHours); } else { nextFetchCandlesTime = DateTime.UtcNow.AddMinutes(5); } }