diff --git a/frontend/src/components/backtest/EquityCurve.vue b/frontend/src/components/backtest/EquityCurve.vue
new file mode 100644
index 0000000..d34afa3
--- /dev/null
+++ b/frontend/src/components/backtest/EquityCurve.vue
@@ -0,0 +1,59 @@
+
+
+
+ 暂无净值数据
+
+
+
+
diff --git a/frontend/src/views/backtest/Result.vue b/frontend/src/views/backtest/Result.vue
index 1b5c970..6eee97b 100644
--- a/frontend/src/views/backtest/Result.vue
+++ b/frontend/src/views/backtest/Result.vue
@@ -14,6 +14,7 @@ import AlphaChart from '@/components/backtest/AlphaChart.vue'
import BetaChart from '@/components/backtest/BetaChart.vue'
import DrawdownChart from '@/components/backtest/DrawdownChart.vue'
import VolatilityChart from '@/components/backtest/VolatilityChart.vue'
+import EquityCurve from '@/components/backtest/EquityCurve.vue'
const route = useRoute()
const taskId = String(route.params.id)
@@ -109,6 +110,12 @@ function filterDataByTimeRange(data: T): T {
const filteredBenchmarkCurve = computed(() => filterDataByTimeRange(benchmarkCurve.value))
const filteredRiskSeries = computed(() => filterDataByTimeRange(riskSeries.value))
+// 净值曲线(走 equity-curve 接口,独立于 benchmark-curve)。benchmark-curve/risk-series
+// 依赖 *_metrics.json,CTA 引擎当前未生成该文件 → 收益概述图全空;equity-curve 直接
+// 来自 BacktestResult.equity_curve(零成交也有 N 天平线),单独画保证"有结果就有图"。
+const equityDates = computed(() => equity.value.map((e) => fmtDate(e.date)))
+const equityValues = computed(() => equity.value.map((e) => e.balance))
+
onMounted(async () => {
// 请求隔离:任一接口失败(如 benchmark-curve/risk-series 数据缺失)不得阻塞
// 其余请求。statistics/equity/trades 有数据时必须正常渲染。用 Promise.allSettled
@@ -228,6 +235,9 @@ function fmtDate(d: string): string {
+
+
+