feat: Equity/Avail funds tile in dashboard P&L strip

Shows total_equity and buying_power (settled available cash) from the
latest account snapshot. On the Tradier live cash account these diverge
for days after a deposit or sale (T+1) — the bot sizes off equity but
buys need settled cash, so the gap explains rejected entries at a glance.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
momentum devandClaude Fable 5 committed 2026-07-30 13:44:49 -05:00
1 parent 3a28b0f6a7
commit 3d6bc36955
1 file changed
+10
+10
View File
@@ -498,6 +498,7 @@
<div class="pnl-cell"><div class="label">Win Rate</div><div class="value num" id="pnl-winrate">—</div></div>
<div class="pnl-cell"><div class="label">Avg R</div><div class="value num" id="pnl-avgr">—</div></div>
<div class="pnl-cell"><div class="label">Open / Closed</div><div class="value num" id="pnl-counts">—</div></div>
<div class="pnl-cell"><div class="label">Equity / Avail</div><div class="value num" id="pnl-funds">—</div></div>
<div class="pnl-cell pnl-spark"><div class="label">Day Curve</div><div id="equity-spark" class="eqspark">—</div></div>
</div>
@@ -1450,6 +1451,15 @@ function render(d) {
$("pnl-avgr").className = "value num " + (p.avg_r_multiple > 0 ? "pos" : p.avg_r_multiple < 0 ? "neg" : "");
$("pnl-counts").textContent = (p.open_positions != null ? p.open_positions : 0) + " / " + (p.closed_trades != null ? p.closed_trades : 0);
$("pnl-counts").className = "value num";
// equity + settled/available funds (cash account: buys need settled cash,
// so available can lag equity by days after a deposit or sale)
if (acct0.account_id) {
const eq = acct0.total_equity != null ? acct0.total_equity : acct0.net_liquidating_value;
const avail = acct0.buying_power;
$("pnl-funds").textContent = money(eq) + " / " + (avail != null ? money(avail) : "—");
} else {
$("pnl-funds").textContent = "—";
}
// portfolio risk strip + naked-position alarm — the conditions that silently
// cost money this session, now visible.