Avoid recalculating statistics for comparison line
This commit is contained in:
parent
8373a4e713
commit
6abd6bceb9
@ -1,4 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
from copy import deepcopy
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, List, Union
|
from typing import Any, Dict, List, Union
|
||||||
@ -194,29 +195,21 @@ def generate_sell_reason_stats(max_open_trades: int, results: DataFrame) -> List
|
|||||||
return tabular_data
|
return tabular_data
|
||||||
|
|
||||||
|
|
||||||
def generate_strategy_comparison(all_results: Dict) -> List[Dict]:
|
def generate_strategy_comparison(bt_stats: Dict) -> List[Dict]:
|
||||||
"""
|
"""
|
||||||
Generate summary per strategy
|
Generate summary per strategy
|
||||||
:param all_results: Dict of <Strategyname: DataFrame> containing results for all strategies
|
:param result: Dict of <Strategyname: DataFrame> containing results for all strategies
|
||||||
:return: List of Dicts containing the metrics per Strategy
|
:return: List of Dicts containing the metrics per Strategy
|
||||||
"""
|
"""
|
||||||
|
|
||||||
tabular_data = []
|
tabular_data = []
|
||||||
for strategy, results in all_results.items():
|
for strategy, result in bt_stats.items():
|
||||||
tabular_data.append(_generate_result_line(
|
tabular_data.append(deepcopy(result['results_per_pair'][-1]))
|
||||||
results['results'], results['config']['dry_run_wallet'], strategy)
|
# Update "key" to strategy (results_per_pair has it as "Total").
|
||||||
)
|
tabular_data[-1]['key'] = strategy
|
||||||
try:
|
tabular_data[-1]['max_drawdown_account'] = result['max_drawdown_account']
|
||||||
max_drawdown_per, _, _, _, _, _ = calculate_max_drawdown(results['results'],
|
tabular_data[-1]['max_drawdown_abs'] = round_coin_value(
|
||||||
value_col='profit_ratio')
|
result['max_drawdown_abs'], result['stake_currency'], False)
|
||||||
max_drawdown_abs, _, _, _, _, _ = calculate_max_drawdown(results['results'],
|
|
||||||
value_col='profit_abs')
|
|
||||||
except ValueError:
|
|
||||||
max_drawdown_per = 0
|
|
||||||
max_drawdown_abs = 0
|
|
||||||
tabular_data[-1]['max_drawdown_per'] = round(max_drawdown_per * 100, 2)
|
|
||||||
tabular_data[-1]['max_drawdown_abs'] = \
|
|
||||||
round_coin_value(max_drawdown_abs, results['config']['stake_currency'], False)
|
|
||||||
return tabular_data
|
return tabular_data
|
||||||
|
|
||||||
|
|
||||||
@ -524,7 +517,7 @@ def generate_backtest_stats(btdata: Dict[str, DataFrame],
|
|||||||
min_date, max_date, market_change=market_change)
|
min_date, max_date, market_change=market_change)
|
||||||
result['strategy'][strategy] = strat_stats
|
result['strategy'][strategy] = strat_stats
|
||||||
|
|
||||||
strategy_results = generate_strategy_comparison(all_results=all_results)
|
strategy_results = generate_strategy_comparison(bt_stats=result['strategy'])
|
||||||
|
|
||||||
result['strategy_comparison'] = strategy_results
|
result['strategy_comparison'] = strategy_results
|
||||||
|
|
||||||
@ -649,7 +642,7 @@ def text_table_strategy(strategy_results, stake_currency: str) -> str:
|
|||||||
headers.append('Drawdown')
|
headers.append('Drawdown')
|
||||||
|
|
||||||
# Align drawdown string on the center two space separator.
|
# Align drawdown string on the center two space separator.
|
||||||
drawdown = [f'{t["max_drawdown_per"]:.2f}' for t in strategy_results]
|
drawdown = [f'{t["max_drawdown_account"] * 100:.2f}' for t in strategy_results]
|
||||||
dd_pad_abs = max([len(t['max_drawdown_abs']) for t in strategy_results])
|
dd_pad_abs = max([len(t['max_drawdown_abs']) for t in strategy_results])
|
||||||
dd_pad_per = max([len(dd) for dd in drawdown])
|
dd_pad_per = max([len(dd) for dd in drawdown])
|
||||||
drawdown = [f'{t["max_drawdown_abs"]:>{dd_pad_abs}} {stake_currency} {dd:>{dd_pad_per}}%'
|
drawdown = [f'{t["max_drawdown_abs"]:>{dd_pad_abs}} {stake_currency} {dd:>{dd_pad_per}}%'
|
||||||
|
Loading…
Reference in New Issue
Block a user