diff --git a/freqtrade/data/btanalysis.py b/freqtrade/data/btanalysis.py index 49b4b0eb1..d1884d00c 100644 --- a/freqtrade/data/btanalysis.py +++ b/freqtrade/data/btanalysis.py @@ -279,7 +279,11 @@ def get_backtest_market_change(filename: Path, include_ts: bool = True) -> pd.Da """ Read backtest market change file. """ - df = pd.read_feather(filename) + if filename.suffix == ".zip": + data = load_file_from_zip(filename, f"{filename.stem}_market_change.feather") + df = pd.read_feather(BytesIO(data)) + else: + df = pd.read_feather(filename) if include_ts: df.loc[:, "__date_ts"] = df.loc[:, "date"].astype(np.int64) // 1000 // 1000 return df diff --git a/freqtrade/rpc/api_server/api_backtest.py b/freqtrade/rpc/api_server/api_backtest.py index 088a0a700..7346b22e0 100644 --- a/freqtrade/rpc/api_server/api_backtest.py +++ b/freqtrade/rpc/api_server/api_backtest.py @@ -350,10 +350,17 @@ def api_update_backtest_history_entry( ) def api_get_backtest_market_change(file: str, config=Depends(get_config)): bt_results_base: Path = config["user_data_dir"] / "backtest_results" - file_abs = (bt_results_base / f"{file}_market_change").with_suffix(".feather") - # Ensure file is in backtest_results directory - if not is_file_in_dir(file_abs, bt_results_base): + for fn in ( + Path(file).with_suffix(".zip"), + Path(f"{file}_market_change").with_suffix(".feather"), + ): + file_abs = bt_results_base / fn + # Ensure file is in backtest_results directory + if is_file_in_dir(file_abs, bt_results_base): + break + else: raise HTTPException(status_code=404, detail="File not found.") + df = get_backtest_market_change(file_abs) return {