"""v3self.py (A1.16): self-buy / farm check on mc5 buys with A1.11's rep1_pre (walk forward: share of buy ETH before +5 min from wallets
that bought in the first 15 min of 1+ earlier v3 pool whose 15 min window had closed). rep3 = same with 3+ earlier pools (snipers)."""
import statistics as st, collections
exec(open("/root/fwa1/v3frag.py").read().split("random.seed(7)")[0])
R = book(300, 2.5e5, 1e6)
tokof = {r[0]: r[1] for r in D.execute("SELECT pool, token FROM meta")}
print("top 8 winners (pool, token, x, buyers before +5 min, fresh buyers, rep1, rep3, buy ETH before +5 min)")
for p, v, why, t in sorted(R, key=lambda r: -r[1])[:8]:
    f = p["feats"][300]
    print("  %s %s x%.1f n%d fresh %d rep1 %.2f rep3 %.2f eth %.1f %s" % (p["pool"], tokof[p["pool"]], v, f["nbuy"], f["nnew"], f["rep1"], f["rep3"], f["buyeth"], day(p["t"])))
def show(lab, S):
    for h in (1, 2):
        v = [r[1] for r in S if (r[0]["t"] < CUT) == (h == 1)]
        if v: print("  %-28s H%d n%3d mean %.2fx med %.2fx without top 3 %.2fx" % (lab, h, len(v), st.mean(v), st.median(v), st.mean(sorted(v)[:-3]) if len(v) > 3 else 0))
print("by rep1 bucket")
for lo, hi in ((0, .05), (.05, .2), (.2, .5), (.5, 1.01)):
    show("rep1 %.0f%%-%.0f%%" % (lo * 100, hi * 100), [r for r in R if lo <= r[0]["feats"][300]["rep1"] < hi])
print("by rep3 bucket (snipers)")
for lo, hi in ((0, .05), (.05, .2), (.2, 1.01)):
    show("rep3 %.0f%%-%.0f%%" % (lo * 100, hi * 100), [r for r in R if lo <= r[0]["feats"][300]["rep3"] < hi])
print("filters")
show("all", R)
show("skip rep1 > 5%", [r for r in R if r[0]["feats"][300]["rep1"] <= .05])
show("skip rep1 > 20%", [r for r in R if r[0]["feats"][300]["rep1"] <= .2])
show("skip rep1 > 50%", [r for r in R if r[0]["feats"][300]["rep1"] <= .5])
show("keep only rep1 > 20%", [r for r in R if r[0]["feats"][300]["rep1"] > .2])
