test: add test for wallet based output

This commit is contained in:
Matthias
2026-04-11 17:25:58 +02:00
parent bc0c8ffb71
commit 64ceb028ac
+54
View File
@@ -28,6 +28,7 @@ from freqtrade.optimize.optimize_reports import (
generate_trading_stats,
show_sorted_pairlist,
store_backtest_results,
text_table_add_metrics,
text_table_bt_results,
text_table_strategy,
)
@@ -36,6 +37,7 @@ from freqtrade.optimize.optimize_reports.optimize_reports import (
_get_resample_from_period,
calc_streak,
generate_tag_metrics,
generate_wallet_stats,
)
from freqtrade.resolvers.strategy_resolver import StrategyResolver
from freqtrade.util import dt_ts, format_duration
@@ -616,6 +618,58 @@ def test_text_table_strategy(testdatadir, capsys):
)
def test_generate_wallet_stats_extended_metrics():
wallet_df = pd.DataFrame(
{
"date": [
dt_utc(2025, 1, 1, 0, 0, 0),
dt_utc(2025, 1, 1, 12, 0, 0),
dt_utc(2025, 1, 1, 18, 0, 0),
dt_utc(2025, 1, 3, 0, 0, 0),
],
"currency": ["BTC", "BTC", "BTC", "BTC"],
"rate": [1.0, 1.0, 1.0, 1.0],
"balance": [100.0, 120.0, 80.0, 110.0],
}
)
stats = generate_wallet_stats(wallet_df, "BTC")
assert "sharpe" in stats
assert "sortino" in stats
assert "calmar" in stats
assert "max_drawdown_account" in stats
assert "max_drawdown_abs" in stats
assert pytest.approx(stats["max_drawdown_account"]) == 1 / 3
assert stats["drawdown_start"] == "2025-01-01 12:00:00"
assert stats["drawdown_end"] == "2025-01-01 18:00:00"
def test_text_table_add_metrics_shows_wallet_ratios(testdatadir, capsys):
filename = testdatadir / "backtest_results/backtest-result.json"
bt_data = load_backtest_stats(filename)
strat_results = next(iter(bt_data["strategy"].values()))
strat_results["wallet_stats"] = {
"low_balance": 0.95,
"high_balance": 1.12,
"low_date": "2025-01-01 18:00:00",
"high_date": "2025-01-01 12:00:00",
"sharpe": 1.23,
"sortino": 2.34,
"calmar": 3.45,
"max_drawdown_account": 0.12,
"max_drawdown_abs": 0.05,
}
text_table_add_metrics(strat_results)
text = capsys.readouterr().out
assert "Sharpe ratio balance" in text
assert "Sortino ratio balance" in text
assert "Calmar ratio balance" in text
assert "Max drawdown balance" in text
def test_generate_periodic_breakdown_stats(testdatadir):
filename = testdatadir / "backtest_results/backtest-result.json"
bt_data = load_backtest_data(filename).to_dict(orient="records")