Use exchange fees, UPL, funding for LIVE PnL; USDC 1:1 to USDT.

Option open P&L stays local (option net); exit target ignores estimated close fees.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-26 21:49:20 +08:00
parent b7e055e37b
commit ca66c494e7
12 changed files with 685 additions and 25 deletions
+3
View File
@@ -157,8 +157,11 @@ export type PlanState = {
expiry_ms?: number | null;
perp_upl?: number;
option_upl?: number;
fees_paid?: number;
funding_usdt?: number;
est_close_fees?: number;
net_pnl?: number;
pnl_source?: string;
index_px?: number | null;
entry_index_px?: number;
move_points?: number;
+19 -3
View File
@@ -275,13 +275,27 @@ export default function PlanPage() {
</span>
</div>
<div className="kv">
<span></span>
<span>{plan?.mode === "LIVE" ? "(交易所)" : ""}</span>
<span className={`mono ${pnlClass(pos?.perp_upl)}`}>{fmt(pos?.perp_upl)}</span>
</div>
<div className="kv">
<span></span>
<span>{plan?.mode === "LIVE" ? "期权净盈亏" : "期权浮盈"}</span>
<span className={`mono ${pnlClass(pos?.option_upl)}`}>{fmt(pos?.option_upl)}</span>
</div>
{plan?.mode === "LIVE" && open ? (
<>
<div className="kv">
<span></span>
<span className="mono">{fmt(pos?.fees_paid)}</span>
</div>
<div className="kv">
<span></span>
<span className={`mono ${pnlClass(pos?.funding_usdt)}`}>
{fmt(pos?.funding_usdt)}
</span>
</div>
</>
) : null}
{plan?.last_error ? (
<div className="kv">
<span></span>
@@ -390,7 +404,9 @@ export default function PlanPage() {
<span className="pos-value mono">{fmt(pos?.option_mark_px)}</span>
</div>
<div className="pos-cell">
<span className="pos-label"></span>
<span className="pos-label">
{plan?.mode === "LIVE" ? "净盈亏" : "浮盈亏"}
</span>
<span className={`pos-value mono ${pnlClass(pos?.option_upl)}`}>
{fmt(pos?.option_upl)}
</span>