fix(frontend): CTA结果页补净值曲线图(零成交也出图)
CI/CD / test (push) Successful in 8s
CI/CD / nas-deploy (push) Successful in 21s
CI/CD / nas-verify (push) Successful in 3s

Result.vue 拉了 equity-curve 数据却未画净值曲线;且 benchmark-curve/risk-series 依赖 *_metrics.json,CTA 引擎当前未生成该文件,致收益概述图全空。新增 EquityCurve.vue 走 equity-curve 接口(独立于 metrics.json,数据源 BacktestResult.equity_curve),零成交时画 N 天平线(初始资金不变),满足'有结果就有图'。vue-tsc RC=0。
This commit is contained in:
2026-08-02 19:10:55 +08:00
parent 9588a77a01
commit 857d43c6c2
2 changed files with 69 additions and 0 deletions
+10
View File
@@ -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<T extends { dates: string[] }>(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 {
<!-- Tab 1: 收益概述 -->
<el-tab-pane label="收益概述">
<div class="charts-container">
<el-card>
<EquityCurve :dates="equityDates" :equity="equityValues" />
</el-card>
<el-card>
<BenchmarkCurve
:dates="filteredBenchmarkCurve.dates"