运行详情页面(RunDetail)

📎 引用文件

本文引用的文件 - frontend/src/pages/RunDetail.tsx - frontend/src/lib/api.ts - frontend/src/components/charts/CandlestickChart.tsx - frontend/src/components/charts/EquityChart.tsx - frontend/src/components/charts/ValidationPanel.tsx

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本页面为 Vibe-Trading 的回测“运行详情”视图,用于集中展示一次回测运行的结果与过程。其能力覆盖: - 绩效指标卡片、收益曲线与K线图、交易记录列表、风险评估与再平衡摘要、运行卡(Run Card)、源码查看等。 - 支持多标的图表叠加、批量加载、CSV导出、分页与筛选、错误边界保护等交互。 - 通过后端 API 按需拉取数据,结合前端缓存与进度反馈,实现大数据量下的流畅体验。

项目结构

运行详情页面由单一 React 组件构成,配合通用图表与验证面板组件以及统一的 API 客户端完成数据获取与渲染。

graph TB A["运行详情页面<br/>RunDetail.tsx"] --> B["API 客户端<br/>api.ts"] A --> C["K线图组件<br/>CandlestickChart.tsx"] A --> D["权益曲线组件<br/>EquityChart.tsx"] A --> E["验证面板组件<br/>ValidationPanel.tsx"] B --> F["后端接口 /runs/:id<br/>/runs/:id/code"]

图示来源 - frontend/src/pages/RunDetail.tsx:98-396 - frontend/src/lib/api.ts:123-142

章节来源 - frontend/src/pages/RunDetail.tsx:98-396 - frontend/src/lib/api.ts:123-142

核心组件

章节来源 - frontend/src/pages/RunDetail.tsx:98-396 - frontend/src/pages/RunDetail.tsx:640-780 - frontend/src/pages/RunDetail.tsx:806-953 - frontend/src/pages/RunDetail.tsx:399-484 - frontend/src/pages/RunDetail.tsx:491-572 - frontend/src/pages/RunDetail.tsx:955-998

架构总览

页面采用“懒加载 + 本地缓存”的数据流设计: - 初次进入时请求摘要数据(含基础指标、可用标的、权益曲线等)。 - 图表数据按标的按需加载,并维护本地缓存,避免重复请求。 - 提供批量加载所有标的的选项,带进度与取消控制。 - 交易记录与运行卡、工作室等模块直接基于已获取的运行数据渲染。

sequenceDiagram participant U as "用户" participant P as "运行详情页面" participant API as "API 客户端" participant S as "后端服务" U->>P : 打开运行详情 P->>API : 获取运行摘要(含 chart_payload=summary) API->>S : GET /runs/{id}?chart_payload=summary S-->>API : 返回运行摘要 API-->>P : 设置运行数据与初始标的 P->>API : 按需获取标的图表数据(chart_symbol) API->>S : GET /runs/{id}?chart_symbol={symbol} S-->>API : 返回价格序列/指标/交易标记 API-->>P : 更新图表缓存并渲染

图示来源 - frontend/src/pages/RunDetail.tsx:129-176 - frontend/src/pages/RunDetail.tsx:205-235 - frontend/src/lib/api.ts:134-141

详细组件分析

数据获取与处理逻辑

flowchart TD Start(["进入运行详情"]) --> LoadSummary["并行加载运行摘要与代码"] LoadSummary --> InitCache["构建图表缓存(按标的)"] InitCache --> HasData{"标的是否有数据?"} HasData -- 否 --> LoadSymbol["按需加载标的图表数据"] HasData -- 是 --> RenderChart["渲染K线/指标/交易标记"] LoadSymbol --> MergeCache["合并到本地缓存"] MergeCache --> RenderChart RenderChart --> BulkLoad{"是否批量加载?"} BulkLoad -- 是 --> BatchLoop["循环加载各标的<br/>更新进度/可取消"] BulkLoad -- 否 --> End(["完成"]) BatchLoop --> End

