diff --git a/freqtrade/analyze.py b/freqtrade/analyze.py index 0abd473d7..91a041d52 100644 --- a/freqtrade/analyze.py +++ b/freqtrade/analyze.py @@ -145,6 +145,9 @@ def get_signal(pair: str, signal: SignalType) -> bool: except ValueError as ex: logger.warning('Unable to analyze ticker for pair %s: %s', pair, str(ex)) return False + except Exception as ex: + logger.exception('Unexpected error when analyzing ticker for pair %s: %s', pair, str(ex)) + return False if dataframe.empty: return False diff --git a/freqtrade/misc.py b/freqtrade/misc.py index 9f414a72f..900aa8763 100644 --- a/freqtrade/misc.py +++ b/freqtrade/misc.py @@ -57,8 +57,8 @@ def load_config(path: str) -> Dict: try: validate(conf, CONF_SCHEMA) return conf - except ValidationError: - logger.fatal('Configuration is not valid! See config.json.example') + except ValidationError as ex: + logger.fatal('Invalid configuration. See config.json.example. Reason: %s', ex) raise ValidationError( best_match(Draft4Validator(CONF_SCHEMA).iter_errors(conf)).message ) diff --git a/freqtrade/tests/test_analyze.py b/freqtrade/tests/test_analyze.py index 47a557e10..040c45f26 100644 --- a/freqtrade/tests/test_analyze.py +++ b/freqtrade/tests/test_analyze.py @@ -63,3 +63,11 @@ def test_returns_latest_sell_signal(mocker): return_value=DataFrame([{'sell': 0, 'date': arrow.utcnow()}]) ) assert not get_signal('BTC-ETH', SignalType.SELL) + + +def test_get_signal_handles_exceptions(mocker): + mocker.patch('freqtrade.analyze.get_ticker_history', return_value=MagicMock()) + mocker.patch('freqtrade.analyze.analyze_ticker', + side_effect=Exception('invalid ticker history ')) + + assert not get_signal('BTC-ETH', SignalType.BUY)