diff --git a/freqtrade/data/btanalysis.py b/freqtrade/data/btanalysis.py index 57eec6eea..16926923b 100644 --- a/freqtrade/data/btanalysis.py +++ b/freqtrade/data/btanalysis.py @@ -100,6 +100,9 @@ def get_latest_hyperopt_file(directory: Union[Path, str], predef_filename: str = if isinstance(directory, str): directory = Path(directory) if predef_filename: + if Path(predef_filename).is_absolute(): + raise OperationalException( + "--hyperopt-filename expects only the filename, not an absolute path.") return directory / predef_filename return directory / get_latest_hyperopt_filename(directory) diff --git a/freqtrade/optimize/hyperopt_tools.py b/freqtrade/optimize/hyperopt_tools.py index 5eac47ba0..61a10c32b 100755 --- a/freqtrade/optimize/hyperopt_tools.py +++ b/freqtrade/optimize/hyperopt_tools.py @@ -137,6 +137,7 @@ class HyperoptTools(): } if not HyperoptTools._test_hyperopt_results_exist(results_file): # No file found. + logger.warning(f"Hyperopt file {results_file} not found.") return [], 0 epochs = [] diff --git a/tests/data/test_btanalysis.py b/tests/data/test_btanalysis.py index eed3532f8..341645854 100644 --- a/tests/data/test_btanalysis.py +++ b/tests/data/test_btanalysis.py @@ -51,6 +51,12 @@ def test_get_latest_hyperopt_file(testdatadir): res = get_latest_hyperopt_file(str(testdatadir.parent)) assert res == testdatadir.parent / "hyperopt_results.pickle" + # Test with absolute path + with pytest.raises( + OperationalException, + match="--hyperopt-filename expects only the filename, not an absolute path."): + get_latest_hyperopt_file(str(testdatadir.parent), str(testdatadir.parent)) + def test_load_backtest_metadata(mocker, testdatadir): res = load_backtest_metadata(testdatadir / 'nonexistant.file.json') diff --git a/tests/optimize/test_hyperopt_tools.py b/tests/optimize/test_hyperopt_tools.py index d9a52db39..6cc0caf40 100644 --- a/tests/optimize/test_hyperopt_tools.py +++ b/tests/optimize/test_hyperopt_tools.py @@ -10,7 +10,7 @@ import rapidjson from freqtrade.constants import FTHYPT_FILEVERSION from freqtrade.exceptions import OperationalException from freqtrade.optimize.hyperopt_tools import HyperoptTools, hyperopt_serializer -from tests.conftest import log_has +from tests.conftest import log_has, log_has_re # Functions for recurrent object patching @@ -24,6 +24,7 @@ def test_save_results_saves_epochs(hyperopt, tmpdir, caplog) -> None: hyperopt.results_file = Path(tmpdir / 'ut_results.fthypt') hyperopt_epochs = HyperoptTools.load_filtered_results(hyperopt.results_file, {}) + assert log_has_re("Hyperopt file .* not found.", caplog) assert hyperopt_epochs == ([], 0) # Test writing to temp dir and reading again