fix(factor): 批量评估空因子矩阵守卫——join静默空集记error行不再产全None淘汰假数据 [vps]
This commit is contained in:
@@ -72,7 +72,7 @@ def run_batch_eval(
|
||||
run_id = eval_store.create_run(
|
||||
eval_db, label=label, universe=universe_label,
|
||||
symbols_count=bars["vt_symbol"].n_unique(), factors_total=len(factor_names),
|
||||
start=start, end=end, params={"limit": limit, "symbols": symbols[:20] if symbols else None},
|
||||
start=start, end=end, params={"limit": limit, "symbols": symbols[:20] if symbols else None}, # 截断防 4400 只全量塞 JSON
|
||||
)
|
||||
|
||||
errors: list[str] = []
|
||||
@@ -115,6 +115,10 @@ def _eval_one(name: str, alpha_df: pl.DataFrame, eval_rows: pl.DataFrame,
|
||||
.sort("datetime").to_pandas().set_index("datetime")
|
||||
)
|
||||
F.index = pd.to_datetime(F.index)
|
||||
if F.empty or len(F.index) == 0:
|
||||
return {"factor": name, "category": factor["category"],
|
||||
"expression": factor["expression"],
|
||||
"metrics": {"error": "因子矩阵为空(join 后无评估窗行,检查 datetime dtype/窗口)"}}
|
||||
metrics = summarize_factor(F, rets[1], rets[5], rets[10])
|
||||
return {"factor": name, "category": factor["category"],
|
||||
"expression": factor["expression"], "metrics": metrics}
|
||||
|
||||
Reference in New Issue
Block a user