From 6abd6bceb9337f942a396d6c70d5d62296ffe56f Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 5 Jan 2022 19:21:24 +0100 Subject: [PATCH] Avoid recalculating statistics for comparison line --- freqtrade/optimize/optimize_reports.py | 31 ++++++++++---------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/freqtrade/optimize/optimize_reports.py b/freqtrade/optimize/optimize_reports.py index 56ec51a56..168c306e2 100644 --- a/freqtrade/optimize/optimize_reports.py +++ b/freqtrade/optimize/optimize_reports.py @@ -1,4 +1,5 @@ import logging +from copy import deepcopy from datetime import datetime, timedelta, timezone from pathlib import Path 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 -def generate_strategy_comparison(all_results: Dict) -> List[Dict]: +def generate_strategy_comparison(bt_stats: Dict) -> List[Dict]: """ Generate summary per strategy - :param all_results: Dict of containing results for all strategies + :param result: Dict of containing results for all strategies :return: List of Dicts containing the metrics per Strategy """ tabular_data = [] - for strategy, results in all_results.items(): - tabular_data.append(_generate_result_line( - results['results'], results['config']['dry_run_wallet'], strategy) - ) - try: - max_drawdown_per, _, _, _, _, _ = calculate_max_drawdown(results['results'], - value_col='profit_ratio') - 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) + for strategy, result in bt_stats.items(): + tabular_data.append(deepcopy(result['results_per_pair'][-1])) + # Update "key" to strategy (results_per_pair has it as "Total"). + tabular_data[-1]['key'] = strategy + tabular_data[-1]['max_drawdown_account'] = result['max_drawdown_account'] + tabular_data[-1]['max_drawdown_abs'] = round_coin_value( + result['max_drawdown_abs'], result['stake_currency'], False) return tabular_data @@ -524,7 +517,7 @@ def generate_backtest_stats(btdata: Dict[str, DataFrame], min_date, max_date, market_change=market_change) 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 @@ -649,7 +642,7 @@ def text_table_strategy(strategy_results, stake_currency: str) -> str: headers.append('Drawdown') # 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_per = max([len(dd) for dd in drawdown]) drawdown = [f'{t["max_drawdown_abs"]:>{dd_pad_abs}} {stake_currency} {dd:>{dd_pad_per}}%'