import pandas as pd, numpy as np
d = pd.read_csv("an45_trades.csv"); d["p0"] = (d.x - 1) * 1000; d["p1"] = (d.x_overlay - 1) * 1000; d["flag"] = d.flag.fillna("")
PDAY = {("sw_live","A"):2503, ("sw_live","B"):10400, ("fw_mc5","A"):4473, ("fw_mc5","B"):13130}
rows = []
for (b, h), s in d.groupby(["book", "half"]):
    days = s.p0.sum() / PDAY[(b, h)]; hot = s[s.flag == "HOT"]; cold = s[s.flag == "COLD"]
    no2 = lambda p: (p.sum() - p.nlargest(2).sum()) / days
    rows.append(dict(book=b, half=h, trades=len(s), hot=len(hot), cold=len(cold), book_day=round(s.p0.sum()/days), overlay_day=round(s.p1.sum()/days),
                     hot_x_book=round(hot.x.mean(),2) if len(hot) else None, hot_x_overlay=round(hot.x_overlay.mean(),2) if len(hot) else None,
                     cold_x_book=round(cold.x.mean(),2) if len(cold) else None, cold_x_overlay=round(cold.x_overlay.mean(),2) if len(cold) else None,
                     hot_3x_book=round((hot.x>=3).mean(),2) if len(hot) else None, rest_3x=round((s[s.flag!="HOT"].x>=3).mean(),2),
                     book_no2=round(no2(s.p0)), overlay_no2=round(no2(s.p1)), verdict="too small" if len(hot)+len(cold) < 10 else ("better" if s.p1.sum() > s.p0.sum() else "worse")))
R = pd.DataFrame(rows); pd.set_option("display.width", 250); print(R.to_string(index=False)); R.to_csv("an45_score.csv", index=False)
print(d[d.flag != ""].groupby(["book","flag","why_overlay"]).agg(n=("x","size"), x=("x","mean"), xo=("x_overlay","mean"), mins=("te2_min","median")).round(2))
