From b92535deea5f11133047f9be99bede9e94bd3ad5 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Nov 2025 08:13:48 +0100 Subject: [PATCH] feat: Add format_pct helper method --- freqtrade/util/__init__.py | 2 ++ freqtrade/util/formatters.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/freqtrade/util/__init__.py b/freqtrade/util/__init__.py index 98fda93cd..de8923389 100644 --- a/freqtrade/util/__init__.py +++ b/freqtrade/util/__init__.py @@ -18,6 +18,7 @@ from freqtrade.util.formatters import ( fmt_coin, fmt_coin2, format_duration, + format_pct, round_value, ) from freqtrade.util.ft_precise import FtPrecise @@ -44,6 +45,7 @@ __all__ = [ "format_date", "format_ms_time", "format_ms_time_det", + "format_pct", "get_dry_run_wallet", "FtPrecise", "PeriodicCache", diff --git a/freqtrade/util/formatters.py b/freqtrade/util/formatters.py index caac5a68b..58623de66 100644 --- a/freqtrade/util/formatters.py +++ b/freqtrade/util/formatters.py @@ -1,5 +1,7 @@ from datetime import timedelta +from numpy import isnan + from freqtrade.constants import DECIMAL_PER_COIN_FALLBACK, DECIMALS_PER_COIN @@ -80,3 +82,15 @@ def format_duration(td: timedelta) -> str: h, r = divmod(td.seconds, 3600) m, _ = divmod(r, 60) return f"{d}d {h:02d}:{m:02d}" + + +def format_pct(value: float | None) -> str: + """ + Format a float value as percentage string with 2 decimals + None and NaN values are formatted as "N/A" + :param value: Float value to format + :return: Formatted percentage string + """ + if value is None or isnan(value): + return "N/A" + return f"{value:.2%}"