mirror of
https://github.com/jaxperro/winning-wallet-finder.git
synced 2026-07-27 15:57:47 +00:00
0b12820eeb
Incumbent census (volume-ranked): industrialized niche — top harvester $3.2M vol/5,854 buys at +2.27% per ~4h hold; several ~$1M at +2.4-3.4%; two big operators NEGATIVE (-3%) — residual risk is real, top-5 share only 20%. Bucket returns (+6.2%/90-95c etc) are UPPER bounds: $129M of high-price buys sit on non-tape-resolved tokens where upsets linger. Verdict: park at our capital scale (pennies on idle cash); revisit as an idle-cash overlay once nightly chain coverage closes the bias, or if bankroll grows 10x. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
88 lines
3.9 KiB
Python
88 lines
3.9 KiB
Python
#!/usr/bin/env python3
|
|
"""T7 EXPLORATORY (2026-07-23) — settlement-discount harvesting ("the last
|
|
3 cents"): outcome-known markets keep printing below $1 until formal
|
|
resolution, and redemption is fee-free. Two reads, both chain-true:
|
|
|
|
1. THE NICHE'S INCUMBENTS: wallets systematically BUYING at >=0.90 —
|
|
their realized hit, per-share edge, holding time (proxy: token's last
|
|
tape print = resolution-adjacent), and return on capital.
|
|
2. THE RESIDUAL: per entry-price bucket (90-95/95-97/97-99c), what did
|
|
buying every such print return after refund/loss risk — the passive
|
|
version of the trade at our size.
|
|
|
|
Kill: bucket edge < the copy book's return on the same capital-days, or
|
|
the incumbent census shows <5 wallets soaking all volume (saturated)."""
|
|
import sys
|
|
|
|
sys.path.insert(0, "/Users/jaxmakielski/polymarket-smart-money/research")
|
|
import tape # noqa: E402
|
|
|
|
BUCKETS = [(0.90, 0.95, "90-95c"), (0.95, 0.97, "95-97c"),
|
|
(0.97, 0.995, "97-99c")]
|
|
|
|
|
|
def main():
|
|
db = tape.connect()
|
|
tape.build_resolved(db)
|
|
# every high-price BUY-side print on a tape-resolved token, joined to
|
|
# payout + the token's terminal print time (holding proxy)
|
|
rows = db.execute("""
|
|
SELECT t.wallet, t.price::DOUBLE, t.size::DOUBLE, t.ts, tk.payout::DOUBLE, tk.last_ts,
|
|
t.asset
|
|
FROM trades t JOIN res_tok tk ON t.asset = tk.asset
|
|
WHERE t.side = 'BUY' AND t.price >= 0.90 AND t.price < 0.995
|
|
AND t.ts < tk.last_ts""").fetchall()
|
|
print(f"high-price buy prints on resolved tokens: {len(rows):,}")
|
|
# SCORER-LAW bias bound: high-price buys on tokens NOT tape-resolved
|
|
# (pending/vetoed) are excluded — round 3 says upsets linger there, so
|
|
# bucket loss-rates are LOWER BOUNDS. Size the exclusion:
|
|
excl_vol, excl_n = db.execute("""
|
|
SELECT coalesce(sum(t.price::DOUBLE * t.size::DOUBLE),0), count(*)
|
|
FROM trades t LEFT JOIN res_tok tk ON t.asset = tk.asset
|
|
WHERE t.side='BUY' AND t.price >= 0.90 AND t.price < 0.995
|
|
AND tk.asset IS NULL""").fetchone()
|
|
incl_vol = sum(r[1] * r[2] for r in rows)
|
|
print(f"excluded (unresolved-on-tape) volume: ${excl_vol:,.0f} "
|
|
f"({excl_n:,} prints) vs included ${incl_vol:,.0f} — loss rates "
|
|
f"below are LOWER BOUNDS (round-3 direction)")
|
|
# 2. residual per bucket
|
|
for lo, hi, tag in BUCKETS:
|
|
rs = [r for r in rows if lo <= r[1] < hi]
|
|
if not rs:
|
|
continue
|
|
n = len(rs)
|
|
usd = sum(r[1] * r[2] for r in rs)
|
|
pnl = sum((r[4] - r[1]) * r[2] for r in rs)
|
|
losses = sum(1 for r in rs if r[4] == 0.0)
|
|
hold_h = sum((r[5] - r[3]) for r in rs) / n / 3600
|
|
ret = pnl / usd if usd else 0
|
|
ann = ret / max(hold_h / 8760, 1e-9)
|
|
print(f" {tag}: {n:,} prints · ${usd:,.0f} vol · ret {ret*100:+.2f}%"
|
|
f" · loss-rate {losses/n:.3%} · avg hold {hold_h:.1f}h · "
|
|
f"annualized {ann*100:+,.0f}%")
|
|
# 1. incumbent census (>=0.95 specialists)
|
|
agg = {}
|
|
for w, p, z, ts, pay, lts, a in rows:
|
|
if p < 0.95:
|
|
continue
|
|
d = agg.setdefault(w, [0, 0.0, 0.0, 0.0])
|
|
d[0] += 1
|
|
d[1] += p * z
|
|
d[2] += (pay - p) * z
|
|
d[3] += (lts - ts) * p * z # capital-seconds
|
|
inc = [(v[1], w, v) for w, v in agg.items()
|
|
if v[0] >= 20 and v[1] >= 500] # rank census by VOLUME
|
|
inc.sort(reverse=True)
|
|
print(f"\nincumbents (>=20 buys @>=0.95, >=$500 vol): {len(inc)}")
|
|
tot_vol = sum(v[1] for _, _, v in inc)
|
|
print(f"their combined volume: ${tot_vol:,.0f} · "
|
|
f"top5 share {sum(v[1] for _,_,v in inc[:5])/max(tot_vol,1):.0%}")
|
|
for _, w, (n, usd, pnl, capsec) in inc[:8]:
|
|
hold_h = (capsec / usd) / 3600 if usd else 0
|
|
print(f" {w[:14]} n={n:<5} vol ${usd:>10,.0f} · ret "
|
|
f"{pnl/usd*100:+.2f}% · avg hold {hold_h:.1f}h")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|