diff --git a/frontend/src/views/backtest/History.vue b/frontend/src/views/backtest/History.vue index af6223d..d24375c 100644 --- a/frontend/src/views/backtest/History.vue +++ b/frontend/src/views/backtest/History.vue @@ -9,7 +9,7 @@ const tasks = ref([]) const loading = ref(false) // 筛选 -const typeFilter = ref<'all' | 'cta' | 'optimize' | 'factor'>('all') +const typeFilter = ref<'all' | 'cta' | 'portfolio' | 'optimize' | 'factor'>('all') const statusFilter = ref<'all' | 'done' | 'failed'>('all') const keyword = ref('') // 分页 @@ -19,6 +19,7 @@ const pageSize = 20 const typeOptions = [ { key: 'all', label: '全部' }, { key: 'cta', label: '回测' }, + { key: 'portfolio', label: '组合' }, { key: 'optimize', label: '参数优化' }, { key: 'factor', label: '因子分析' }, ] as const @@ -77,10 +78,11 @@ async function load(): Promise { function open(row: TaskListItem): void { if (row.type === 'factor') router.push(`/factor/result/${row.task_id}`) else if (row.type === 'optimize') router.push(`/backtest/optimize-result/${row.task_id}`) + else if (row.type === 'portfolio') router.push(`/backtest/portfolio?task_id=${row.task_id}`) else router.push(`/backtest/result/${row.task_id}`) } -const typeLabelMap: Record = { cta: '回测', optimize: '优化', factor: '因子' } +const typeLabelMap: Record = { cta: '回测', portfolio: '组合', optimize: '优化', factor: '因子' } function typeLabel(t: string): string { return typeLabelMap[t] || t } diff --git a/frontend/src/views/backtest/PortfolioBacktest.vue b/frontend/src/views/backtest/PortfolioBacktest.vue index 972eeb3..9d1496e 100644 --- a/frontend/src/views/backtest/PortfolioBacktest.vue +++ b/frontend/src/views/backtest/PortfolioBacktest.vue @@ -1,6 +1,7 @@ @@ -193,14 +223,14 @@ async function onSubmit(): Promise {
-

组合策略回测

+

{{ viewTaskId ? '组合回测结果' : '组合策略回测' }}

BulletTrade + {{ strategyLabel }} · 本地执行回测 · MVP 验证链路

- + @@ -267,7 +297,7 @@ async function onSubmit(): Promise { -
+
{ {{ submitting ? `回测中${stageHint ? '(' + stageHint + ')' : '...'}` : '开始回测' }} - 异步执行,请勿关闭页面 + 异步执行 · 已等待 {{ elapsedSec }}s · 组合回测加载大库数据预计 1-3 分钟,请勿关闭