diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index f663420e0..9cd6b861c 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -98,6 +98,7 @@ class Exchange(object): logger.info('Using Exchange "%s"', self.name) + self.markets = self._load_markets() # Check if all pairs are available self.validate_pairs(config['exchange']['pair_whitelist']) @@ -167,6 +168,16 @@ class Exchange(object): logger.warning('Could not load async markets. Reason: %s', e) return + def _load_markets(self) -> List[str]: + """ Initialize markets both sync and async """ + try: + markets = self._api.load_markets() + self._load_async_markets() + return markets + except ccxt.BaseError as e: + logger.warning('Unable to initialize markets. Reason: %s', e) + return [] + def validate_pairs(self, pairs: List[str]) -> None: """ Checks if all given pairs are tradable on the current exchange. @@ -175,11 +186,8 @@ class Exchange(object): :return: None """ - try: - markets = self._api.load_markets() - self._load_async_markets() - except ccxt.BaseError as e: - logger.warning('Unable to validate pairs (assuming they are correct). Reason: %s', e) + if not self.markets: + logger.warning('Unable to validate pairs (assuming they are correct).') return stake_cur = self._conf['stake_currency'] @@ -189,7 +197,7 @@ class Exchange(object): if not pair.endswith(stake_cur): raise OperationalException( f'Pair {pair} not compatible with stake_currency: {stake_cur}') - if pair not in markets: + if pair not in self.markets: raise OperationalException( f'Pair {pair} is not available at {self.name}')