diff --git a/freqtrade/optimize/hyperopt.py b/freqtrade/optimize/hyperopt.py index 086cad5aa..4a239ab28 100644 --- a/freqtrade/optimize/hyperopt.py +++ b/freqtrade/optimize/hyperopt.py @@ -152,7 +152,7 @@ class Hyperopt(Backtesting): @staticmethod def generate_roi_table(params: Dict) -> Dict[int, float]: """ - Generate the ROI table thqt will be used by Hyperopt + Generate the ROI table that will be used by Hyperopt """ roi_table = {} roi_table[0] = params['roi_p1'] + params['roi_p2'] + params['roi_p3'] @@ -402,6 +402,13 @@ def start(args: Namespace) -> None: config['exchange']['key'] = '' config['exchange']['secret'] = '' + if config.get('strategy') and config.get('strategy') != 'DefaultStrategy': + logger.error("Please don't use --strategy for hyperopt.") + logger.error( + "Read the documentation at " + "https://github.com/freqtrade/freqtrade/blob/develop/docs/hyperopt.md " + "to understand how to configure hyperopt.") + raise ValueError("--strategy configured but not supported for hyperopt") # Initialize backtesting object hyperopt = Hyperopt(config) hyperopt.start() diff --git a/freqtrade/strategy/__init__.py b/freqtrade/strategy/__init__.py index 38a110bd7..b29e26ef9 100644 --- a/freqtrade/strategy/__init__.py +++ b/freqtrade/strategy/__init__.py @@ -3,7 +3,8 @@ import sys from copy import deepcopy from freqtrade.strategy.interface import IStrategy - +# Import Default-Strategy to have hyperopt correctly resolve +from freqtrade.strategy.default_strategy import DefaultStrategy # noqa: F401 logger = logging.getLogger(__name__) diff --git a/freqtrade/tests/optimize/test_hyperopt.py b/freqtrade/tests/optimize/test_hyperopt.py index 65a3c2fdb..2035e23df 100644 --- a/freqtrade/tests/optimize/test_hyperopt.py +++ b/freqtrade/tests/optimize/test_hyperopt.py @@ -65,6 +65,31 @@ def test_start(mocker, default_conf, caplog) -> None: assert start_mock.call_count == 1 +def test_start_failure(mocker, default_conf, caplog) -> None: + start_mock = MagicMock() + mocker.patch( + 'freqtrade.configuration.Configuration._load_config_file', + lambda *args, **kwargs: default_conf + ) + mocker.patch('freqtrade.optimize.hyperopt.Hyperopt.start', start_mock) + patch_exchange(mocker) + + args = [ + '--config', 'config.json', + '--strategy', 'TestStrategy', + 'hyperopt', + '--epochs', '5' + ] + args = get_args(args) + StrategyResolver({'strategy': 'DefaultStrategy'}) + with pytest.raises(ValueError): + start(args) + assert log_has( + "Please don't use --strategy for hyperopt.", + caplog.record_tuples + ) + + def test_loss_calculation_prefer_correct_trade_count(hyperopt) -> None: StrategyResolver({'strategy': 'DefaultStrategy'}) diff --git a/requirements.txt b/requirements.txt index 59d06aca1..4150dc5bd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,7 @@ requests==2.19.1 urllib3==1.22 wrapt==1.10.11 pandas==0.23.4 -scikit-learn==0.19.2 +scikit-learn==0.20.0 scipy==1.1.0 jsonschema==2.6.0 numpy==1.15.2