private void InitExchanges() { // We need to be careful to only add exchanges which OnGetTickers implementation make only 1 request DirectProviders.Add("binance", new ExchangeSharpRateProvider("binance", new ExchangeBinanceAPI(), true)); DirectProviders.Add("bittrex", new ExchangeSharpRateProvider("bittrex", new ExchangeBittrexAPI(), true)); DirectProviders.Add("poloniex", new ExchangeSharpRateProvider("poloniex", new ExchangePoloniexAPI(), false)); DirectProviders.Add("hitbtc", new ExchangeSharpRateProvider("hitbtc", new ExchangeHitbtcAPI(), false)); DirectProviders.Add("cryptopia", new ExchangeSharpRateProvider("cryptopia", new ExchangeCryptopiaAPI(), false)); // Handmade providers DirectProviders.Add("bitpay", new BitpayRateProvider(new NBitpayClient.Bitpay(new NBitcoin.Key(), new Uri("https://bitpay.com/")))); DirectProviders.Add(QuadrigacxRateProvider.QuadrigacxName, new QuadrigacxRateProvider()); DirectProviders.Add(CoinAverageRateProvider.CoinAverageName, new CoinAverageRateProvider() { Exchange = CoinAverageRateProvider.CoinAverageName, Authenticator = _CoinAverageSettings }); // Those exchanges make multiple requests when calling GetTickers so we remove them //DirectProviders.Add("kraken", new ExchangeSharpRateProvider("kraken", new ExchangeKrakenAPI(), true)); //DirectProviders.Add("gdax", new ExchangeSharpRateProvider("gdax", new ExchangeGdaxAPI())); //DirectProviders.Add("gemini", new ExchangeSharpRateProvider("gemini", new ExchangeGeminiAPI())); //DirectProviders.Add("bitfinex", new ExchangeSharpRateProvider("bitfinex", new ExchangeBitfinexAPI())); //DirectProviders.Add("okex", new ExchangeSharpRateProvider("okex", new ExchangeOkexAPI())); //DirectProviders.Add("bitstamp", new ExchangeSharpRateProvider("bitstamp", new ExchangeBitstampAPI())); }
private async Task <QueryRateResult> QueryRates(string exchangeName) { List <IRateProvider> providers = new List <IRateProvider>(); if (DirectProviders.TryGetValue(exchangeName, out var directProvider)) { providers.Add(directProvider); } if (_CoinAverageSettings.AvailableExchanges.ContainsKey(exchangeName)) { providers.Add(new CoinAverageRateProvider() { Exchange = exchangeName, Authenticator = _CoinAverageSettings }); } var fallback = new FallbackRateProvider(providers.ToArray()); var cached = new CachedRateProvider(exchangeName, fallback, _Cache) { CacheSpan = CacheSpan }; var value = await cached.GetRatesAsync(); return(new QueryRateResult() { CachedResult = !fallback.Used, ExchangeRates = value, Exceptions = fallback.Exceptions .Select(c => new ExchangeException() { Exception = c, ExchangeName = exchangeName }).ToList() }); }