import { getAccount, getDeals, type Deal } from "@/lib/mt5"; import { formatCurrency, formatDate } from "@/lib/format"; import EquityChart from "@/components/EquityChart"; import TradesRefresher from "@/components/TradesRefresher"; export const dynamic = "force-dynamic"; const MAGIC = 19730; export default async function TradesPage() { let deals: Deal[] = []; let account = null; let error = false; try { const now = new Date().toISOString().slice(0, 19); [account, deals] = await Promise.all([ getAccount(), getDeals("2025-01-01T00:00:00", now), ]); } catch { error = true; } const aresDeals = deals.filter(d => d.magic === MAGIC && d.type !== 2); const closed = aresDeals.filter(d => d.entry === 1); const wins = closed.filter(d => d.profit > 0); const losses = closed.filter(d => d.profit < 0); const netPnl = closed.reduce((s, d) => s + d.profit + d.swap + d.commission, 0); const grossW = wins.reduce((s, d) => s + d.profit, 0); const grossL = Math.abs(losses.reduce((s, d) => s + d.profit, 0)); const pf = grossL > 0 ? grossW / grossL : 0; const wr = closed.length > 0 ? (wins.length / closed.length) * 100 : 0; const currency = account?.currency ?? "USD"; return ( <>

Live Forward Test

Trade History

All closed trades from ARES · magic {MAGIC}

{error ? (
Unable to fetch trade data.
) : ( <> {/* Stats */}
{[ { label: "Total Trades", value: closed.length.toString(), mono: true }, { label: "Win Rate", value: `${wr.toFixed(1)}%`, mono: true }, { label: "Profit Factor",value: pf > 0 ? pf.toFixed(2) : "—", mono: true }, { label: "Net P&L", value: formatCurrency(netPnl, currency), mono: true, colored: netPnl !== 0 ? netPnl > 0 : undefined }, { label: "W / L", value: `${wins.length} / ${losses.length}`, mono: true }, ].map(({ label, value, mono, colored }) => (

{label}

{value}

))}
{/* Equity curve */}

Equity Curve

{/* Trade table */}

Closed Trades

{closed.length === 0 ? (
No closed trades yet.
) : (
{["Time", "Symbol", "Side", "Volume", "Price", "P&L"].map(h => ( ))} {closed.slice().reverse().map((d) => ( ))}
{h}
{formatDate(d.time)} {d.symbol || "—"} {d.type === 0 ? "BUY" : "SELL"} {d.volume} {d.price.toFixed(2)} = 0 ? "text-bull" : "text-bear"}`}> {formatCurrency(d.profit, currency)}
)}
)} ); }