图示来源 - frontend/src/pages/RunDetail.tsx:129-176 - frontend/src/pages/RunDetail.tsx:205-235 - frontend/src/pages/RunDetail.tsx:263-290

章节来源 - frontend/src/pages/RunDetail.tsx:129-176 - frontend/src/pages/RunDetail.tsx:205-235 - frontend/src/pages/RunDetail.tsx:263-290 - frontend/src/pages/RunDetail.tsx:806-953

图表渲染配置与交互

classDiagram class RunDetail { +selectedSymbols : string[] +chartCache : ChartCache +bulkLoading : boolean +bulkProgress : {done : number; total : number} +loadChartSymbol(symbol) +handleLoadAllChartSymbols() } class CandlestickChart { +data : OHLCV[] +markers : TradeMarker[] +indicators : IndicatorSeries +height : number } class EquityChart { +data : EquityCurve[] +height : number } RunDetail --> CandlestickChart : "传入数据" RunDetail --> EquityChart : "传入权益曲线"

图示来源 - frontend/src/pages/RunDetail.tsx:640-780 - frontend/src/components/charts/CandlestickChart.tsx - frontend/src/components/charts/EquityChart.tsx

章节来源 - frontend/src/pages/RunDetail.tsx:640-780

交易记录列表与筛选

flowchart TD TStart(["进入交易记录"]) --> Normalize["标准化方向/解析数值"] Normalize --> Filter["应用方向与标的筛选"] Filter --> Stats["统计买卖数量/累计PnL"] Stats --> Render["渲染表格(分页)"] Render --> More{"还有剩余?"} More -- 是 --> LoadMore["追加一页"] More -- 否 --> TEnd(["完成"]) LoadMore --> Render

图示来源 - frontend/src/pages/RunDetail.tsx:806-953

章节来源 - frontend/src/pages/RunDetail.tsx:806-953

风险评估与再平衡摘要

classDiagram class StudioTab { +xray : RiskXRayPayload? +notes : RebalanceNotesPayload? } class ValidationPanel { +data : ValidationData +compact : boolean } StudioTab --> ValidationPanel : "可选展示结构化校验"

图示来源 - frontend/src/pages/RunDetail.tsx:491-572 - frontend/src/components/charts/ValidationPanel.tsx

章节来源 - frontend/src/pages/RunDetail.tsx:491-572

报告导出能力

章节来源 - frontend/src/pages/RunDetail.tsx:43-73 - frontend/src/pages/RunDetail.tsx:345-363 - frontend/src/pages/RunDetail.tsx:955-998

不同资产类别与对比分析

章节来源 - frontend/src/pages/RunDetail.tsx:640-780 - frontend/src/pages/RunDetail.tsx:806-953

依赖关系分析

graph LR RunDetail["RunDetail.tsx"] --> Api["api.ts"] RunDetail --> CC["CandlestickChart.tsx"] RunDetail --> EC["EquityChart.tsx"] RunDetail --> VP["ValidationPanel.tsx"] Api --> Auth["apiAuth.ts(认证头)"]

图示来源 - frontend/src/pages/RunDetail.tsx:98-396 - frontend/src/lib/api.ts:1-100

章节来源 - frontend/src/pages/RunDetail.tsx:98-396 - frontend/src/lib/api.ts:1-100

性能考虑

[本节为通用性能建议,不直接分析具体文件]

故障排查指南

章节来源 - frontend/src/lib/api.ts:60-100 - frontend/src/pages/RunDetail.tsx:129-176 - frontend/src/pages/RunDetail.tsx:205-235 - frontend/src/pages/RunDetail.tsx:263-290 - frontend/src/pages/RunDetail.tsx:806-953

结论

运行详情页面通过“摘要优先、按需加载、本地缓存、批量可控”的策略,提供了高效、直观的回测结果展示与分析能力。其模块化设计与通用图表组件的结合,使得对不同资产类别的回测结果具备一致的可视化体验,并支持导出与进一步研究。

[本节为总结性内容,不直接分析具体文件]

附录

章节来源 - frontend/src/lib/api.ts:134-142