mirror of
https://github.com/freqtrade/freqtrade.git
synced 2026-02-13 17:50:30 +00:00
Simplify backtest storage
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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, <directory>/backtest-result-<datetime>_<name>.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
|
||||
|
||||
Reference in New Issue
Block a user