"""落盘 adj_factor 列 vs tushare 真值（按日全市场口径，无 6000 行截断风险）——只读对账。

重跑：./zt_venv/bin/python code/_chk_factor_vs_tushare.py 20250115 20210802
"""
import os, sys, glob
import numpy as np
import pandas as pd

os.environ.setdefault('HTTP_PROXY', 'http://127.0.0.1:7897')
os.environ.setdefault('HTTPS_PROXY', 'http://127.0.0.1:7897')
import tushare as ts
ts.set_token('edf6739fe1a4de0d747600cc753a8b4bf335cf27ef0f5aea2d2aa64c')
pro = ts.pro_api()
ROOT = "backtest_zt_full"
POOLS = ["hs300", "zz500", "zz1000", "zz2000"]

loc = {}
for p in POOLS:
    for f in glob.glob(f"{ROOT}/daily_{p}/*.csv"):
        code = os.path.basename(f)[:-4]
        d = pd.read_csv(f, usecols=['trade_date', 'adj_factor'])
        loc[code] = dict(zip(d['trade_date'].astype(int), d['adj_factor']))

for dt in (sys.argv[1:] or ['20250115']):
    t = pro.adj_factor(trade_date=dt)
    s = t.set_index('ts_code')['adj_factor'].astype(float)
    rows = sorted([(abs(v / s[c] - 1), c, v, s[c]) for c, dd in loc.items()
                   if (v := dd.get(int(dt))) is not None and c in s.index and s[c] > 0], reverse=True)
    n = len(rows)
    print(f"[{dt}] 落盘列 vs tushare(按日全市场): 比对 {n} | >1e-4 {sum(1 for r in rows if r[0]>1e-4)}"
          f" ({sum(1 for r in rows if r[0]>1e-4)/n:.1%}) | >1e-3 {sum(1 for r in rows if r[0]>1e-3)}"
          f" | max {rows[0][0]:.2e} @{rows[0][1]}")
    for e, c, v, tv in rows[:3]:
        print(f"    {c}: 落盘 {v:.4f} vs tushare {tv:.4f}  rel {e:.2e}")
