From 2ed808da1f4f45342a0a8fd41b158fb7b0e26b0d Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 28 Jun 2020 09:27:19 +0200 Subject: [PATCH] Extract .last_result.json to constant --- freqtrade/constants.py | 2 ++ freqtrade/data/btanalysis.py | 5 +-- freqtrade/optimize/optimize_reports.py | 5 ++- tests/data/test_btanalysis.py | 3 +- tests/optimize/test_optimize_reports.py | 46 ++++++++++++------------- 5 files changed, 32 insertions(+), 29 deletions(-) diff --git a/freqtrade/constants.py b/freqtrade/constants.py index ccb05a60f..1b414adb4 100644 --- a/freqtrade/constants.py +++ b/freqtrade/constants.py @@ -33,6 +33,8 @@ DEFAULT_DATAFRAME_COLUMNS = ['date', 'open', 'high', 'low', 'close', 'volume'] # it has wide consequences for stored trades files DEFAULT_TRADES_COLUMNS = ['timestamp', 'id', 'type', 'side', 'price', 'amount', 'cost'] +LAST_BT_RESULT_FN = '.last_result.json' + USERPATH_HYPEROPTS = 'hyperopts' USERPATH_STRATEGIES = 'strategies' USERPATH_NOTEBOOKS = 'notebooks' diff --git a/freqtrade/data/btanalysis.py b/freqtrade/data/btanalysis.py index 17d3fed14..0ae1809f3 100644 --- a/freqtrade/data/btanalysis.py +++ b/freqtrade/data/btanalysis.py @@ -10,6 +10,7 @@ import pandas as pd from datetime import timezone from freqtrade import persistence +from freqtrade.constants import LAST_BT_RESULT_FN from freqtrade.misc import json_load from freqtrade.persistence import Trade @@ -34,7 +35,7 @@ def get_latest_backtest_filename(directory: Union[Path, str]) -> str: directory = Path(directory) if not directory.is_dir(): raise ValueError(f"Directory '{directory}' does not exist.") - filename = directory / '.last_result.json' + filename = directory / LAST_BT_RESULT_FN if not filename.is_file(): raise ValueError(f"Directory '{directory}' does not seem to contain backtest statistics yet.") @@ -43,7 +44,7 @@ def get_latest_backtest_filename(directory: Union[Path, str]) -> str: data = json_load(file) if 'latest_backtest' not in data: - raise ValueError("Invalid '.last_result.json' format.") + raise ValueError(f"Invalid '{LAST_BT_RESULT_FN}' format.") return data['latest_backtest'] diff --git a/freqtrade/optimize/optimize_reports.py b/freqtrade/optimize/optimize_reports.py index b93e60dca..d1c45bd94 100644 --- a/freqtrade/optimize/optimize_reports.py +++ b/freqtrade/optimize/optimize_reports.py @@ -7,7 +7,7 @@ from arrow import Arrow from pandas import DataFrame from tabulate import tabulate -from freqtrade.constants import DATETIME_PRINT_FORMAT +from freqtrade.constants import DATETIME_PRINT_FORMAT, LAST_BT_RESULT_FN from freqtrade.data.btanalysis import calculate_max_drawdown, calculate_market_change from freqtrade.misc import file_dump_json @@ -21,8 +21,7 @@ def store_backtest_stats(recordfilename: Path, stats: Dict[str, DataFrame]) -> N ).with_suffix(recordfilename.suffix) file_dump_json(filename, stats) - latest_filename = Path.joinpath(recordfilename.parent, - '.last_result.json') + latest_filename = Path.joinpath(recordfilename.parent, LAST_BT_RESULT_FN) file_dump_json(latest_filename, {'latest_backtest': str(filename.name)}) diff --git a/tests/data/test_btanalysis.py b/tests/data/test_btanalysis.py index 63fe26eaa..144dc5162 100644 --- a/tests/data/test_btanalysis.py +++ b/tests/data/test_btanalysis.py @@ -6,6 +6,7 @@ from arrow import Arrow from pandas import DataFrame, DateOffset, Timestamp, to_datetime from freqtrade.configuration import TimeRange +from freqtrade.constants import LAST_BT_RESULT_FN from freqtrade.data.btanalysis import (BT_DATA_COLUMNS, analyze_trade_parallelism, calculate_market_change, @@ -73,7 +74,7 @@ def test_load_backtest_data_new_format(testdatadir): load_backtest_data(str("filename") + "nofile") with pytest.raises(ValueError, match=r"Unknown dataformat."): - load_backtest_data(testdatadir / '.last_result.json') + load_backtest_data(testdatadir / LAST_BT_RESULT_FN) def test_load_backtest_data_multi(testdatadir): diff --git a/tests/optimize/test_optimize_reports.py b/tests/optimize/test_optimize_reports.py index f908677d7..2431fa716 100644 --- a/tests/optimize/test_optimize_reports.py +++ b/tests/optimize/test_optimize_reports.py @@ -1,15 +1,15 @@ -from datetime import datetime +import re from pathlib import Path import pandas as pd -import re import pytest from arrow import Arrow from freqtrade.configuration import TimeRange +from freqtrade.constants import LAST_BT_RESULT_FN from freqtrade.data import history -from freqtrade.edge import PairInfo from freqtrade.data.btanalysis import get_latest_backtest_filename +from freqtrade.edge import PairInfo from freqtrade.optimize.optimize_reports import (generate_backtest_stats, generate_edge_table, generate_pair_metrics, @@ -93,25 +93,25 @@ def test_generate_backtest_stats(default_conf, testdatadir): # Above sample had no loosing trade assert strat_stats['max_drawdown'] == 0.0 - results = {'DefStrat': pd.DataFrame({"pair": ["UNITTEST/BTC", "UNITTEST/BTC", - "UNITTEST/BTC", "UNITTEST/BTC"], - "profit_percent": [0.003312, 0.010801, -0.013803, 0.002780], - "profit_abs": [0.000003, 0.000011, -0.000014, 0.000003], - "open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime, - Arrow(2017, 11, 14, 21, 36, 00).datetime, - Arrow(2017, 11, 14, 22, 12, 00).datetime, - Arrow(2017, 11, 14, 22, 44, 00).datetime], - "close_date": [Arrow(2017, 11, 14, 21, 35, 00).datetime, - Arrow(2017, 11, 14, 22, 10, 00).datetime, - Arrow(2017, 11, 14, 22, 43, 00).datetime, - Arrow(2017, 11, 14, 22, 58, 00).datetime], - "open_rate": [0.002543, 0.003003, 0.003089, 0.003214], - "close_rate": [0.002546, 0.003014, 0.0032903, 0.003217], - "trade_duration": [123, 34, 31, 14], - "open_at_end": [False, False, False, True], - "sell_reason": [SellType.ROI, SellType.STOP_LOSS, - SellType.ROI, SellType.FORCE_SELL] - })} + results = {'DefStrat': pd.DataFrame( + {"pair": ["UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC"], + "profit_percent": [0.003312, 0.010801, -0.013803, 0.002780], + "profit_abs": [0.000003, 0.000011, -0.000014, 0.000003], + "open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime, + Arrow(2017, 11, 14, 21, 36, 00).datetime, + Arrow(2017, 11, 14, 22, 12, 00).datetime, + Arrow(2017, 11, 14, 22, 44, 00).datetime], + "close_date": [Arrow(2017, 11, 14, 21, 35, 00).datetime, + Arrow(2017, 11, 14, 22, 10, 00).datetime, + Arrow(2017, 11, 14, 22, 43, 00).datetime, + Arrow(2017, 11, 14, 22, 58, 00).datetime], + "open_rate": [0.002543, 0.003003, 0.003089, 0.003214], + "close_rate": [0.002546, 0.003014, 0.0032903, 0.003217], + "trade_duration": [123, 34, 31, 14], + "open_at_end": [False, False, False, True], + "sell_reason": [SellType.ROI, SellType.STOP_LOSS, + SellType.ROI, SellType.FORCE_SELL] + })} assert strat_stats['max_drawdown'] == 0.0 assert strat_stats['drawdown_start'] == Arrow.fromtimestamp(0).datetime @@ -122,7 +122,7 @@ def test_generate_backtest_stats(default_conf, testdatadir): # Test storing stats filename = Path(testdatadir / 'btresult.json') - filename_last = Path(testdatadir / '.last_result.json') + filename_last = Path(testdatadir / LAST_BT_RESULT_FN) _backup_file(filename_last, copy_file=True) assert not filename.is_file()