feat(web-ui): 取行情整合 + 市场智能识别 + 一键寻优全策略

- 取消单标的/寻优页独立的「取行情」按钮,整合进「开始回测/开始寻测」
  (SymbolPicker 经 defineExpose 暴露 loadBars,父组件串联取数+回测)
- 取消市场手动选择(沪/深/北交所下拉),改为 market.ts 按代码段智能
  识别(17 边界用例验证),代码框旁显示识别结果
- 成交价下拉精简为中文「开盘价/收盘价」,初始资金默认 100 万
- 寻优页 ParamGridPicker 切换策略自动填入预设参数网格
- 寻优页新增「一键寻优所有策略」按钮 + 全局策略排名表
  (OptimizeView 复用 store.runOptimizeAll,结果区含最佳/排名/合计网格点)
- types/api/store 新增 OptimizeAll 契约 + submitOptimizeAllTask
- vue-tsc + vite build 通过
This commit is contained in:
Justin Gu
2026-07-04 00:09:05 +08:00
parent f6ae69845d
commit ecd8af1676
10 changed files with 449 additions and 89 deletions
+14
View File
@@ -7,6 +7,7 @@ import type {
BacktestResult,
Bar,
Category,
OptimizeAllBacktestRequest,
OptimizeBacktestRequest,
PortfolioBacktestRequest,
TaskListResponse,
@@ -160,6 +161,19 @@ export async function submitOptimizeTask(
return (await resp.json()) as TaskSubmitResponse
}
/** 提交「一键寻优所有策略」后台任务,返回 task_id。 */
export async function submitOptimizeAllTask(
req: OptimizeAllBacktestRequest,
): Promise<TaskSubmitResponse> {
const resp = await fetch(`${BASE}/backtest/optimize-all/run/async`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(req),
})
if (!resp.ok) await throwError(resp)
return (await resp.json()) as TaskSubmitResponse
}
/** 查询后台任务状态(轮询用)。 */
export async function fetchTask(taskId: string): Promise<TaskState> {
const resp = await fetch(`${BASE}/backtest/tasks/${taskId}`)