fix(optimize): 参数优化端到端修复(空statistics/500/不跳页)
根因: vnpy run_optimization 孙进程 spawn re-import setting.py 重置 DB → load 0根 → 空 statistics;连带 task_id 不一致 + statistics 含 date/numpy 序列化失败 + 前端单页轮询 180s 超时。 修复(不动 vnpy 源码): - cta_optimizer: vt_setting.json 适配(vnpy 原生机制 setting.py:43 load_json,孙进程拿到正确 DB) + task_id 贯通 + 主聚合持久化(combos) + 过滤空 statistics 记录 - result_store: _json_default(date→isoformat + numpy→原生),save_result 两处 json.dumps 加 default - routes: optimization-results 改读 DB 主聚合, fallback 内存(重启不丢) - runner: _opt_worker 加 task_id 参数 + submit_optimize 传递(对齐 _cta_worker) - 前端: Optimize 提交后跳 progress;Progress 用 opt_ 前缀判断跳 optimize-result;新建 OptimizeResult 参数表格页;router 加路由 验证: 端到端 optimization-results http=200 + 4组合非空 statistics + 浏览器提交→跳 optimize-result 页表格渲染。
This commit is contained in:
@@ -8,6 +8,7 @@ const route = useRoute()
|
||||
const router = useRouter()
|
||||
const taskId = String(route.params.id)
|
||||
const isFactor = computed(() => route.path.startsWith('/factor'))
|
||||
const isOptimize = computed(() => taskId.startsWith('opt_'))
|
||||
|
||||
const { status, stage, start } = useTask(taskId)
|
||||
|
||||
@@ -37,8 +38,13 @@ onUnmounted(() => {
|
||||
|
||||
watch(status, (s) => {
|
||||
if (s === 'done') {
|
||||
const base = isFactor.value ? '/factor' : '/backtest'
|
||||
router.push(`${base}/result/${taskId}`)
|
||||
if (isFactor.value) {
|
||||
router.push(`/factor/result/${taskId}`)
|
||||
} else if (isOptimize.value) {
|
||||
router.push(`/backtest/optimize-result/${taskId}`)
|
||||
} else {
|
||||
router.push(`/backtest/result/${taskId}`)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -89,7 +95,7 @@ const statusChipClass: Record<string, string> = { running: 'st-running', done: '
|
||||
<div class="page progress-page">
|
||||
<div class="page-head">
|
||||
<div>
|
||||
<h2 class="page-title">{{ isFactor ? '因子分析' : '回测' }}进行中</h2>
|
||||
<h2 class="page-title">{{ isFactor ? '因子分析' : isOptimize ? '参数优化' : '回测' }}进行中</h2>
|
||||
<p class="page-subtitle">任务 ID:<span class="mono">{{ taskId }}</span></p>
|
||||
</div>
|
||||
<span class="chip" :class="statusChipClass[status]">{{ statusLabel[status] }}</span>
|
||||
|
||||
Reference in New Issue
Block a user