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%}"