import pandas as pd import plotly.graph_objects as go from jinja2 import Template import json import datetime # === CONFIGURATION === SUMMARY_FILE = "user_data/backtest_results/result.json" # chemin vers ton JSON BALANCE_HISTORY_FILE = "user_data/backtest_results/backtest_result.json" # ou fichier contenant le portefeuille # === CHARGEMENT DES DONNÉES === with open(SUMMARY_FILE, "r") as f: summary = json.load(f) df_summary = pd.DataFrame([summary]) start = summary.get("backtest_start", "") end = summary.get("backtest_end", "") final_balance = summary.get("final_balance", 0) # === AFFICHAGE DES ÉVOLUTIONS DE BALANCE === result = pd.read_json(BALANCE_HISTORY_FILE) result["date"] = pd.to_datetime(result["date"]) balance_trace = go.Scatter( x=result["date"], y=result["balance"], mode="lines", name="Balance", line=dict(color="green") ) layout = go.Layout( title="Évolution du portefeuille", xaxis_title="Date", yaxis_title="Balance (USDT)", template="plotly_white" ) fig = go.Figure(data=[balance_trace], layout=layout) fig.write_html("balance_plot.html", include_plotlyjs="cdn") # === GÉNÉRATION DU RAPPORT HTML === template_str = """ Rapport de Backtest

Rapport de Backtest

Période : {{ start }} → {{ end }}

{% for key, value in metrics.items() %} {% endfor %}
MétriqueValeur
{{ key }}{{ value }}

Évolution de la balance

""" metrics = { "Trading Mode": summary.get("strategy", ""), "Total Trades": summary.get("total_trades", 0), "Final Balance": f"{final_balance:.2f} USDT", "Profit (%)": f"{summary.get('profit_total_pct', 0):.2f}%", "CAGR": f"{summary.get('cagr', 0):.2f}%", "Sharpe": summary.get("sharpe", ""), "Sortino": summary.get("sortino", ""), "SQN": summary.get("sqn", ""), "Calmar": summary.get("calmar", ""), "Best Pair": summary.get("best_pair", ""), "Worst Pair": summary.get("worst_pair", ""), "Max Drawdown": summary.get("max_drawdown", ""), } template = Template(template_str) html_content = template.render(start=start, end=end, metrics=metrics) with open("backtest_report.html", "w") as f: f.write(html_content) print("✅ Rapport généré : backtest_report.html")