Extract .last_result.json to constant
This commit is contained in:
parent
59e0ca0aaa
commit
2ed808da1f
@ -33,6 +33,8 @@ DEFAULT_DATAFRAME_COLUMNS = ['date', 'open', 'high', 'low', 'close', 'volume']
|
|||||||
# it has wide consequences for stored trades files
|
# it has wide consequences for stored trades files
|
||||||
DEFAULT_TRADES_COLUMNS = ['timestamp', 'id', 'type', 'side', 'price', 'amount', 'cost']
|
DEFAULT_TRADES_COLUMNS = ['timestamp', 'id', 'type', 'side', 'price', 'amount', 'cost']
|
||||||
|
|
||||||
|
LAST_BT_RESULT_FN = '.last_result.json'
|
||||||
|
|
||||||
USERPATH_HYPEROPTS = 'hyperopts'
|
USERPATH_HYPEROPTS = 'hyperopts'
|
||||||
USERPATH_STRATEGIES = 'strategies'
|
USERPATH_STRATEGIES = 'strategies'
|
||||||
USERPATH_NOTEBOOKS = 'notebooks'
|
USERPATH_NOTEBOOKS = 'notebooks'
|
||||||
|
@ -10,6 +10,7 @@ import pandas as pd
|
|||||||
from datetime import timezone
|
from datetime import timezone
|
||||||
|
|
||||||
from freqtrade import persistence
|
from freqtrade import persistence
|
||||||
|
from freqtrade.constants import LAST_BT_RESULT_FN
|
||||||
from freqtrade.misc import json_load
|
from freqtrade.misc import json_load
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
|
|
||||||
@ -34,7 +35,7 @@ def get_latest_backtest_filename(directory: Union[Path, str]) -> str:
|
|||||||
directory = Path(directory)
|
directory = Path(directory)
|
||||||
if not directory.is_dir():
|
if not directory.is_dir():
|
||||||
raise ValueError(f"Directory '{directory}' does not exist.")
|
raise ValueError(f"Directory '{directory}' does not exist.")
|
||||||
filename = directory / '.last_result.json'
|
filename = directory / LAST_BT_RESULT_FN
|
||||||
|
|
||||||
if not filename.is_file():
|
if not filename.is_file():
|
||||||
raise ValueError(f"Directory '{directory}' does not seem to contain backtest statistics yet.")
|
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)
|
data = json_load(file)
|
||||||
|
|
||||||
if 'latest_backtest' not in data:
|
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']
|
return data['latest_backtest']
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ from arrow import Arrow
|
|||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
from tabulate import tabulate
|
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.data.btanalysis import calculate_max_drawdown, calculate_market_change
|
||||||
from freqtrade.misc import file_dump_json
|
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)
|
).with_suffix(recordfilename.suffix)
|
||||||
file_dump_json(filename, stats)
|
file_dump_json(filename, stats)
|
||||||
|
|
||||||
latest_filename = Path.joinpath(recordfilename.parent,
|
latest_filename = Path.joinpath(recordfilename.parent, LAST_BT_RESULT_FN)
|
||||||
'.last_result.json')
|
|
||||||
file_dump_json(latest_filename, {'latest_backtest': str(filename.name)})
|
file_dump_json(latest_filename, {'latest_backtest': str(filename.name)})
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ from arrow import Arrow
|
|||||||
from pandas import DataFrame, DateOffset, Timestamp, to_datetime
|
from pandas import DataFrame, DateOffset, Timestamp, to_datetime
|
||||||
|
|
||||||
from freqtrade.configuration import TimeRange
|
from freqtrade.configuration import TimeRange
|
||||||
|
from freqtrade.constants import LAST_BT_RESULT_FN
|
||||||
from freqtrade.data.btanalysis import (BT_DATA_COLUMNS,
|
from freqtrade.data.btanalysis import (BT_DATA_COLUMNS,
|
||||||
analyze_trade_parallelism,
|
analyze_trade_parallelism,
|
||||||
calculate_market_change,
|
calculate_market_change,
|
||||||
@ -73,7 +74,7 @@ def test_load_backtest_data_new_format(testdatadir):
|
|||||||
load_backtest_data(str("filename") + "nofile")
|
load_backtest_data(str("filename") + "nofile")
|
||||||
|
|
||||||
with pytest.raises(ValueError, match=r"Unknown dataformat."):
|
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):
|
def test_load_backtest_data_multi(testdatadir):
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
from datetime import datetime
|
import re
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import re
|
|
||||||
import pytest
|
import pytest
|
||||||
from arrow import Arrow
|
from arrow import Arrow
|
||||||
|
|
||||||
from freqtrade.configuration import TimeRange
|
from freqtrade.configuration import TimeRange
|
||||||
|
from freqtrade.constants import LAST_BT_RESULT_FN
|
||||||
from freqtrade.data import history
|
from freqtrade.data import history
|
||||||
from freqtrade.edge import PairInfo
|
|
||||||
from freqtrade.data.btanalysis import get_latest_backtest_filename
|
from freqtrade.data.btanalysis import get_latest_backtest_filename
|
||||||
|
from freqtrade.edge import PairInfo
|
||||||
from freqtrade.optimize.optimize_reports import (generate_backtest_stats,
|
from freqtrade.optimize.optimize_reports import (generate_backtest_stats,
|
||||||
generate_edge_table,
|
generate_edge_table,
|
||||||
generate_pair_metrics,
|
generate_pair_metrics,
|
||||||
@ -93,25 +93,25 @@ def test_generate_backtest_stats(default_conf, testdatadir):
|
|||||||
# Above sample had no loosing trade
|
# Above sample had no loosing trade
|
||||||
assert strat_stats['max_drawdown'] == 0.0
|
assert strat_stats['max_drawdown'] == 0.0
|
||||||
|
|
||||||
results = {'DefStrat': pd.DataFrame({"pair": ["UNITTEST/BTC", "UNITTEST/BTC",
|
results = {'DefStrat': pd.DataFrame(
|
||||||
"UNITTEST/BTC", "UNITTEST/BTC"],
|
{"pair": ["UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC", "UNITTEST/BTC"],
|
||||||
"profit_percent": [0.003312, 0.010801, -0.013803, 0.002780],
|
"profit_percent": [0.003312, 0.010801, -0.013803, 0.002780],
|
||||||
"profit_abs": [0.000003, 0.000011, -0.000014, 0.000003],
|
"profit_abs": [0.000003, 0.000011, -0.000014, 0.000003],
|
||||||
"open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime,
|
"open_date": [Arrow(2017, 11, 14, 19, 32, 00).datetime,
|
||||||
Arrow(2017, 11, 14, 21, 36, 00).datetime,
|
Arrow(2017, 11, 14, 21, 36, 00).datetime,
|
||||||
Arrow(2017, 11, 14, 22, 12, 00).datetime,
|
Arrow(2017, 11, 14, 22, 12, 00).datetime,
|
||||||
Arrow(2017, 11, 14, 22, 44, 00).datetime],
|
Arrow(2017, 11, 14, 22, 44, 00).datetime],
|
||||||
"close_date": [Arrow(2017, 11, 14, 21, 35, 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, 10, 00).datetime,
|
||||||
Arrow(2017, 11, 14, 22, 43, 00).datetime,
|
Arrow(2017, 11, 14, 22, 43, 00).datetime,
|
||||||
Arrow(2017, 11, 14, 22, 58, 00).datetime],
|
Arrow(2017, 11, 14, 22, 58, 00).datetime],
|
||||||
"open_rate": [0.002543, 0.003003, 0.003089, 0.003214],
|
"open_rate": [0.002543, 0.003003, 0.003089, 0.003214],
|
||||||
"close_rate": [0.002546, 0.003014, 0.0032903, 0.003217],
|
"close_rate": [0.002546, 0.003014, 0.0032903, 0.003217],
|
||||||
"trade_duration": [123, 34, 31, 14],
|
"trade_duration": [123, 34, 31, 14],
|
||||||
"open_at_end": [False, False, False, True],
|
"open_at_end": [False, False, False, True],
|
||||||
"sell_reason": [SellType.ROI, SellType.STOP_LOSS,
|
"sell_reason": [SellType.ROI, SellType.STOP_LOSS,
|
||||||
SellType.ROI, SellType.FORCE_SELL]
|
SellType.ROI, SellType.FORCE_SELL]
|
||||||
})}
|
})}
|
||||||
|
|
||||||
assert strat_stats['max_drawdown'] == 0.0
|
assert strat_stats['max_drawdown'] == 0.0
|
||||||
assert strat_stats['drawdown_start'] == Arrow.fromtimestamp(0).datetime
|
assert strat_stats['drawdown_start'] == Arrow.fromtimestamp(0).datetime
|
||||||
@ -122,7 +122,7 @@ def test_generate_backtest_stats(default_conf, testdatadir):
|
|||||||
|
|
||||||
# Test storing stats
|
# Test storing stats
|
||||||
filename = Path(testdatadir / 'btresult.json')
|
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)
|
_backup_file(filename_last, copy_file=True)
|
||||||
assert not filename.is_file()
|
assert not filename.is_file()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user