import pandas as pd, glob, numpy as np
fs = sorted(glob.glob('backtest_zt_full/daily_*/*.csv'))
rows = []; n_chk = 0; worst = 0.0; bad = 0
for f in fs[:1500]:
    d = pd.read_csv(f, dtype={'trade_date': str}).sort_values('trade_date')
    fp = d['adj_factor'].shift(1); prev = d['raw_close'].shift(1)
    ex = (d['pre_close'] - prev).abs() > 0.01
    mask = np.logical_and(np.logical_and(ex, fp.notna()), d['pre_close'] > 0)
    sub = d[mask.values]
    if len(sub):
        i = sub.index
        imp = fp[i].values * prev[i].values / sub['pre_close'].values
        err = np.abs(imp - sub['adj_factor'].values) / sub['adj_factor'].values
        n_chk += len(sub); worst = max(worst, float(err.max())); bad += int((err > 1e-6).sum())
        for k in list(i)[:2]:
            rows.append((f.split('/')[-1], d.loc[k, 'trade_date'],
                         round(float(fp[k]), 6), round(float(d.loc[k, 'adj_factor']), 6),
                         round(float(fp[k] * prev[k] / d.loc[k, 'pre_close']), 6)))
print('除权/特殊日样本数', n_chk, '| 用 fac_prev*raw_prev/pre_close 反推当日因子 最大相对误差', worst, '| 超1e-6 个数', bad)
for r in rows[:14]:
    print(r)