From cad7b02266c6fc582f4ea70422f0128fd0178f02 Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Fri, 18 Sep 2026 10:36:17 +0800 Subject: feat(frontend): 回测结果页与对比表接入投入口径一行三项 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [变更性质] 页面集成,任务 A1/A2 前端口径统一。 [新增功能] 结果页 metric 区新增累计投入/最终持仓估值/投入回报率三卡(data-testid=capital-reporting,注明"不含初始账户闲置现金"口径),复用现有 .metric 与 formatMoney 数字格式、不加新字色;实验记录页条件差异表新增同口径三行(逐 run 对照,动作同步深化到 status/time 之后)。 [实现方案] 共享 capitalReporting 推导;resultsAccounting.test 断言更新为 9 张 metric 卡并新增三卡 DOM 实测断言。 [影响范围] ProjectResultsTab、RunsPage、resultsAccounting.test;vitest 84/84。 --- frontend/src/pages/ProjectResultsTab.svelte | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'frontend/src/pages/ProjectResultsTab.svelte') diff --git a/frontend/src/pages/ProjectResultsTab.svelte b/frontend/src/pages/ProjectResultsTab.svelte index f479116..c08bf3f 100644 --- a/frontend/src/pages/ProjectResultsTab.svelte +++ b/frontend/src/pages/ProjectResultsTab.svelte @@ -14,6 +14,7 @@ metricsLabels, metricsRow } from '../lib/format'; + import { capitalReporting } from '../lib/capitalMetrics'; import type { Run, BacktestResult } from '../lib/types'; interface Props { @@ -106,6 +107,8 @@ const ml = $derived(metricsLabels()); const mr = $derived(result ? metricsRow(result.metrics) : []); + // 投入口径 reporting(任务 A):投入/持仓估值/回报,口径注明不含闲置现金 + const cap = $derived(result ? capitalReporting(result) : null);
@@ -185,6 +188,23 @@
{/if} + {#if cap} +
+
+
累计投入
+
{formatMoney(cap.invested)}
+
+
+
最终持仓估值
+
{formatMoney(cap.holdingValue)}
+
+
+
投入回报率
+
{cap.returnPct ?? '—'}
+
+
+

投入口径不含初始账户闲置现金:累计投入 = 首日现金 − 末日现金;持仓估值 = 末日持仓 × 最新收盘价。

+ {/if}

平仓回合数为已完成的开仓并全部平仓的完整回合(1 个回合 = 1 次平仓),不含撤单与未平仓的单笔成交;成交记录中的“金额”为真实成交额(数量 × 成交价),非持仓成本。结果非投资建议;未完全模拟流动性/涨跌停等限制。 引擎 {result.engine?.name} {result.engine?.version} -- cgit v1.2.3