feat(s3): 历史任务 + 参数优化端到端跑通

- result_store.load_result_by_task_id + orchestrator.get_result DB 兜底(历史回看)
- GET /task 列表、GET /task/{id}/optimization-results
- Task.raw_result 存优化结果 list(内存)
- cta_optimizer 修同款 bug(interval d / capital 1M / vnpy DB SETTINGS)
- get_status 返回 error_msg(str 守卫)
- 前端 优化页(网格输入+轮询+结果表)、历史页(任务列表+回看)、侧栏子菜单
- 修 5 个旧 test_routes 回归;73 tests passed
- 冒烟:历史 3 任务 + 优化 9 组合
This commit is contained in:
2026-07-07 06:35:54 +08:00
parent 212ad6426d
commit 54fc1b656f
11 changed files with 386 additions and 14 deletions
+42
View File
@@ -87,3 +87,45 @@ export async function getKline(symbol: string, start: string, end: string): Prom
const { data } = await apiClient.get<{ kline: KlineBar[] }>('/kline', { params: { symbol, start, end } })
return data.kline
}
// ----- S3: history + optimization -----
export interface TaskListItem {
id: number
task_id: string
type: string
status: string
strategy: string
symbol: string
start: string
end: string
}
export async function getTasks(type?: string): Promise<TaskListItem[]> {
const { data } = await apiClient.get<{ tasks: TaskListItem[] }>('/task', { params: type ? { type } : {} })
return data.tasks
}
export interface OptimizeSubmit {
symbol: string
strategy: string
grid: Record<string, [number, number, number]>
start: string
end: string
}
export async function submitOptimize(req: OptimizeSubmit): Promise<string> {
const { data } = await apiClient.post<{ task_id: string }>('/backtest/optimize', req)
return data.task_id
}
export interface OptRow {
params: Record<string, unknown>
statistics: Record<string, unknown>
}
export async function getOptimizationResults(taskId: string): Promise<OptRow[]> {
const { data } = await apiClient.get<{ results: OptRow[] }>(`/task/${taskId}/optimization-results`)
return data.results
}