Skip to content

Commit cbb0294

Browse files
committed
Format duration to make results more readable
1 parent fbe38c3 commit cbb0294

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

freqtrade/optimize/optimize_reports/optimize_reports.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
BacktestResultType,
2424
get_BacktestResultType_default,
2525
)
26-
from freqtrade.util import decimals_per_coin, fmt_coin, get_dry_run_wallet
26+
from freqtrade.util import decimals_per_coin, fmt_coin, format_duration, get_dry_run_wallet
2727

2828

2929
logger = logging.getLogger(__name__)
@@ -383,19 +383,19 @@ def generate_trading_stats(results: DataFrame) -> dict[str, Any]:
383383
"losses": len(losing_trades),
384384
"draws": len(draw_trades),
385385
"winrate": len(winning_trades) / len(results) if len(results) else 0.0,
386-
"holding_avg": holding_avg,
386+
"holding_avg": format_duration(holding_avg),
387387
"holding_avg_s": holding_avg.total_seconds(),
388-
"winner_holding_min": winner_holding_min,
388+
"winner_holding_min": format_duration(winner_holding_min),
389389
"winner_holding_min_s": winner_holding_min.total_seconds(),
390-
"winner_holding_max": winner_holding_max,
390+
"winner_holding_max": format_duration(winner_holding_max),
391391
"winner_holding_max_s": winner_holding_max.total_seconds(),
392-
"winner_holding_avg": winner_holding_avg,
392+
"winner_holding_avg": format_duration(winner_holding_avg),
393393
"winner_holding_avg_s": winner_holding_avg.total_seconds(),
394-
"loser_holding_min": loser_holding_min,
394+
"loser_holding_min": format_duration(loser_holding_min),
395395
"loser_holding_min_s": loser_holding_min.total_seconds(),
396-
"loser_holding_max": loser_holding_max,
396+
"loser_holding_max": format_duration(loser_holding_max),
397397
"loser_holding_max_s": loser_holding_max.total_seconds(),
398-
"loser_holding_avg": loser_holding_avg,
398+
"loser_holding_avg": format_duration(loser_holding_avg),
399399
"loser_holding_avg_s": loser_holding_avg.total_seconds(),
400400
"max_consecutive_wins": winstreak,
401401
"max_consecutive_losses": loss_streak,

freqtrade/util/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@
1313
shorten_date,
1414
)
1515
from freqtrade.util.dry_run_wallet import get_dry_run_wallet
16-
from freqtrade.util.formatters import decimals_per_coin, fmt_coin, fmt_coin2, round_value
16+
from freqtrade.util.formatters import (
17+
decimals_per_coin,
18+
fmt_coin,
19+
fmt_coin2,
20+
format_duration,
21+
round_value,
22+
)
1723
from freqtrade.util.ft_precise import FtPrecise
1824
from freqtrade.util.measure_time import MeasureTime
1925
from freqtrade.util.periodic_cache import PeriodicCache
@@ -44,6 +50,7 @@
4450
"shorten_date",
4551
"decimals_per_coin",
4652
"round_value",
53+
"format_duration",
4754
"fmt_coin",
4855
"fmt_coin2",
4956
"MeasureTime",

freqtrade/util/formatters.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from datetime import timedelta
2+
13
from freqtrade.constants import DECIMAL_PER_COIN_FALLBACK, DECIMALS_PER_COIN
24

35

@@ -66,3 +68,15 @@ def fmt_coin2(
6668
val = f"{val} {coin}"
6769

6870
return val
71+
72+
73+
def format_duration(td: timedelta) -> str:
74+
"""
75+
Format a timedelta object to "XXd HH:MM" format
76+
:param td: Timedelta object to format
77+
:return: Formatted time string
78+
"""
79+
d = td.days
80+
h, r = divmod(td.seconds, 3600)
81+
m, s = divmod(r, 60)
82+
return f"{d}d {h:02d}:{m:02d}"

0 commit comments

Comments
 (0)