mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 20:14:16 +08:00
fix(regime): 修复重算无产出并补全 beta 标签
后端 - /recompute 全量分支原本误调 compute_regime_incremental(增量补差), 无缺口/stale 时直接返回 0 行; 改为用 earliest_enriched_date ~ 今天 走 run_regime_batch + upsert 强制覆盖, 真正实现"全量重算" - _scan_enriched_fallback 原本漏调 compute_limit_signals 的 instruments 参数致慢路径必抛异常 → enriched 缓存未预热时拿不到含信号列数据 → 聚合 返回空; 改用主管道同款 compute_all(df, instruments, historical_shares) 一站式补算, 与 indicators/pipeline.py 对齐 - 新增 enriched_date_set / earliest_enriched_date 辅助函数(抽出复用) 前端 - Regime 重算按钮: 加"重算中…"文字反馈 + 完成 toast(区分有/无新数据) + catch 捕获错误(原异常被静默吞掉) - 市场环境菜单加 beta 胶囊标签(对齐 Settings 数据源标签样式) 验证 - 后端 582 passed; 真实数据全量重算产出 986 行(2022-07-08 ~ 2026-07-31) - 前端 tsc + pnpm build 通过
This commit is contained in:
@@ -132,16 +132,25 @@ def regime_coverage(request: Request):
|
||||
|
||||
@router.post("/recompute")
|
||||
def regime_recompute(request: Request, start: date | None = None, end: date | None = None):
|
||||
"""手动触发重算(全量或指定区间)。管理员操作。"""
|
||||
"""手动触发重算(全量或指定区间)。管理员操作。
|
||||
|
||||
- 不传 start: 强制全量重算(enriched 最早日 ~ 今天), 覆盖所有已有行。
|
||||
与 daily_pipeline 的增量补差(compute_regime_incremental)不同 —— 此接口面向
|
||||
人工「我要重新算一遍」的预期, 必须真正重算而非增量补缺口。
|
||||
- 传 start: 仅重算 [start, end] 区间。
|
||||
"""
|
||||
repo = request.app.state.repo
|
||||
data_dir = _data_dir(request)
|
||||
end = end or date.today()
|
||||
if start is None:
|
||||
# 全量: 从 enriched 最早日算到今天
|
||||
new_rows = regime_builder.compute_regime_incremental(repo, data_dir, today=end)
|
||||
else:
|
||||
new_rows = regime_builder.run_regime_batch(repo, start=start, end=end)
|
||||
if not new_rows.is_empty():
|
||||
regime_builder.upsert_regime_history(data_dir, new_rows)
|
||||
# 全量: 从 enriched 最早日强制重算到今天
|
||||
earliest = regime_builder.earliest_enriched_date(repo)
|
||||
if earliest is None:
|
||||
invalidate_regime_cache()
|
||||
return {"ok": True, "computed": 0}
|
||||
start = earliest
|
||||
new_rows = regime_builder.run_regime_batch(repo, start=start, end=end)
|
||||
if not new_rows.is_empty():
|
||||
regime_builder.upsert_regime_history(data_dir, new_rows)
|
||||
invalidate_regime_cache()
|
||||
return {"ok": True, "computed": new_rows.height if not new_rows.is_empty() else 0}
|
||||
|
||||
Reference in New Issue
Block a user