feat(job): D2 全市场选股 Job 化(kind=selection 异步)

- Job kind=selection:executor 分支用 SelectionService(spec=SelectionQuery),结果
  落 result_json、自动归档 Experiment(summary:as_of + 选出 N);/api/jobs 与
  /api/experiments 的 result 解码支持 SelectionResult
- POST /api/selections/jobs:提交 SelectionQuery 为异步 Job(BackgroundTasks/subprocess)
- Web 选股页新增「异步(全市场)」按钮:提交 Job → waitJob 轮询结果(解决同步 60s+)
- tests/test_selection_job.py:executor 执行归档(SelectionResult/Experiment kind)、
  API 提交→轮询→结果与实验列表;全量 pytest + tsc 通过
This commit is contained in:
Simon
2026-09-09 07:43:35 +08:00
parent ed54096331
commit 861a4051ca
6 changed files with 211 additions and 13 deletions
+1 -1
View File
@@ -106,7 +106,7 @@ class TestReplayConsistency:
dates = sorted(df["trade_date"].unique())
mid = dates[len(dates) // 2]
b = _SYMS[1]
for i, d in enumerate(dates):
for d in dates:
if d > mid:
mask = (df["symbol"] == b) & (df["trade_date"] == d)
df.loc[mask, "close"] = df.loc[mask, "close"] * 1.03 # 后段持续暴涨