def test_resuming_previous_hyperopt_results_succeeds(mocker): import freqtrade.optimize.hyperopt as hyperopt trials = create_trials(mocker) mocker.patch('freqtrade.optimize.hyperopt.TRIALS', return_value=trials) 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.read_trials', return_value=trials) mock_save = mocker.patch('freqtrade.optimize.hyperopt.save_trials', return_value=None) mocker.patch('freqtrade.optimize.hyperopt.sorted', return_value=trials.results) mocker.patch('freqtrade.optimize.preprocess') mocker.patch('freqtrade.optimize.load_data') mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={}) args = mocker.Mock(epochs=1, config='config.json.example', mongodb=False) start(args) 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_uses_mongotrials(mocker): mock_mongotrials = mocker.patch('freqtrade.optimize.hyperopt.MongoTrials', return_value=create_trials(mocker)) mocker.patch('freqtrade.optimize.preprocess') mocker.patch('freqtrade.optimize.load_data') mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={}) args = mocker.Mock(epochs=1, config='config.json.example', mongodb=True) start(args) mock_mongotrials.assert_called_once()
def test_start_calls_fmin(mocker): trials = create_trials(mocker) mocker.patch('freqtrade.optimize.hyperopt.TRIALS', return_value=trials) mocker.patch('freqtrade.optimize.hyperopt.sorted', return_value=trials.results) mocker.patch('freqtrade.optimize.preprocess') mocker.patch('freqtrade.optimize.load_data') mock_fmin = mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value={}) args = mocker.Mock(epochs=1, config='config.json.example', mongodb=False) start(args) mock_fmin.assert_called_once()
def test_fmin_throw_value_error(mocker, caplog): mocker.patch('freqtrade.optimize.hyperopt.MongoTrials', return_value=create_trials(mocker)) mocker.patch('freqtrade.optimize.preprocess') mocker.patch('freqtrade.optimize.load_data') mocker.patch('freqtrade.optimize.hyperopt.fmin', side_effect=ValueError()) args = mocker.Mock(epochs=1, config='config.json.example') start(args) 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_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_start(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', 'DefaultStrategy', 'hyperopt', '--epochs', '5' ] args = get_args(args) StrategyResolver({'strategy': 'DefaultStrategy'}) start(args) import pprint pprint.pprint(caplog.record_tuples) assert log_has('Starting freqtrade in Hyperopt mode', caplog.record_tuples) assert start_mock.call_count == 1
def test_start(mocker, default_conf, caplog) -> None: """ Test start() function """ start_mock = MagicMock() mocker.patch('freqtrade.optimize.hyperopt.Hyperopt.start', start_mock) mocker.patch('freqtrade.configuration.open', mocker.mock_open(read_data=json.dumps(default_conf))) args = [ '--config', 'config.json', '--strategy', 'DefaultStrategy', 'hyperopt', '--epochs', '5' ] args = get_args(args) StrategyResolver({'strategy': 'DefaultStrategy'}) start(args) import pprint pprint.pprint(caplog.record_tuples) assert log_has('Starting freqtrade in Hyperopt mode', caplog.record_tuples) assert start_mock.call_count == 1
def test_fmin_best_results(mocker, caplog): fmin_result = { "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, } mocker.patch('freqtrade.optimize.hyperopt.MongoTrials', return_value=create_trials(mocker)) mocker.patch('freqtrade.optimize.preprocess') mocker.patch('freqtrade.optimize.load_data') mocker.patch('freqtrade.optimize.hyperopt.fmin', return_value=fmin_result) args = mocker.Mock(epochs=1, config='config.json.example') start(args) exists = [ 'Best parameters', '"adx": {\n "enabled": true,\n "value": 15.0\n },', '"green_candle": {\n "enabled": true\n },', '"mfi": {\n "enabled": false\n },', '"trigger": {\n "type": "ao_cross_zero"\n },', '"stoploss": -0.1', ] for line in exists: assert line in caplog.text