void InitExchanges() { // We need to be careful to only add exchanges which OnGetTickers implementation make only 1 request AddExchangeSharpProviders <ExchangeBinanceAPI>("binance"); AddExchangeSharpProviders <ExchangeBittrexAPI>("bittrex"); AddExchangeSharpProviders <ExchangePoloniexAPI>("poloniex"); AddExchangeSharpProviders <ExchangeNDAXAPI>("ndax"); // Handmade providers Providers.Add("hitbtc", new HitBTCRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_HITBTC"))); Providers.Add("coingecko", new CoinGeckoRateProvider(_httpClientFactory)); Providers.Add("kraken", new KrakenExchangeRateProvider() { HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_KRAKEN") }); Providers.Add("bylls", new ByllsRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BYLLS"))); Providers.Add("buda", new BudaRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BUDA"))); Providers.Add("bitbank", new BitbankRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITBANK"))); Providers.Add("bitpay", new BitpayRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITPAY"))); Providers.Add("ripio", new RipioExchangeProvider(_httpClientFactory?.CreateClient("EXCHANGE_RIPIO"))); Providers.Add("cryptomarket", new CryptoMarketExchangeRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_CRYPTOMARKET"))); Providers.Add("bitflyer", new BitflyerRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITFLYER"))); // Providers.Add("argoneum", new ArgoneumRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_ARGONEUM"))); // Backward compatibility: coinaverage should be using coingecko to prevent stores from breaking Providers.Add("coinaverage", new CoinGeckoRateProvider(_httpClientFactory)); AddExchangeSharpProviders <ExchangeBitfinexAPI>("bitfinex"); AddExchangeSharpProviders <ExchangeOKExAPI>("okex"); AddExchangeSharpProviders <ExchangeCoinbaseAPI>("coinbasepro"); // Those exchanges make too many requests, exchange sharp do not parallelize so it is too slow... //AddExchangeSharpProviders<ExchangeGeminiAPI>("gemini"); //AddExchangeSharpProviders<ExchangeBitstampAPI>("bitstamp"); //AddExchangeSharpProviders<ExchangeBitMEXAPI>("bitmex"); foreach (var provider in Providers.ToArray()) { var prov = new BackgroundFetcherRateProvider(Providers[provider.Key]); prov.RefreshRate = TimeSpan.FromMinutes(1.0); prov.ValidatyTime = TimeSpan.FromMinutes(5.0); Providers[provider.Key] = prov; } Providers["gdax"] = Providers["coinbasepro"]; foreach (var supportedExchange in GetCoinGeckoSupportedExchanges()) { if (!Providers.ContainsKey(supportedExchange.Id) && supportedExchange.Id != CoinGeckoRateProvider.CoinGeckoName) { var coingecko = new CoinGeckoRateProvider(_httpClientFactory) { UnderlyingExchange = supportedExchange.SourceId }; var bgFetcher = new BackgroundFetcherRateProvider(coingecko); bgFetcher.RefreshRate = TimeSpan.FromMinutes(1.0); bgFetcher.ValidatyTime = TimeSpan.FromMinutes(5.0); Providers.Add(supportedExchange.Id, bgFetcher); } } }
private void InitExchanges() { // We need to be careful to only add exchanges which OnGetTickers implementation make only 1 request Providers.Add("binance", new ExchangeSharpRateProvider("binance", new ExchangeBinanceAPI(), true)); Providers.Add("bittrex", new ExchangeSharpRateProvider("bittrex", new ExchangeBittrexAPI(), true)); Providers.Add("poloniex", new ExchangeSharpRateProvider("poloniex", new ExchangePoloniexAPI(), true)); Providers.Add("hitbtc", new ExchangeSharpRateProvider("hitbtc", new ExchangeHitbtcAPI(), false)); Providers.Add("cryptopia", new ExchangeSharpRateProvider("cryptopia", new ExchangeCryptopiaAPI(), false)); // Handmade providers Providers.Add("bitpay", new BitpayRateProvider(new NBitpayClient.Bitpay(new NBitcoin.Key(), new Uri("https://bitpay.com/")))); Providers.Add(QuadrigacxRateProvider.QuadrigacxName, new QuadrigacxRateProvider()); Providers.Add(CoinAverageRateProvider.CoinAverageName, new CoinAverageRateProvider() { Exchange = CoinAverageRateProvider.CoinAverageName, HttpClient = _httpClientFactory?.CreateClient(), Authenticator = _CoinAverageSettings }); Providers.Add("kraken", new KrakenExchangeRateProvider() { HttpClient = _httpClientFactory?.CreateClient() }); // Those exchanges make multiple requests when calling GetTickers so we remove them //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())); foreach (var provider in Providers.ToArray()) { var prov = new BackgroundFetcherRateProvider(Providers[provider.Key]); prov.RefreshRate = provider.Key == CoinAverageRateProvider.CoinAverageName ? CacheSpan : TimeSpan.FromMinutes(1.0); Providers[provider.Key] = prov; } var cache = new MemoryCache(_CacheOptions); foreach (var supportedExchange in GetSupportedExchanges()) { if (!Providers.ContainsKey(supportedExchange.Key)) { var coinAverage = new CoinAverageRateProvider() { Exchange = supportedExchange.Key, HttpClient = _httpClientFactory?.CreateClient(), Authenticator = _CoinAverageSettings }; var cached = new CachedRateProvider(supportedExchange.Key, coinAverage, cache) { CacheSpan = CacheSpan }; Providers.Add(supportedExchange.Key, cached); } } }
void InitExchanges() { // We need to be careful to only add exchanges which OnGetTickers implementation make only 1 request Providers.Add("binance", new ExchangeSharpRateProvider(new ExchangeBinanceAPI(), true)); Providers.Add("bittrex", new ExchangeSharpRateProvider(new ExchangeBittrexAPI(), true)); Providers.Add("poloniex", new ExchangeSharpRateProvider(new ExchangePoloniexAPI(), true)); Providers.Add("hitbtc", new ExchangeSharpRateProvider(new ExchangeHitBTCAPI(), true)); Providers.Add("ndax", new ExchangeSharpRateProvider(new ExchangeNDAXAPI(), true)); // Handmade providers Providers.Add("coingecko", new CoinGeckoRateProvider(_httpClientFactory)); Providers.Add("kraken", new KrakenExchangeRateProvider() { HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_KRAKEN") }); Providers.Add("bylls", new ByllsRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BYLLS"))); Providers.Add("bitbank", new BitbankRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITBANK"))); Providers.Add("bitpay", new BitpayRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITPAY"))); // Backward compatibility: coinaverage should be using coingecko to prevent stores from breaking Providers.Add("coinaverage", new CoinGeckoRateProvider(_httpClientFactory)); // Those exchanges make multiple requests when calling GetTickers so we remove them //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())); foreach (var provider in Providers.ToArray()) { var prov = new BackgroundFetcherRateProvider(provider.Key, Providers[provider.Key]); prov.RefreshRate = TimeSpan.FromMinutes(1.0); prov.ValidatyTime = TimeSpan.FromMinutes(5.0); Providers[provider.Key] = prov; } foreach (var supportedExchange in GetCoinGeckoSupportedExchanges()) { if (!Providers.ContainsKey(supportedExchange.Id) && supportedExchange.Id != CoinGeckoRateProvider.CoinGeckoName) { var coingecko = new CoinGeckoRateProvider(_httpClientFactory) { UnderlyingExchange = supportedExchange.Id }; var bgFetcher = new BackgroundFetcherRateProvider(supportedExchange.Id, coingecko); bgFetcher.RefreshRate = TimeSpan.FromMinutes(1.0); bgFetcher.ValidatyTime = TimeSpan.FromMinutes(5.0); Providers.Add(supportedExchange.Id, bgFetcher); } } }
private void InitExchanges() { // We need to be careful to only add exchanges which OnGetTickers implementation make only 1 request Providers.Add("binance", new ExchangeSharpRateProvider("binance", new ExchangeBinanceAPI(), true)); Providers.Add("bittrex", new ExchangeSharpRateProvider("bittrex", new ExchangeBittrexAPI(), true)); Providers.Add("poloniex", new ExchangeSharpRateProvider("poloniex", new ExchangePoloniexAPI(), true)); Providers.Add("hitbtc", new ExchangeSharpRateProvider("hitbtc", new ExchangeHitbtcAPI(), false)); // Cryptopia is often not available // Disabled because of https://twitter.com/Cryptopia_NZ/status/1085084168852291586 // Providers.Add("cryptopia", new ExchangeSharpRateProvider("cryptopia", new ExchangeCryptopiaAPI(), false)); // Handmade providers Providers.Add(QuadrigacxRateProvider.QuadrigacxName, new QuadrigacxRateProvider()); Providers.Add(CoinAverageRateProvider.CoinAverageName, new CoinAverageRateProvider() { Exchange = CoinAverageRateProvider.CoinAverageName, HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_COINAVERAGE"), Authenticator = _CoinAverageSettings }); Providers.Add("kraken", new KrakenExchangeRateProvider() { HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_KRAKEN") }); Providers.Add("bylls", new ByllsRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BYLLS"))); // Those exchanges make multiple requests when calling GetTickers so we remove them //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())); foreach (var provider in Providers.ToArray()) { if (provider.Key == "cryptopia") // Shitty exchange, rate often unavailable, it spams the logs { continue; } var prov = new BackgroundFetcherRateProvider(Providers[provider.Key]); if (provider.Key == CoinAverageRateProvider.CoinAverageName) { prov.RefreshRate = CacheSpan; prov.ValidatyTime = CacheSpan + TimeSpan.FromMinutes(1.0); } else { prov.RefreshRate = TimeSpan.FromMinutes(1.0); prov.ValidatyTime = TimeSpan.FromMinutes(5.0); } Providers[provider.Key] = prov; } var cache = new MemoryCache(_CacheOptions); foreach (var supportedExchange in GetSupportedExchanges()) { if (!Providers.ContainsKey(supportedExchange.Key)) { var coinAverage = new CoinAverageRateProvider() { Exchange = supportedExchange.Key, HttpClient = _httpClientFactory?.CreateClient(), Authenticator = _CoinAverageSettings }; var cached = new CachedRateProvider(supportedExchange.Key, coinAverage, cache) { CacheSpan = CacheSpan }; Providers.Add(supportedExchange.Key, cached); } } }
void InitExchanges() { // We need to be careful to only add exchanges which OnGetTickers implementation make only 1 request Providers.Add("binance", new ExchangeSharpRateProvider("binance", new ExchangeBinanceAPI(), true)); Providers.Add("bittrex", new ExchangeSharpRateProvider("bittrex", new ExchangeBittrexAPI(), true)); Providers.Add("poloniex", new ExchangeSharpRateProvider("poloniex", new ExchangePoloniexAPI(), true)); Providers.Add("hitbtc", new ExchangeSharpRateProvider("hitbtc", new ExchangeHitBTCAPI(), true)); Providers.Add("ndax", new ExchangeSharpRateProvider("ndax", new ExchangeNDAXAPI(), true)); // Handmade providers Providers.Add(CoinGeckoRateProvider.CoinGeckoName, new CoinGeckoRateProvider(_httpClientFactory)); Providers.Add(CoinAverageRateProvider.CoinAverageName, new CoinAverageRateProvider() { Exchange = CoinAverageRateProvider.CoinAverageName, HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_COINAVERAGE"), Authenticator = _CoinAverageSettings }); Providers.Add("kraken", new KrakenExchangeRateProvider() { HttpClient = _httpClientFactory?.CreateClient("EXCHANGE_KRAKEN") }); Providers.Add("bylls", new ByllsRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BYLLS"))); Providers.Add("bitbank", new BitbankRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITBANK"))); Providers.Add("bitpay", new BitpayRateProvider(_httpClientFactory?.CreateClient("EXCHANGE_BITPAY"))); // Those exchanges make multiple requests when calling GetTickers so we remove them //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())); foreach (var provider in Providers.ToArray()) { if (provider.Key == "cryptopia") // Shitty exchange, rate often unavailable, it spams the logs { continue; } var prov = new BackgroundFetcherRateProvider(provider.Key, Providers[provider.Key]); if (provider.Key == CoinGeckoRateProvider.CoinGeckoName) { prov.RefreshRate = CacheSpan; prov.ValidatyTime = CacheSpan + TimeSpan.FromMinutes(1.0); } else { prov.RefreshRate = TimeSpan.FromMinutes(1.0); prov.ValidatyTime = TimeSpan.FromMinutes(5.0); } Providers[provider.Key] = prov; } var cache = new MemoryCache(_CacheOptions); foreach (var supportedExchange in GetCoinGeckoSupportedExchanges()) { if (!Providers.ContainsKey(supportedExchange.Id)) { var coinAverage = new CoinGeckoRateProvider(_httpClientFactory) { Exchange = supportedExchange.Id }; var cached = new CachedRateProvider(supportedExchange.Id, coinAverage, cache) { CacheSpan = CacheSpan }; Providers.Add(supportedExchange.Id, cached); } } foreach (var supportedExchange in GetCoinAverageSupportedExchanges()) { if (!Providers.ContainsKey(supportedExchange.Id)) { var coinAverage = new CoinGeckoRateProvider(_httpClientFactory) { Exchange = supportedExchange.Id }; var cached = new CachedRateProvider(supportedExchange.Id, coinAverage, cache) { CacheSpan = CacheSpan }; Providers.Add(supportedExchange.Id, cached); } } }