From acb1b50924cdd6cdf9df6906dc09b4f81ff0e503 Mon Sep 17 00:00:00 2001 From: Matthias <5024695+xmatthias@users.noreply.github.com> Date: Sat, 21 Apr 2018 23:20:12 +0200 Subject: [PATCH] [ccxt] fix unsupported fiat failures (#620) * prepare to support FIAT/Crypto trading * Don't fail fiat-convert for unsupported stake currencies * remove commented code * Add BNB to cryptomap * Fix test-failure * related to random execution as fee was not properly mocked if this is one of the first tests --- freqtrade/fiat_convert.py | 10 +++++++--- freqtrade/tests/optimize/test_backtesting.py | 3 ++- freqtrade/tests/test_fiat_convert.py | 3 +-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/freqtrade/fiat_convert.py b/freqtrade/fiat_convert.py index b86b56ec5..1258ee149 100644 --- a/freqtrade/fiat_convert.py +++ b/freqtrade/fiat_convert.py @@ -76,7 +76,8 @@ class CryptoToFiatConverter(object): CRYPTOMAP = { 'BTC': 'bitcoin', 'ETH': 'ethereum', - 'USDT': 'thether' + 'USDT': 'thether', + 'BNB': 'binance-coin' } def __new__(cls): @@ -99,6 +100,8 @@ class CryptoToFiatConverter(object): :param fiat_symbol: fiat to convert to :return: float, value in fiat of the crypto-currency amount """ + if crypto_symbol == fiat_symbol: + return crypto_amount price = self.get_price(crypto_symbol=crypto_symbol, fiat_symbol=fiat_symbol) return float(crypto_amount) * float(price) @@ -180,8 +183,9 @@ class CryptoToFiatConverter(object): raise ValueError('The fiat {} is not supported.'.format(fiat_symbol)) if crypto_symbol not in self.CRYPTOMAP: - raise ValueError( - 'The crypto symbol {} is not supported.'.format(crypto_symbol)) + # return 0 for unsupported stake currencies (fiat-convert should not break the bot) + logger.warning("unsupported crypto-symbol %s - returning 0.0", crypto_symbol) + return 0.0 try: return float( self._coinmarketcap.ticker( diff --git a/freqtrade/tests/optimize/test_backtesting.py b/freqtrade/tests/optimize/test_backtesting.py index ad4e23113..f5709154b 100644 --- a/freqtrade/tests/optimize/test_backtesting.py +++ b/freqtrade/tests/optimize/test_backtesting.py @@ -287,11 +287,12 @@ def test_setup_configuration_with_arguments(mocker, default_conf, caplog) -> Non ) -def test_start(mocker, init_backtesting, default_conf, caplog) -> None: +def test_start(mocker, init_backtesting, fee, default_conf, caplog) -> None: """ Test start() function """ start_mock = MagicMock() + mocker.patch('freqtrade.exchange.get_fee', fee) mocker.patch('freqtrade.optimize.backtesting.Backtesting.start', start_mock) mocker.patch('freqtrade.configuration.open', mocker.mock_open( read_data=json.dumps(default_conf) diff --git a/freqtrade/tests/test_fiat_convert.py b/freqtrade/tests/test_fiat_convert.py index dcbc7b936..2305b27b1 100644 --- a/freqtrade/tests/test_fiat_convert.py +++ b/freqtrade/tests/test_fiat_convert.py @@ -77,8 +77,7 @@ def test_fiat_convert_find_price(mocker): with pytest.raises(ValueError, match=r'The fiat ABC is not supported.'): fiat_convert._find_price(crypto_symbol='BTC', fiat_symbol='ABC') - with pytest.raises(ValueError, match=r'The crypto symbol XRP is not supported.'): - fiat_convert.get_price(crypto_symbol='XRP', fiat_symbol='USD') + assert fiat_convert.get_price(crypto_symbol='XRP', fiat_symbol='USD') == 0.0 mocker.patch('freqtrade.fiat_convert.CryptoToFiatConverter._find_price', return_value=12345.0) assert fiat_convert.get_price(crypto_symbol='BTC', fiat_symbol='USD') == 12345.0