def test_fmin_throw_value_error(mocker, default_conf, caplog) -> None: mocker.patch('freqtrade.optimize.hyperopt.load_data', MagicMock()) mocker.patch('freqtrade.optimize.hyperopt.fmin', side_effect=ValueError()) conf = deepcopy(default_conf) conf.update({'config': 'config.json.example'}) conf.update({'epochs': 1}) conf.update({'timerange': None}) conf.update({'spaces': 'all'}) mocker.patch('freqtrade.optimize.hyperopt.hyperopt_optimize_conf', return_value=conf) StrategyResolver({'strategy': 'DefaultStrategy'}) hyperopt = Hyperopt(conf) hyperopt.trials = create_trials(mocker) hyperopt.tickerdata_to_dataframe = MagicMock() hyperopt.start() exists = [ 'Best Result:', 'Sorry, Hyperopt was not able to find good parameters. Please try with more epochs ' '(param: -e).', ] for line in exists: assert line in caplog.text
def test_start_calls_optimizer(mocker, default_conf, caplog) -> None: dumper = mocker.patch('freqtrade.optimize.hyperopt.dump', MagicMock()) mocker.patch('freqtrade.optimize.hyperopt.load_data', MagicMock()) mocker.patch('freqtrade.optimize.hyperopt.multiprocessing.cpu_count', MagicMock(return_value=1)) parallel = mocker.patch( 'freqtrade.optimize.hyperopt.Hyperopt.run_optimizer_parallel', MagicMock(return_value=[{ 'loss': 1, 'result': 'foo result', 'params': {} }])) patch_exchange(mocker) default_conf.update({'config': 'config.json.example'}) default_conf.update({'epochs': 1}) default_conf.update({'timerange': None}) default_conf.update({'spaces': 'all'}) hyperopt = Hyperopt(default_conf) hyperopt.tickerdata_to_dataframe = MagicMock() hyperopt.start() parallel.assert_called_once() assert 'Best result:\nfoo result\nwith values:\n{}' in caplog.text assert dumper.called
def test_resuming_previous_hyperopt_results_succeeds(mocker, default_conf) -> None: trials = create_trials(mocker) conf = deepcopy(default_conf) conf.update({'config': 'config.json.example'}) conf.update({'epochs': 1}) conf.update({'mongodb': False}) conf.update({'timerange': None}) conf.update({'spaces': 'all'}) mocker.patch('freqtrade.optimize.hyperopt.os.path.exists', return_value=True) mocker.patch('freqtrade.optimize.hyperopt.len', return_value=len(trials.results)) mock_read = mocker.patch( 'freqtrade.optimize.hyperopt.Hyperopt.read_trials', return_value=trials) mock_save = mocker.patch( 'freqtrade.optimize.hyperopt.Hyperopt.save_trials', return_value=None) mocker.patch('freqtrade.optimize.hyperopt.sorted', return_value=trials.results) mocker.patch('freqtrade.optimize.hyperopt.load_data', MagicMock()) mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={}) mocker.patch('freqtrade.optimize.hyperopt.hyperopt_optimize_conf', return_value=conf) StrategyResolver({'strategy': 'DefaultStrategy'}) hyperopt = Hyperopt(conf) hyperopt.trials = trials hyperopt.tickerdata_to_dataframe = MagicMock() hyperopt.start() mock_read.assert_called_once() mock_save.assert_called_once() current_tries = hyperopt.current_tries total_tries = hyperopt.total_tries assert current_tries == len(trials.results) assert total_tries == (current_tries + len(trials.results))
def test_start_calls_fmin(mocker, default_conf) -> None: trials = create_trials(mocker) mocker.patch('freqtrade.optimize.hyperopt.sorted', return_value=trials.results) mocker.patch('freqtrade.optimize.hyperopt.load_data', MagicMock()) mock_fmin = mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={}) conf = deepcopy(default_conf) conf.update({'config': 'config.json.example'}) conf.update({'epochs': 1}) conf.update({'mongodb': False}) conf.update({'timerange': None}) conf.update({'spaces': 'all'}) hyperopt = Hyperopt(conf) hyperopt.trials = trials hyperopt.tickerdata_to_dataframe = MagicMock() hyperopt.start() mock_fmin.assert_called_once()
def test_start_uses_mongotrials(mocker, default_conf) -> None: mocker.patch('freqtrade.optimize.hyperopt.load_data', MagicMock()) mock_fmin = mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={}) mock_mongotrials = mocker.patch('freqtrade.optimize.hyperopt.MongoTrials', return_value=create_trials(mocker)) conf = deepcopy(default_conf) conf.update({'config': 'config.json.example'}) conf.update({'epochs': 1}) conf.update({'mongodb': True}) conf.update({'timerange': None}) conf.update({'spaces': 'all'}) mocker.patch('freqtrade.optimize.hyperopt.hyperopt_optimize_conf', return_value=conf) hyperopt = Hyperopt(conf) hyperopt.tickerdata_to_dataframe = MagicMock() hyperopt.start() mock_mongotrials.assert_called_once() mock_fmin.assert_called_once()
def test_fmin_best_results(mocker, default_conf, caplog) -> None: fmin_result = { "macd_below_zero": 0, "adx": 1, "adx-value": 15.0, "fastd": 1, "fastd-value": 40.0, "green_candle": 1, "mfi": 0, "over_sar": 0, "rsi": 1, "rsi-value": 37.0, "trigger": 2, "uptrend_long_ema": 1, "uptrend_short_ema": 0, "uptrend_sma": 0, "stoploss": -0.1, "roi_t1": 1, "roi_t2": 2, "roi_t3": 3, "roi_p1": 1, "roi_p2": 2, "roi_p3": 3, } conf = deepcopy(default_conf) conf.update({'config': 'config.json.example'}) conf.update({'epochs': 1}) conf.update({'timerange': None}) conf.update({'spaces': 'all'}) mocker.patch('freqtrade.optimize.hyperopt.load_data', MagicMock()) mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value=fmin_result) mocker.patch('freqtrade.optimize.hyperopt.hyperopt_optimize_conf', return_value=conf) StrategyResolver({'strategy': 'DefaultStrategy'}) hyperopt = Hyperopt(conf) hyperopt.trials = create_trials(mocker) hyperopt.tickerdata_to_dataframe = MagicMock() hyperopt.start() exists = [ 'Best parameters:', '"adx": {\n "enabled": true,\n "value": 15.0\n },', '"fastd": {\n "enabled": true,\n "value": 40.0\n },', '"green_candle": {\n "enabled": true\n },', '"macd_below_zero": {\n "enabled": false\n },', '"mfi": {\n "enabled": false\n },', '"over_sar": {\n "enabled": false\n },', '"roi_p1": 1.0,', '"roi_p2": 2.0,', '"roi_p3": 3.0,', '"roi_t1": 1.0,', '"roi_t2": 2.0,', '"roi_t3": 3.0,', '"rsi": {\n "enabled": true,\n "value": 37.0\n },', '"stoploss": -0.1,', '"trigger": {\n "type": "faststoch10"\n },', '"uptrend_long_ema": {\n "enabled": true\n },', '"uptrend_short_ema": {\n "enabled": false\n },', '"uptrend_sma": {\n "enabled": false\n }', 'ROI table:\n{0: 6.0, 3.0: 3.0, 5.0: 1.0, 6.0: 0}', 'Best Result:\nfoo' ] for line in exists: assert line in caplog.text