#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""pead 因子 decile 回测复现脚本。

本报告数字由 scripts/lib/factor_lab.decile_test 生成:月度 10 分位、多空(D10−D1)、
每笔计 0.2% 成本、规模中性化、train/test 切分与 OOS。因子信号在 scripts/lib/factors2.py
的 REGISTRY2["pead"] 注册(builder)。

复现(需构建 Ctx,首次约 3–5 分钟;重任务须独占串行,勿并行以免 OOM):
  python3 -m lib.run_decile_batch2 pead
或直接运行本文件:
  cd /root/cb-allotment && PYTHONPATH=scripts python3 my-app/public/reports/pead/backtest.py

结果写回本目录 backtest_result.json(报告页读取)。
"""
import os, sys

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../../scripts")))
from lib.factor_lab import Ctx, decile_test
from lib.factors2 import REGISTRY2

SLUG = "pead"


def main() -> int:
    builder, kw = REGISTRY2[SLUG]
    ctx = Ctx.get(); ctx.daily_ret()          # 月频 + 日频面板
    sig = builder(ctx)                         # 构建因子信号面板
    res = decile_test(SLUG, sig, ctx, groups=10, **kw)   # 写 backtest_result.json
    sp = res["spread"]["ann_top_minus_bottom"]
    print(f"{SLUG}: D10-D1 {sp:+.1f}%/yr  rho={res['monotonic_spearman']:+.2f}  "
          f"规模中性 {res['size_neutral_ann']}  每组~{res['avg_per_group']:.0f}只")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
