import json, datetime as dt
import rule4
D = json.load(open('bk_clean.json')); PX = json.load(open('majors_px.json'))
btc = {d: v for d, v in D['btc']['line']}; bon = rule4.sma_on(sorted(btc), btc)
keys = [k for k in D if k != 'btc']
ser = {k: ([d for d, _ in D[k]['line']], [v for _, v in D[k]['line']]) for k in keys}
on = {k: rule4.donchian_on(*ser[k]) for k in keys}
mon = on['majors']
alld = sorted({d for k in keys for d in ser[k][0]})
def breadth_for(k):
    out = {}
    for d in alld:
        oth = [kk for kk in keys if kk not in (k, 'majors') and d in on[kk]]
        if oth: out[d] = sum(1 for kk in oth if on[kk][d]) / len(oth)
    return out
sb = {d: PX['SOL'][d] / PX['BTC'][d] for d in PX['SOL'] if d in PX['BTC']}
froth = {}
for d in sb:
    d0 = (dt.date.fromisoformat(d) - dt.timedelta(28)).isoformat()
    if d0 in sb: froth[d] = sb[d] / sb[d0] - 1 >= 0.20
res = {}
for fast in (False, True):
    allt = []
    for k in keys:
        g = dict(btc_on=bon, maj_on=mon, is_majors=k == 'majors', breadth=breadth_for(k), froth=froth if k.startswith('sol') else {})
        nin, nout = rule4.FAST if fast else rule4.SLOW
        ts, _ = rule4.run(*ser[k], g, nin, nout); allt += [dict(t, k=k) for t in ts if t['status'] == 'closed']
    a = [t for t in allt if t['entry'] < '2025-01-01']; b = [t for t in allt if t['entry'] >= '2025-01-01']
    res['fast' if fast else 'slow'] = dict(all=rule4.stats(allt), A=rule4.stats(a), B=rule4.stats(b), trades=[[t['k'], t['entry'], t['trim'], t['exit'], round(t['ret'] * 100, 1)] for t in allt])
    print('fast' if fast else 'slow', rule4.stats(allt), rule4.stats(a), rule4.stats(b))
json.dump(res, open('evidence5_core.json', 'w'))
