diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 88c0d1cd3..3581be1a6 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -34,7 +34,6 @@ from freqtrade.optimize.optimize_reports import (generate_backtest_stats, genera show_backtest_results, store_backtest_analysis_results, store_backtest_stats) -from freqtrade.optimize.optimize_reports.bt_storage import store_backtest_market_change from freqtrade.persistence import (CustomDataWrapper, LocalTrade, Order, PairLocks, Trade, disable_database_use, enable_database_use) from freqtrade.plugins.pairlistmanager import PairListManager @@ -1423,9 +1422,9 @@ class Backtesting: self.results = results dt_appendix = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") if self.config.get('export', 'none') in ('trades', 'signals'): - store_backtest_stats(self.config['exportfilename'], self.results, dt_appendix) combined_res = combined_dataframes_with_rel_mean(data, min_date, max_date) - store_backtest_market_change(self.config['exportfilename'], combined_res, dt_appendix) + store_backtest_stats(self.config['exportfilename'], self.results, dt_appendix, + market_change_data=combined_res) if (self.config.get('export', 'none') == 'signals' and self.dataprovider.runmode == RunMode.BACKTEST): diff --git a/freqtrade/optimize/optimize_reports/bt_storage.py b/freqtrade/optimize/optimize_reports/bt_storage.py index 61179a6e6..36789d3e7 100644 --- a/freqtrade/optimize/optimize_reports/bt_storage.py +++ b/freqtrade/optimize/optimize_reports/bt_storage.py @@ -1,6 +1,6 @@ import logging from pathlib import Path -from typing import Dict +from typing import Dict, Optional from pandas import DataFrame @@ -31,7 +31,8 @@ def _generate_filename(recordfilename: Path, appendix: str, suffix: str) -> Path def store_backtest_stats( - recordfilename: Path, stats: BacktestResultType, dtappendix: str) -> Path: + recordfilename: Path, stats: BacktestResultType, dtappendix: str, *, + market_change_data: Optional[DataFrame] = None) -> Path: """ Stores backtest results :param recordfilename: Path object, which can either be a filename or a directory. @@ -55,6 +56,10 @@ def store_backtest_stats( latest_filename = Path.joinpath(filename.parent, LAST_BT_RESULT_FN) file_dump_json(latest_filename, {'latest_backtest': str(filename.name)}) + if market_change_data is not None: + filename_market_change = _generate_filename(recordfilename, f"{dtappendix}_market_change", '.feather') + market_change_data.reset_index().to_feather(filename_market_change, compression_level=9, compression='lz4') + return filename @@ -83,20 +88,3 @@ def store_backtest_analysis_results( dtappendix: str) -> None: _store_backtest_analysis_data(recordfilename, candles, dtappendix, "signals") _store_backtest_analysis_data(recordfilename, trades, dtappendix, "rejected") - - -def store_backtest_market_change( - recordfilename: Path, data: DataFrame, dtappendix: str) -> Path: - """ - Stores backtest market change average - :param recordfilename: Path object, which can either be a filename or a directory. - Filenames will be appended with a timestamp right before the suffix - while for directories, /backtest-result-_.pkl will be used - as filename - :param candles: Dict containing the backtesting data for analysis - :param dtappendix: Datetime to use for the filename - """ - filename = _generate_filename(recordfilename, f"{dtappendix}_market_change", '.feather') - data.reset_index().to_feather(filename, compression_level=9, compression='lz4') - - return filename