diff --git a/web-ui/src/api.ts b/web-ui/src/api.ts index 193b0ae..426dbde 100644 --- a/web-ui/src/api.ts +++ b/web-ui/src/api.ts @@ -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 { + 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 { const resp = await fetch(`${BASE}/backtest/tasks/${taskId}`) diff --git a/web-ui/src/components/ParamGridPicker.vue b/web-ui/src/components/ParamGridPicker.vue index f225d0f..a110b12 100644 --- a/web-ui/src/components/ParamGridPicker.vue +++ b/web-ui/src/components/ParamGridPicker.vue @@ -50,12 +50,28 @@ function onInput(name: string, val: string) { syncOutputs() } -// 切换策略时清空选择 +// 把预设取值列表格式化为输入框文本(逗号分隔) +function presetToText(vals: Array): string { + return vals.join(', ') +} + +// 切换策略时:若有预设网格则自动勾选并填入预设取值,否则清空选择 watch( () => props.strategy?.name, () => { - selected.value = new Set() - inputs.value = {} + const preset = props.strategy?.preset_grid + if (preset && Object.keys(preset).length > 0) { + const names = Object.keys(preset) + selected.value = new Set(names) + const newInputs: Record = {} + for (const n of names) { + newInputs[n] = presetToText(preset[n]) + } + inputs.value = newInputs + } else { + selected.value = new Set() + inputs.value = {} + } syncOutputs() }, ) @@ -71,7 +87,10 @@ const gridPoints = computed(() => {