mirror of
https://github.com/jaxperro/winning-wallet-finder.git
synced 2026-07-27 15:57:47 +00:00
tape research: first sharp screen over the RTDS firehose (#2)
live/tape_sharps.py — insider.py's improbability z transplanted onto the 3-day tape (13.8M fills, ALL wallets, no survivorship bias): proxy-resolve tokens from terminal-VWAP convergence (0.97/0.03, 2h quiet, sibling veto), net held positions per wallet-token, z = (W - Σp)/sqrt(Σp(1-p)) over proxy-resolved held bets, then payouts.py chain-truth overlay on the shortlist (refunds count as neither). Copyable/algo split: discrete-entry conviction bettors (<= 6 fills/bet, <= 90 bets, med >= $50) vs continuous flow accounts that score huge but can't be mirrored at 3-17s lag. First run (tape through 2026-07-20 16:59): 2,360 wallets screened, 561 score z >= 2 with pnl > 0, 25 copyable candidates at z 4.0-5.5 — chain validation 742 payout vectors, ZERO proxy flips. Benchmark sanity: benched sharps (LSB1 +3.28, EdwardIN +2.38) land positive, benched losers negative. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,854 @@
|
||||
{
|
||||
"tape_end": 1784566799.0,
|
||||
"params": {
|
||||
"min_bets": 8,
|
||||
"win_t": 0.97,
|
||||
"lose_t": 0.03,
|
||||
"quiet_h": 2,
|
||||
"min_net_sh": 5.0,
|
||||
"min_net_usd": 20.0,
|
||||
"p_band": [
|
||||
0.05,
|
||||
0.95
|
||||
]
|
||||
},
|
||||
"candidates": [
|
||||
{
|
||||
"wallet": "0x37c1ff27d21b08d1cae9f38453b895eae2a78de1",
|
||||
"n": 64,
|
||||
"wins": 52,
|
||||
"exp_wins": 31.17269217903302,
|
||||
"var_sum": 14.500998511496402,
|
||||
"pnl": 8582.566326,
|
||||
"notional": 11141.435454999999,
|
||||
"avg_p": 0.48707331529739095,
|
||||
"avg_fills": 1.1875,
|
||||
"med_bet": 151.335,
|
||||
"top_niche": "sports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784308249.0,
|
||||
"tape_first": 1784308249.0,
|
||||
"z": 5.469330678445668,
|
||||
"win_pct": 81.25,
|
||||
"n_chain": 64,
|
||||
"wins_chain": 52,
|
||||
"pnl_chain": 8582.57,
|
||||
"flips": 0,
|
||||
"z_chain": 5.47,
|
||||
"pm_name": "sslavaga"
|
||||
},
|
||||
{
|
||||
"wallet": "0x9ab303a355bf22a29e485d98fb88d140abb43044",
|
||||
"n": 67,
|
||||
"wins": 55,
|
||||
"exp_wins": 34.72784570812084,
|
||||
"var_sum": 14.286015857809733,
|
||||
"pnl": 7967.576649999998,
|
||||
"notional": 12456.08335,
|
||||
"avg_p": 0.5183260553450871,
|
||||
"avg_fills": 4.656716417910448,
|
||||
"med_bet": 145.97359999999998,
|
||||
"top_niche": "esports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784307620.0,
|
||||
"tape_first": 1784307620.0,
|
||||
"z": 5.363451268529734,
|
||||
"win_pct": 82.08955223880596,
|
||||
"n_chain": 67,
|
||||
"wins_chain": 55,
|
||||
"pnl_chain": 7967.58,
|
||||
"flips": 0,
|
||||
"z_chain": 5.36,
|
||||
"pm_name": "arahbo"
|
||||
},
|
||||
{
|
||||
"wallet": "0x717990979ff84a32d47205a7eede94317aab7d79",
|
||||
"n": 70,
|
||||
"wins": 55,
|
||||
"exp_wins": 33.01667519735171,
|
||||
"var_sum": 17.13384599158028,
|
||||
"pnl": 3751.7752760000008,
|
||||
"notional": 5546.706666000001,
|
||||
"avg_p": 0.47166678853359584,
|
||||
"avg_fills": 1.7142857142857142,
|
||||
"med_bet": 64.294399,
|
||||
"top_niche": "sports",
|
||||
"niches": 4,
|
||||
"first_seen": 1784310711.0,
|
||||
"tape_first": 1784308163.0,
|
||||
"z": 5.310873379228681,
|
||||
"win_pct": 78.57142857142857,
|
||||
"n_chain": 70,
|
||||
"wins_chain": 55,
|
||||
"pnl_chain": 3751.78,
|
||||
"flips": 0,
|
||||
"z_chain": 5.31,
|
||||
"pm_name": "Maryyyyyy"
|
||||
},
|
||||
{
|
||||
"wallet": "0x3d3bbf5d4855ea12fbc610b4c2b49438ace728bd",
|
||||
"n": 87,
|
||||
"wins": 64,
|
||||
"exp_wins": 41.482434545447006,
|
||||
"var_sum": 19.98003739898597,
|
||||
"pnl": 2806.989571573092,
|
||||
"notional": 5424.999914,
|
||||
"avg_p": 0.47680959247640237,
|
||||
"avg_fills": 1.0459770114942528,
|
||||
"med_bet": 62.999998999999995,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784307568.0,
|
||||
"tape_first": 1784307508.0,
|
||||
"z": 5.037595419763916,
|
||||
"win_pct": 73.5632183908046,
|
||||
"n_chain": 87,
|
||||
"wins_chain": 64,
|
||||
"pnl_chain": 2806.99,
|
||||
"flips": 0,
|
||||
"z_chain": 5.04,
|
||||
"pm_name": "0x3d3BBF5d4855EA12fbC610b4c2b49438AcE728bD-1781226826895"
|
||||
},
|
||||
{
|
||||
"wallet": "0x58a84177426c8be517141558baaac252153ba3c7",
|
||||
"n": 28,
|
||||
"wins": 28,
|
||||
"exp_wins": 15.030000032620904,
|
||||
"var_sum": 6.649099997464278,
|
||||
"pnl": 1482.0280059999998,
|
||||
"notional": 1775.955744,
|
||||
"avg_p": 0.5367857154507466,
|
||||
"avg_fills": 2.4642857142857144,
|
||||
"med_bet": 67.2,
|
||||
"top_niche": "sports",
|
||||
"niches": 1,
|
||||
"first_seen": 1784309512.0,
|
||||
"tape_first": 1784309181.0,
|
||||
"z": 5.029890640492476,
|
||||
"win_pct": 100.0,
|
||||
"n_chain": 28,
|
||||
"wins_chain": 28,
|
||||
"pnl_chain": 1482.03,
|
||||
"flips": 0,
|
||||
"z_chain": 5.03,
|
||||
"pm_name": "dadadaji"
|
||||
},
|
||||
{
|
||||
"wallet": "0x80d8dddcfdc075eb70f6d2d774a27bfb255ab703",
|
||||
"n": 86,
|
||||
"wins": 68,
|
||||
"exp_wins": 45.94762000395101,
|
||||
"var_sum": 19.489362345925976,
|
||||
"pnl": 4559.373893,
|
||||
"notional": 11881.654993,
|
||||
"avg_p": 0.5342746512087326,
|
||||
"avg_fills": 2.2906976744186047,
|
||||
"med_bet": 118.5975,
|
||||
"top_niche": "sports",
|
||||
"niches": 4,
|
||||
"first_seen": 1784309051.0,
|
||||
"tape_first": 1784307800.0,
|
||||
"z": 4.995243373805773,
|
||||
"win_pct": 79.06976744186046,
|
||||
"n_chain": 86,
|
||||
"wins_chain": 68,
|
||||
"pnl_chain": 4559.37,
|
||||
"flips": 0,
|
||||
"z_chain": 5.0,
|
||||
"pm_name": "888ball"
|
||||
},
|
||||
{
|
||||
"wallet": "0x00093a689df7fb09a137f9db7102d9e967c85497",
|
||||
"n": 77,
|
||||
"wins": 73,
|
||||
"exp_wins": 54.45329227980554,
|
||||
"var_sum": 13.963052987935505,
|
||||
"pnl": 2140.0118469999998,
|
||||
"notional": 5036.925661,
|
||||
"avg_p": 0.7071856140234486,
|
||||
"avg_fills": 4.285714285714286,
|
||||
"med_bet": 66.19998799999999,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784310610.0,
|
||||
"tape_first": 1784307375.0,
|
||||
"z": 4.9633698113142515,
|
||||
"win_pct": 94.8051948051948,
|
||||
"n_chain": 77,
|
||||
"wins_chain": 73,
|
||||
"pnl_chain": 2140.01,
|
||||
"flips": 0,
|
||||
"z_chain": 4.96,
|
||||
"pm_name": "AlligatorMarket"
|
||||
},
|
||||
{
|
||||
"wallet": "0x81a994924efdbed20c3d360bbea3913b0b6bdf08",
|
||||
"n": 60,
|
||||
"wins": 53,
|
||||
"exp_wins": 35.140117684949715,
|
||||
"var_sum": 13.244879464928484,
|
||||
"pnl": 10420.120503459717,
|
||||
"notional": 18352.741468999993,
|
||||
"avg_p": 0.5856686280824952,
|
||||
"avg_fills": 2.7,
|
||||
"med_bet": 242.35000000000002,
|
||||
"top_niche": "sports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784310333.0,
|
||||
"tape_first": 1784308147.0,
|
||||
"z": 4.907435357973403,
|
||||
"win_pct": 88.33333333333333,
|
||||
"n_chain": 60,
|
||||
"wins_chain": 53,
|
||||
"pnl_chain": 10420.12,
|
||||
"flips": 0,
|
||||
"z_chain": 4.91,
|
||||
"pm_name": "zishuai"
|
||||
},
|
||||
{
|
||||
"wallet": "0x7547479d43f4b52d892a6f2254050eea50edd158",
|
||||
"n": 35,
|
||||
"wins": 28,
|
||||
"exp_wins": 13.945807466614802,
|
||||
"var_sum": 8.259131917797692,
|
||||
"pnl": 4783.999645,
|
||||
"notional": 5594.672115,
|
||||
"avg_p": 0.3984516419032801,
|
||||
"avg_fills": 3.657142857142857,
|
||||
"med_bet": 177.235712,
|
||||
"top_niche": "sports",
|
||||
"niches": 1,
|
||||
"first_seen": 1784311152.0,
|
||||
"tape_first": 1784307468.0,
|
||||
"z": 4.890335979366821,
|
||||
"win_pct": 80.0,
|
||||
"n_chain": 35,
|
||||
"wins_chain": 28,
|
||||
"pnl_chain": 4784.0,
|
||||
"flips": 0,
|
||||
"z_chain": 4.89,
|
||||
"pm_name": "clownly"
|
||||
},
|
||||
{
|
||||
"wallet": "0x77bcf759a5bbbf604a52d839d5f68ead4c78b91b",
|
||||
"n": 67,
|
||||
"wins": 49,
|
||||
"exp_wins": 30.784823496879497,
|
||||
"var_sum": 13.933889816116611,
|
||||
"pnl": 9022.304815,
|
||||
"notional": 23967.503835000003,
|
||||
"avg_p": 0.45947497756536565,
|
||||
"avg_fills": 5.611940298507463,
|
||||
"med_bet": 86.75,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784308487.0,
|
||||
"tape_first": 1784307950.0,
|
||||
"z": 4.8797457880260735,
|
||||
"win_pct": 73.13432835820896,
|
||||
"n_chain": 67,
|
||||
"wins_chain": 49,
|
||||
"pnl_chain": 9022.3,
|
||||
"flips": 0,
|
||||
"z_chain": 4.88,
|
||||
"pm_name": "Poissonic"
|
||||
},
|
||||
{
|
||||
"wallet": "0x2b358a81a9aa4904fad6981ae9ad62e52fe10bfe",
|
||||
"n": 89,
|
||||
"wins": 69,
|
||||
"exp_wins": 47.315285765164894,
|
||||
"var_sum": 19.90843753485684,
|
||||
"pnl": 2967.188097,
|
||||
"notional": 6258.8919080000005,
|
||||
"avg_p": 0.5316324243276954,
|
||||
"avg_fills": 2.808988764044944,
|
||||
"med_bet": 56.00000000000001,
|
||||
"top_niche": "sports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784310946.0,
|
||||
"tape_first": 1784307425.0,
|
||||
"z": 4.859987082037101,
|
||||
"win_pct": 77.52808988764045,
|
||||
"n_chain": 89,
|
||||
"wins_chain": 69,
|
||||
"pnl_chain": 2967.19,
|
||||
"flips": 0,
|
||||
"z_chain": 4.86,
|
||||
"pm_name": "xc50236afv214"
|
||||
},
|
||||
{
|
||||
"wallet": "0x4e73d4ae46d9a9f633938144ad10c19a893dac97",
|
||||
"n": 47,
|
||||
"wins": 44,
|
||||
"exp_wins": 29.816959683221235,
|
||||
"var_sum": 9.29069411428939,
|
||||
"pnl": 2420.8945584579506,
|
||||
"notional": 8141.967897,
|
||||
"avg_p": 0.6344033975153455,
|
||||
"avg_fills": 1.4893617021276595,
|
||||
"med_bet": 99.999999,
|
||||
"top_niche": "sports",
|
||||
"niches": 1,
|
||||
"first_seen": 1784323282.0,
|
||||
"tape_first": 1784323282.0,
|
||||
"z": 4.653130755319805,
|
||||
"win_pct": 93.61702127659575,
|
||||
"n_chain": 47,
|
||||
"wins_chain": 44,
|
||||
"pnl_chain": 2420.89,
|
||||
"flips": 0,
|
||||
"z_chain": 4.65,
|
||||
"pm_name": "mercury777"
|
||||
},
|
||||
{
|
||||
"wallet": "0xd01c6c60e2a4f6b01347b6e55167d1ec08027f9d",
|
||||
"n": 44,
|
||||
"wins": 41,
|
||||
"exp_wins": 26.93165554758803,
|
||||
"var_sum": 9.507912785821265,
|
||||
"pnl": 11392.22066,
|
||||
"notional": 16778.354325,
|
||||
"avg_p": 0.6120830806270007,
|
||||
"avg_fills": 2.272727272727273,
|
||||
"med_bet": 499.675,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784310115.0,
|
||||
"tape_first": 1784309547.0,
|
||||
"z": 4.562473956642839,
|
||||
"win_pct": 93.18181818181819,
|
||||
"n_chain": 44,
|
||||
"wins_chain": 41,
|
||||
"pnl_chain": 11392.22,
|
||||
"flips": 0,
|
||||
"z_chain": 4.56,
|
||||
"pm_name": "jacques-chirac"
|
||||
},
|
||||
{
|
||||
"wallet": "0x1f624696c102b99bea92c75a502fa7e4a6d676f6",
|
||||
"n": 62,
|
||||
"wins": 53,
|
||||
"exp_wins": 37.576729645655035,
|
||||
"var_sum": 13.077814968060892,
|
||||
"pnl": 12601.373074,
|
||||
"notional": 21239.797794,
|
||||
"avg_p": 0.6060762846073393,
|
||||
"avg_fills": 2.532258064516129,
|
||||
"med_bet": 364.562621,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784310116.0,
|
||||
"tape_first": 1784309547.0,
|
||||
"z": 4.264900241066189,
|
||||
"win_pct": 85.48387096774194,
|
||||
"n_chain": 62,
|
||||
"wins_chain": 53,
|
||||
"pnl_chain": 12601.37,
|
||||
"flips": 0,
|
||||
"z_chain": 4.26,
|
||||
"pm_name": "emacron"
|
||||
},
|
||||
{
|
||||
"wallet": "0x42c99f38d2b951b0dc8e8bd5371fa80c9dd19623",
|
||||
"n": 27,
|
||||
"wins": 26,
|
||||
"exp_wins": 16.376890235270196,
|
||||
"var_sum": 5.146701357135145,
|
||||
"pnl": 17777.377235,
|
||||
"notional": 26109.185091,
|
||||
"avg_p": 0.6065514901951924,
|
||||
"avg_fills": 2.888888888888889,
|
||||
"med_bet": 411.683447,
|
||||
"top_niche": "sports",
|
||||
"niches": 1,
|
||||
"first_seen": 1784308269.0,
|
||||
"tape_first": 1784307488.0,
|
||||
"z": 4.241807496145923,
|
||||
"win_pct": 96.29629629629629,
|
||||
"n_chain": 27,
|
||||
"wins_chain": 26,
|
||||
"pnl_chain": 17777.38,
|
||||
"flips": 0,
|
||||
"z_chain": 4.24,
|
||||
"pm_name": "TRCM"
|
||||
},
|
||||
{
|
||||
"wallet": "0xbd938b88d81e6f93e53a0f3046401abd6c3456c0",
|
||||
"n": 36,
|
||||
"wins": 33,
|
||||
"exp_wins": 21.959967735436692,
|
||||
"var_sum": 7.072668102642087,
|
||||
"pnl": 3255.7173988630807,
|
||||
"notional": 9707.40033,
|
||||
"avg_p": 0.6099991037621303,
|
||||
"avg_fills": 3.138888888888889,
|
||||
"med_bet": 62.263999999999996,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784308764.0,
|
||||
"tape_first": 1784308764.0,
|
||||
"z": 4.151248229286082,
|
||||
"win_pct": 91.66666666666667,
|
||||
"n_chain": 36,
|
||||
"wins_chain": 33,
|
||||
"pnl_chain": 3255.72,
|
||||
"flips": 0,
|
||||
"z_chain": 4.15,
|
||||
"pm_name": "lebandito"
|
||||
},
|
||||
{
|
||||
"wallet": "0x98883c610e4400dd998f81cf41658d51ff06e6fe",
|
||||
"n": 32,
|
||||
"wins": 29,
|
||||
"exp_wins": 18.109274021683948,
|
||||
"var_sum": 6.907474454318839,
|
||||
"pnl": 2654.5016800000003,
|
||||
"notional": 3989.219182,
|
||||
"avg_p": 0.5659148131776234,
|
||||
"avg_fills": 1.21875,
|
||||
"med_bet": 123.7199995,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784311200.0,
|
||||
"tape_first": 1784308092.0,
|
||||
"z": 4.143784744115456,
|
||||
"win_pct": 90.625,
|
||||
"n_chain": 32,
|
||||
"wins_chain": 29,
|
||||
"pnl_chain": 2654.5,
|
||||
"flips": 0,
|
||||
"z_chain": 4.14,
|
||||
"pm_name": "pt2-2804"
|
||||
},
|
||||
{
|
||||
"wallet": "0xfb07f48542d2b655e9d0bf1cc92a8a6feee8e2cc",
|
||||
"n": 74,
|
||||
"wins": 56,
|
||||
"exp_wins": 39.02942774495128,
|
||||
"var_sum": 16.813265542431893,
|
||||
"pnl": 9803.412714,
|
||||
"notional": 17820.491369,
|
||||
"avg_p": 0.5274246992560984,
|
||||
"avg_fills": 2.7567567567567566,
|
||||
"med_bet": 123.359063,
|
||||
"top_niche": "sports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784311077.0,
|
||||
"tape_first": 1784307617.0,
|
||||
"z": 4.138761982297566,
|
||||
"win_pct": 75.67567567567568,
|
||||
"n_chain": 74,
|
||||
"wins_chain": 56,
|
||||
"pnl_chain": 9803.41,
|
||||
"flips": 0,
|
||||
"z_chain": 4.14,
|
||||
"pm_name": "0xfB07F48542d2b655e9D0Bf1cC92a8a6Feee8e2cC-1782415802542"
|
||||
},
|
||||
{
|
||||
"wallet": "0xde9f7f4e77a1595623ceb58e469f776257ccd43c",
|
||||
"n": 46,
|
||||
"wins": 42,
|
||||
"exp_wins": 29.292511414040696,
|
||||
"var_sum": 9.430769698523656,
|
||||
"pnl": 43582.71595499999,
|
||||
"notional": 64565.132466,
|
||||
"avg_p": 0.636793726392189,
|
||||
"avg_fills": 5.826086956521739,
|
||||
"med_bet": 466.6074225,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784307776.0,
|
||||
"tape_first": 1784307776.0,
|
||||
"z": 4.13795876496337,
|
||||
"win_pct": 91.30434782608695,
|
||||
"n_chain": 46,
|
||||
"wins_chain": 42,
|
||||
"pnl_chain": 43582.72,
|
||||
"flips": 0,
|
||||
"z_chain": 4.14,
|
||||
"pm_name": "tradecraft"
|
||||
},
|
||||
{
|
||||
"wallet": "0xb3736ecc788dd8859510378610ef146aa672d97c",
|
||||
"n": 21,
|
||||
"wins": 21,
|
||||
"exp_wins": 12.421557549813159,
|
||||
"var_sum": 4.311387392914019,
|
||||
"pnl": 3936.239353,
|
||||
"notional": 8132.284173,
|
||||
"avg_p": 0.5915027404672932,
|
||||
"avg_fills": 2.142857142857143,
|
||||
"med_bet": 162.499999,
|
||||
"top_niche": "esports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784316620.0,
|
||||
"tape_first": 1784316620.0,
|
||||
"z": 4.131425429730045,
|
||||
"win_pct": 100.0,
|
||||
"n_chain": 21,
|
||||
"wins_chain": 21,
|
||||
"pnl_chain": 3936.24,
|
||||
"flips": 0,
|
||||
"z_chain": 4.13,
|
||||
"pm_name": "0xb3736eCC788Dd8859510378610eF146Aa672D97C-1774580778092"
|
||||
},
|
||||
{
|
||||
"wallet": "0x0181beadc6023c6abade42836fedf6cee08a9b5f",
|
||||
"n": 15,
|
||||
"wins": 14,
|
||||
"exp_wins": 6.61734274823683,
|
||||
"var_sum": 3.3886139794295698,
|
||||
"pnl": 794.3533356661749,
|
||||
"notional": 1150.379,
|
||||
"avg_p": 0.44115618321578864,
|
||||
"avg_fills": 4.133333333333334,
|
||||
"med_bet": 64.0,
|
||||
"top_niche": "esports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784312149.0,
|
||||
"tape_first": 1784312149.0,
|
||||
"z": 4.010528964393875,
|
||||
"win_pct": 93.33333333333333,
|
||||
"n_chain": 15,
|
||||
"wins_chain": 14,
|
||||
"pnl_chain": 794.35,
|
||||
"flips": 0,
|
||||
"z_chain": 4.01,
|
||||
"pm_name": "0x0181BeaDc6023C6AbaDE42836FeDf6CEE08A9B5F-1777064059464"
|
||||
},
|
||||
{
|
||||
"wallet": "0x317149007acf6c4ac806df15ad95b2fa41aeb991",
|
||||
"n": 28,
|
||||
"wins": 28,
|
||||
"exp_wins": 18.44348820571308,
|
||||
"var_sum": 5.702317414512164,
|
||||
"pnl": 6648.643561999999,
|
||||
"notional": 18330.002816,
|
||||
"avg_p": 0.6586960073468957,
|
||||
"avg_fills": 2.75,
|
||||
"med_bet": 180.99999849999998,
|
||||
"top_niche": "sports",
|
||||
"niches": 1,
|
||||
"first_seen": 1784311886.0,
|
||||
"tape_first": 1784311886.0,
|
||||
"z": 4.001968869209133,
|
||||
"win_pct": 100.0,
|
||||
"n_chain": 28,
|
||||
"wins_chain": 28,
|
||||
"pnl_chain": 6648.64,
|
||||
"flips": 0,
|
||||
"z_chain": 4.0,
|
||||
"pm_name": "Zeljko"
|
||||
},
|
||||
{
|
||||
"wallet": "0x0fde10ef36646b3fb3eb8df2e18f0e1bc17c0258",
|
||||
"n": 46,
|
||||
"wins": 37,
|
||||
"exp_wins": 23.752161204870898,
|
||||
"var_sum": 11.085466927204862,
|
||||
"pnl": 2089.971865,
|
||||
"notional": 3413.249868,
|
||||
"avg_p": 0.5163513305406717,
|
||||
"avg_fills": 1.1956521739130435,
|
||||
"med_bet": 52.88495,
|
||||
"top_niche": "sports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784336807.0,
|
||||
"tape_first": 1784315160.0,
|
||||
"z": 3.9789459479335165,
|
||||
"win_pct": 80.43478260869566,
|
||||
"n_chain": 46,
|
||||
"wins_chain": 37,
|
||||
"pnl_chain": 2089.97,
|
||||
"flips": 0,
|
||||
"z_chain": 3.98,
|
||||
"pm_name": "pxxp"
|
||||
},
|
||||
{
|
||||
"wallet": "0x8afaebae4eebe80c080b822412647244570e28f0",
|
||||
"n": 42,
|
||||
"wins": 35,
|
||||
"exp_wins": 22.434868625795808,
|
||||
"var_sum": 10.017744163882767,
|
||||
"pnl": 2531.85367,
|
||||
"notional": 4239.8195670000005,
|
||||
"avg_p": 0.534163538709424,
|
||||
"avg_fills": 1.119047619047619,
|
||||
"med_bet": 80.63499949999999,
|
||||
"top_niche": "sports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784336807.0,
|
||||
"tape_first": 1784320077.0,
|
||||
"z": 3.969922837156092,
|
||||
"win_pct": 83.33333333333333,
|
||||
"n_chain": 42,
|
||||
"wins_chain": 35,
|
||||
"pnl_chain": 2531.85,
|
||||
"flips": 0,
|
||||
"z_chain": 3.97,
|
||||
"pm_name": "pcjones"
|
||||
},
|
||||
{
|
||||
"wallet": "0x37b278ab19e1cdc0e392da980dcc59ef802a8681",
|
||||
"n": 37,
|
||||
"wins": 29,
|
||||
"exp_wins": 17.608900475729584,
|
||||
"var_sum": 8.247310389671217,
|
||||
"pnl": 2866.5949249627915,
|
||||
"notional": 5951.356263,
|
||||
"avg_p": 0.4759162290737725,
|
||||
"avg_fills": 4.513513513513513,
|
||||
"med_bet": 102.333333,
|
||||
"top_niche": "other",
|
||||
"niches": 2,
|
||||
"first_seen": 1784368091.0,
|
||||
"tape_first": 1784307340.0,
|
||||
"z": 3.9665184296187688,
|
||||
"win_pct": 78.37837837837837,
|
||||
"n_chain": 37,
|
||||
"wins_chain": 29,
|
||||
"pnl_chain": 2866.59,
|
||||
"flips": 0,
|
||||
"z_chain": 3.97,
|
||||
"pm_name": "taemaxx"
|
||||
}
|
||||
],
|
||||
"benchmark": [
|
||||
{
|
||||
"wallet": "0x41558102a796ba971c7567cad41c307e59f8fa41",
|
||||
"n": 28,
|
||||
"wins": 28,
|
||||
"exp_wins": 21.091997469323683,
|
||||
"var_sum": 4.43798320814813,
|
||||
"pnl": 9512.187731000002,
|
||||
"notional": 36553.036842,
|
||||
"avg_p": 0.7532856239044172,
|
||||
"avg_fills": 1.0357142857142858,
|
||||
"med_bet": 495.43515,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784335176.0,
|
||||
"tape_first": 1784327711.0,
|
||||
"z": 3.279137748229166,
|
||||
"win_pct": 100.0
|
||||
},
|
||||
{
|
||||
"wallet": "0x0c3e55cf50a00a7e74fabd8584c6fdde21603c4c",
|
||||
"n": 32,
|
||||
"wins": 26,
|
||||
"exp_wins": 20.147737898820093,
|
||||
"var_sum": 6.042616380243587,
|
||||
"pnl": -1870.2261018369272,
|
||||
"notional": 16132.020751,
|
||||
"avg_p": 0.6296168093381279,
|
||||
"avg_fills": 4.375,
|
||||
"med_bet": 85.39099949999999,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784308764.0,
|
||||
"tape_first": 1784308764.0,
|
||||
"z": 2.3807360953321206,
|
||||
"win_pct": 81.25
|
||||
},
|
||||
{
|
||||
"wallet": "0xab417c0bacc9fe17368d5d662c957f54a1fcc453",
|
||||
"n": 21,
|
||||
"wins": 17,
|
||||
"exp_wins": 12.615410445503775,
|
||||
"var_sum": 4.238664352793026,
|
||||
"pnl": 423.54093,
|
||||
"notional": 1209.8768019999998,
|
||||
"avg_p": 0.600733830738275,
|
||||
"avg_fills": 5.619047619047619,
|
||||
"med_bet": 37.2,
|
||||
"top_niche": "sports",
|
||||
"niches": 1,
|
||||
"first_seen": 1784307870.0,
|
||||
"tape_first": 1784307344.0,
|
||||
"z": 2.1296803861979394,
|
||||
"win_pct": 80.95238095238095
|
||||
},
|
||||
{
|
||||
"wallet": "0x7aa7d7147ba1bf4a1df2f9db183202b6ab0cafb4",
|
||||
"n": 19,
|
||||
"wins": 16,
|
||||
"exp_wins": 12.764197336387769,
|
||||
"var_sum": 3.6660632921242584,
|
||||
"pnl": 150.67549394401917,
|
||||
"notional": 784.4299739999999,
|
||||
"avg_p": 0.6717998598098825,
|
||||
"avg_fills": 3.789473684210526,
|
||||
"med_bet": 29.469996000000002,
|
||||
"top_niche": "esports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784318718.0,
|
||||
"tape_first": 1784309574.0,
|
||||
"z": 1.68998188308657,
|
||||
"win_pct": 84.21052631578948
|
||||
},
|
||||
{
|
||||
"wallet": "0x2d462b29127b919ae4c085e03be44ae7077e3e2d",
|
||||
"n": 11,
|
||||
"wins": 9,
|
||||
"exp_wins": 7.109281743285661,
|
||||
"var_sum": 2.0256470955566934,
|
||||
"pnl": 2970.156038774078,
|
||||
"notional": 9179.671193,
|
||||
"avg_p": 0.6462983402986965,
|
||||
"avg_fills": 8.272727272727273,
|
||||
"med_bet": 122.066306,
|
||||
"top_niche": "esports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784315703.0,
|
||||
"tape_first": 1784313210.0,
|
||||
"z": 1.3284491184034926,
|
||||
"win_pct": 81.81818181818181
|
||||
},
|
||||
{
|
||||
"wallet": "0x0d42cc5ff0526fbb8f0bb9eafa9ebba3f23df124",
|
||||
"n": 21,
|
||||
"wins": 13,
|
||||
"exp_wins": 10.447586146112087,
|
||||
"var_sum": 3.8149546086044586,
|
||||
"pnl": 620.894762903966,
|
||||
"notional": 3658.3686689999995,
|
||||
"avg_p": 0.49750410219581365,
|
||||
"avg_fills": 13.0,
|
||||
"med_bet": 102.68,
|
||||
"top_niche": "other",
|
||||
"niches": 3,
|
||||
"first_seen": 1784311873.0,
|
||||
"tape_first": 1784307874.0,
|
||||
"z": 1.306791815246233,
|
||||
"win_pct": 61.904761904761905
|
||||
},
|
||||
{
|
||||
"wallet": "0x1b44945f8992fcea2b43034557e47d11827fd8de",
|
||||
"n": 13,
|
||||
"wins": 9,
|
||||
"exp_wins": 7.157808621579969,
|
||||
"var_sum": 2.5914675442187076,
|
||||
"pnl": 368.3684423014988,
|
||||
"notional": 4660.93776,
|
||||
"avg_p": 0.5506006631984591,
|
||||
"avg_fills": 10.461538461538462,
|
||||
"med_bet": 142.414628,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784340198.0,
|
||||
"tape_first": 1784333799.0,
|
||||
"z": 1.1443578639737597,
|
||||
"win_pct": 69.23076923076923
|
||||
},
|
||||
{
|
||||
"wallet": "0x1aeebd7b0eb92037a630004f8eabc0759c36c139",
|
||||
"n": 9,
|
||||
"wins": 4,
|
||||
"exp_wins": 3.7797900743107276,
|
||||
"var_sum": 1.0971857367134408,
|
||||
"pnl": 2182.6782089400936,
|
||||
"notional": 10206.928695,
|
||||
"avg_p": 0.4199766749234142,
|
||||
"avg_fills": 11.777777777777779,
|
||||
"med_bet": 400.71,
|
||||
"top_niche": "sports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784320139.0,
|
||||
"tape_first": 1784319067.0,
|
||||
"z": 0.21023102791071324,
|
||||
"win_pct": 44.44444444444444
|
||||
},
|
||||
{
|
||||
"wallet": "0xdebbe89ceb32828a99648bca497684f5209ceedb",
|
||||
"n": 30,
|
||||
"wins": 19,
|
||||
"exp_wins": 18.679287812807225,
|
||||
"var_sum": 4.208149270955376,
|
||||
"pnl": -1732.4607049999972,
|
||||
"notional": 64498.526175,
|
||||
"avg_p": 0.6226429270935742,
|
||||
"avg_fills": 7.133333333333334,
|
||||
"med_bet": 715.645865,
|
||||
"top_niche": "other",
|
||||
"niches": 2,
|
||||
"first_seen": 1784307961.0,
|
||||
"tape_first": 1784307961.0,
|
||||
"z": 0.15633992355948853,
|
||||
"win_pct": 63.333333333333336
|
||||
},
|
||||
{
|
||||
"wallet": "0x69b9bd4fa27813091fcfe726541f2fd7baa3a5d5",
|
||||
"n": 14,
|
||||
"wins": 8,
|
||||
"exp_wins": 8.42316155589116,
|
||||
"var_sum": 2.8974152337658543,
|
||||
"pnl": -1081.6088567942065,
|
||||
"notional": 3317.569689,
|
||||
"avg_p": 0.6016543968493685,
|
||||
"avg_fills": 1.7857142857142858,
|
||||
"med_bet": 199.9999985,
|
||||
"top_niche": "esports",
|
||||
"niches": 3,
|
||||
"first_seen": 1784308621.0,
|
||||
"tape_first": 1784308621.0,
|
||||
"z": -0.2485998347929401,
|
||||
"win_pct": 57.142857142857146
|
||||
},
|
||||
{
|
||||
"wallet": "0xc684828f6b03487759ced2ebdd975f91f3532228",
|
||||
"n": 17,
|
||||
"wins": 9,
|
||||
"exp_wins": 9.99016755243394,
|
||||
"var_sum": 2.956545338585819,
|
||||
"pnl": -1909.4314810698643,
|
||||
"notional": 19454.826313999998,
|
||||
"avg_p": 0.5876569148490552,
|
||||
"avg_fills": 9.764705882352942,
|
||||
"med_bet": 614.3456199999999,
|
||||
"top_niche": "other",
|
||||
"niches": 2,
|
||||
"first_seen": 1784387047.0,
|
||||
"tape_first": 1784311232.0,
|
||||
"z": -0.5758593449029813,
|
||||
"win_pct": 52.94117647058823
|
||||
},
|
||||
{
|
||||
"wallet": "0x82d2e4dbb0a849ff8e2f5380719769145648beea",
|
||||
"n": 8,
|
||||
"wins": 3,
|
||||
"exp_wins": 4.210769706246229,
|
||||
"var_sum": 1.9692381195290396,
|
||||
"pnl": 2285.6253119999997,
|
||||
"notional": 13711.706415,
|
||||
"avg_p": 0.5263462132807786,
|
||||
"avg_fills": 5.0,
|
||||
"med_bet": 939.4969729999999,
|
||||
"top_niche": "esports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784329658.0,
|
||||
"tape_first": 1784308119.0,
|
||||
"z": -0.862804555083645,
|
||||
"win_pct": 37.5
|
||||
},
|
||||
{
|
||||
"wallet": "0x40ce68f1564f3c751b12d88a393d8cc0651dbf90",
|
||||
"n": 16,
|
||||
"wins": 5,
|
||||
"exp_wins": 6.660000000288585,
|
||||
"var_sum": 3.6314000001020643,
|
||||
"pnl": -2671.6812069999996,
|
||||
"notional": 9199.237341,
|
||||
"avg_p": 0.4162500000180366,
|
||||
"avg_fills": 1.6875,
|
||||
"med_bet": 556.75,
|
||||
"top_niche": "esports",
|
||||
"niches": 2,
|
||||
"first_seen": 1784369512.0,
|
||||
"tape_first": 1784369512.0,
|
||||
"z": -0.8711060770398212,
|
||||
"win_pct": 31.25
|
||||
}
|
||||
],
|
||||
"screened": 2360
|
||||
}
|
||||
@@ -0,0 +1,295 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Tape-era sharp screen over the RTDS firehose (issue #2, first flow study).
|
||||
|
||||
The tape (rtds.duckdb `trades`, every CLOB fill since 2026-07-17) sees ALL
|
||||
fills — including wallets that lose and vanish — so unlike the data-api
|
||||
leaderboards there is NO survivorship bias to unwind ([[polymarket-smart-money]]:
|
||||
displayed win rates ~92% collapse to ~50% once hidden losers count). The
|
||||
screen is insider.py's improbability methodology transplanted onto tape:
|
||||
|
||||
1. RESOLVE FROM THE TAPE. A token is proxy-resolved when its final-30min
|
||||
VWAP converged (>= 0.97 won / <= 0.03 lost) AND it stopped trading
|
||||
QUIET_H before tape end AND no sibling token of the same condition
|
||||
disagrees (two "winners" in one cond = still-live or bad data -> drop).
|
||||
Chain truth (payouts.py) then overlays the shortlist's conditions, so
|
||||
50/50 refunds and operator quirks can't survive to the report
|
||||
([[polymarket-resolution-truth]]).
|
||||
2. HELD NET POSITIONS, not trades. Per wallet-token: net = buys - sells;
|
||||
only |net| that survives to the token's last tape print is a bet (a
|
||||
scalper who round-trips out is not "holding" the resolution). Entry is
|
||||
the buy VWAP; P&L = net * (payout - vwap).
|
||||
3. IMPROBABILITY z. Over a wallet's proxy-resolved held bets: each entry
|
||||
at price p wins with prob p under the null; z = (W - Σp)/sqrt(Σp(1-p)).
|
||||
The tape's 3-day window means n is small — z >= 2 with n >= MIN_BETS
|
||||
and positive P&L is a CANDIDATE, not a verdict; the bench forward
|
||||
window is the verdict (bench review, issue #13).
|
||||
4. CONTEXT COLUMNS for triage: niche mix (title keywords), notional,
|
||||
price band, burst flag (wallet's first tape print < 48h before its
|
||||
biggest bet — fresh-or-returning wallet swinging immediately, the
|
||||
insider fingerprint), and the follow/bench overlap (excluded from
|
||||
candidates, printed as benchmark rows so the screen can be sanity
|
||||
checked against wallets we already believe in).
|
||||
|
||||
Outputs live/tape_sharps.json (full scored rows) and a console report.
|
||||
|
||||
python3 tape_sharps.py # screen + chain-validate top 25
|
||||
python3 tape_sharps.py --no-chain # tape-only (no RPC)
|
||||
python3 tape_sharps.py --min-bets 6 # loosen for exploration
|
||||
"""
|
||||
import argparse
|
||||
import json
|
||||
import math
|
||||
import os
|
||||
import time
|
||||
|
||||
import duckdb
|
||||
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
DB = os.path.join(HERE, "rtds.duckdb")
|
||||
OUT = os.path.join(HERE, "tape_sharps.json")
|
||||
|
||||
# proxy-resolution + bet thresholds (tunable; defaults are the 2026-07-20
|
||||
# first-run calibration — see FINDINGS addendum in the issue)
|
||||
WIN_T, LOSE_T = 0.97, 0.03 # final-30min VWAP convergence
|
||||
QUIET_H = 2 # token must be quiet this long before tape end
|
||||
MIN_NET_SH = 5.0 # net shares that count as a held bet
|
||||
MIN_NET_USD = 20.0 # ...and its buy notional (dust bots out)
|
||||
P_LO, P_HI = 0.05, 0.95 # entry band for the z math (insider.py clamps)
|
||||
BURST_H = 48 # "fresh in tape" window for the burst flag
|
||||
|
||||
NICHES = [ # (label, TITLE ILIKE patterns) — first match wins
|
||||
("esports", ["%lol:%", "%dota%", "%cs2%", "%csgo%", "%valorant%", "%esports%",
|
||||
"% vs %game %", "%bilibili%", "%map %winner%"]),
|
||||
("tennis", ["%tennis%", "%atp%", "%wta%", "%wimbledon%", "%open (m)%", "%set %winner%"]),
|
||||
("sports", ["% vs. %", "% vs %", "% @ %", "%mlb%", "%nba%", "%nhl%", "%ufc%",
|
||||
"%world cup%", "%f1%", "%grand prix%"]),
|
||||
("crypto", ["%bitcoin%", "%btc%", "%ethereum%", "%eth %", "%solana%", "%xrp%",
|
||||
"%price of%", "%above%on july%", "%above%on august%"]),
|
||||
("politics", ["%election%", "%president%", "%senate%", "%governor%", "%mayor%",
|
||||
"%nominee%", "%impeach%", "%tariff%", "%fed %", "%rate cut%"]),
|
||||
("geo", ["%iran%", "%israel%", "%russia%", "%ukraine%", "%china%", "%taiwan%",
|
||||
"%ceasefire%", "%strike%", "%nato%"]),
|
||||
]
|
||||
|
||||
|
||||
def known_wallets():
|
||||
"""follow set + benches + the live bot itself -> {addr_lower: label}."""
|
||||
out = {"0x455e252e45ee46d6c4cc1c8fadd3899d68f245a1": "OUR-BOT"}
|
||||
try:
|
||||
for w in json.load(open(os.path.join(HERE, "copybot.paper.json")))["wallets"]:
|
||||
out[w["wallet"].lower()] = f"follow:{w.get('name', w['wallet'][:8])}"
|
||||
except Exception:
|
||||
pass
|
||||
for fn, tag in (("watch_sharps.json", "bench"), ("watch_skilled.json", "skilled")):
|
||||
try:
|
||||
for w in json.load(open(os.path.join(HERE, fn))):
|
||||
out.setdefault(w["wallet"].lower(), f"{tag}:{w.get('name', '?')}")
|
||||
except Exception:
|
||||
pass
|
||||
return out
|
||||
|
||||
|
||||
def niche_case():
|
||||
whens = []
|
||||
for label, pats in NICHES:
|
||||
ors = " OR ".join(f"lower(title) LIKE '{p}'" for p in pats)
|
||||
whens.append(f"WHEN ({ors}) THEN '{label}'")
|
||||
return "CASE " + " ".join(whens) + " ELSE 'other' END"
|
||||
|
||||
|
||||
def screen(db, min_bets):
|
||||
"""One SQL pass: proxy-resolve tokens, net held positions, wallet rollup."""
|
||||
t_end = db.execute("SELECT max(ts) FROM trades").fetchone()[0]
|
||||
quiet = t_end - QUIET_H * 3600
|
||||
db.execute(f"""
|
||||
CREATE TEMP TABLE alltok AS
|
||||
WITH last AS (
|
||||
SELECT asset, any_value(cond) cond, max(ts) last_ts
|
||||
FROM trades WHERE cond IS NOT NULL AND cond != '' GROUP BY asset
|
||||
), term AS ( -- final-30min VWAP per token
|
||||
SELECT t.asset,
|
||||
sum(t.price * t.size) / nullif(sum(t.size), 0) term_vwap
|
||||
FROM trades t JOIN last l ON t.asset = l.asset
|
||||
WHERE t.ts >= l.last_ts - 1800 GROUP BY t.asset
|
||||
)
|
||||
SELECT l.asset, l.cond, l.last_ts, tm.term_vwap,
|
||||
l.last_ts > {quiet} AS alive,
|
||||
CASE WHEN tm.term_vwap >= {WIN_T} THEN 1.0
|
||||
WHEN tm.term_vwap <= {LOSE_T} THEN 0.0 END AS payout
|
||||
FROM last l JOIN term tm ON l.asset = tm.asset
|
||||
""")
|
||||
# cond veto: any sibling still trading (in-play comebacks exist), or two
|
||||
# proxy-winners (multi-outcome not actually settled) -> drop the cond
|
||||
db.execute("""
|
||||
CREATE TEMP TABLE badcond AS
|
||||
SELECT cond FROM alltok GROUP BY cond
|
||||
HAVING bool_or(alive)
|
||||
OR sum(CASE WHEN payout = 1.0 THEN 1 ELSE 0 END) > 1
|
||||
""")
|
||||
db.execute("""
|
||||
CREATE TEMP TABLE tok AS
|
||||
SELECT * FROM alltok WHERE NOT alive AND payout IS NOT NULL
|
||||
""")
|
||||
db.execute(f"""
|
||||
CREATE TEMP TABLE bets AS
|
||||
SELECT tr.wallet, tr.asset, any_value(tk.cond) cond,
|
||||
any_value(tk.payout) payout,
|
||||
any_value(tk.term_vwap) term_vwap,
|
||||
sum(CASE WHEN tr.side = 'BUY' THEN tr.size ELSE -tr.size END) net,
|
||||
sum(CASE WHEN tr.side = 'BUY' THEN tr.size * tr.price END)
|
||||
/ nullif(sum(CASE WHEN tr.side = 'BUY' THEN tr.size END), 0) vwap,
|
||||
sum(CASE WHEN tr.side = 'BUY' THEN tr.size * tr.price END) buy_usd,
|
||||
count(*) n_fills,
|
||||
any_value({niche_case()}) niche,
|
||||
min(tr.ts) first_ts
|
||||
FROM trades tr
|
||||
JOIN tok tk ON tr.asset = tk.asset
|
||||
WHERE tk.payout IS NOT NULL
|
||||
AND tk.cond NOT IN (SELECT cond FROM badcond)
|
||||
AND tr.ts <= tk.last_ts -- nothing after the last print
|
||||
GROUP BY tr.wallet, tr.asset
|
||||
HAVING net >= {MIN_NET_SH}
|
||||
AND buy_usd >= {MIN_NET_USD}
|
||||
AND vwap BETWEEN {P_LO} AND {P_HI}
|
||||
""")
|
||||
rows = db.execute(f"""
|
||||
WITH w AS (
|
||||
SELECT wallet,
|
||||
count(*) n,
|
||||
sum(CASE WHEN payout = 1.0 THEN 1 ELSE 0 END) wins,
|
||||
sum(vwap) exp_wins,
|
||||
sum(vwap * (1 - vwap)) var_sum,
|
||||
sum(net * (payout - vwap)) pnl,
|
||||
sum(buy_usd) notional,
|
||||
avg(vwap) avg_p,
|
||||
avg(n_fills) avg_fills,
|
||||
median(buy_usd) med_bet,
|
||||
mode(niche) top_niche,
|
||||
count(DISTINCT niche) niches,
|
||||
min(first_ts) first_seen
|
||||
FROM bets GROUP BY wallet HAVING n >= {min_bets}
|
||||
),
|
||||
life AS (SELECT wallet, min(ts) tape_first FROM trades GROUP BY wallet)
|
||||
SELECT w.*, life.tape_first FROM w JOIN life USING (wallet)
|
||||
""").fetchall()
|
||||
cols = ["wallet", "n", "wins", "exp_wins", "var_sum", "pnl", "notional",
|
||||
"avg_p", "avg_fills", "med_bet", "top_niche", "niches",
|
||||
"first_seen", "tape_first"]
|
||||
out = []
|
||||
for r in rows:
|
||||
d = dict(zip(cols, r))
|
||||
d["z"] = ((d["wins"] - d["exp_wins"]) / math.sqrt(d["var_sum"])
|
||||
if d["var_sum"] > 0 else 0.0)
|
||||
d["win_pct"] = 100.0 * d["wins"] / d["n"]
|
||||
out.append(d)
|
||||
return out, t_end
|
||||
|
||||
|
||||
def chain_validate(cands, db):
|
||||
"""Overlay payouts.truth on each candidate bet; rescore. Refund (0.5)
|
||||
counts as neither win nor loss; unknown keeps the tape proxy."""
|
||||
import payouts
|
||||
conds = sorted({c for w in cands for c in w["_conds"]})
|
||||
payouts.ensure(conds)
|
||||
for w in cands:
|
||||
n = wins = exp = var = pnl = 0.0
|
||||
flip = 0
|
||||
for (cond, asset, net, vwap, proxy) in w["_bets"]:
|
||||
t = payouts.truth(cond, asset)
|
||||
pay = proxy if t is None else t
|
||||
if pay == 0.5: # refund: stake back, no win/no loss
|
||||
pnl += 0.0
|
||||
continue
|
||||
if t is not None and t != proxy:
|
||||
flip += 1
|
||||
n += 1
|
||||
wins += pay
|
||||
exp += vwap
|
||||
var += vwap * (1 - vwap)
|
||||
pnl += net * (pay - vwap)
|
||||
w.update(n_chain=int(n), wins_chain=int(wins), pnl_chain=round(pnl, 2),
|
||||
flips=flip,
|
||||
z_chain=round((wins - exp) / math.sqrt(var), 2) if var > 0 else 0.0)
|
||||
return cands
|
||||
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--min-bets", type=int, default=8)
|
||||
ap.add_argument("--top", type=int, default=25, help="chain-validate this many")
|
||||
ap.add_argument("--no-chain", action="store_true")
|
||||
ap.add_argument("--max-bets", type=int, default=90, help="copyable cadence cap")
|
||||
ap.add_argument("--max-fills", type=float, default=6.0, help="avg fills/bet cap")
|
||||
ap.add_argument("--min-med-usd", type=float, default=50.0, help="median bet floor")
|
||||
args = ap.parse_args()
|
||||
|
||||
db = duckdb.connect(DB, read_only=True)
|
||||
known = known_wallets()
|
||||
scored, t_end = screen(db, args.min_bets)
|
||||
scored.sort(key=lambda d: -d["z"])
|
||||
|
||||
# COPYABLE means the bot could actually mirror it at 3-17s lag: discrete
|
||||
# entries (few fills per bet, not continuous flow), human cadence (<=
|
||||
# max-bets held bets in the 3-day tape), conviction-sized (median bet
|
||||
# clears the $25 follow floor with margin). Everything else that scores
|
||||
# is ALGO FLOW — real edge, uncopyable execution (they ARE the crater).
|
||||
def copyable(d):
|
||||
return (d["avg_fills"] <= args.max_fills and d["n"] <= args.max_bets
|
||||
and d["med_bet"] >= args.min_med_usd)
|
||||
|
||||
fresh = [d for d in scored if d["z"] >= 2.0 and d["pnl"] > 0
|
||||
and d["wallet"].lower() not in known]
|
||||
interesting = [d for d in fresh if copyable(d)][:args.top]
|
||||
algos = [d for d in fresh if not copyable(d)][:8]
|
||||
for d in interesting:
|
||||
rows = db.execute("""
|
||||
SELECT cond, asset, net, vwap, payout FROM bets WHERE wallet = ?
|
||||
""", [d["wallet"]]).fetchall()
|
||||
d["_conds"] = [r[0] for r in rows]
|
||||
d["_bets"] = rows
|
||||
if interesting and not args.no_chain:
|
||||
chain_validate(interesting, db)
|
||||
for d in interesting:
|
||||
d.pop("_conds", None); d.pop("_bets", None)
|
||||
|
||||
bench = [d for d in scored if d["wallet"].lower() in known]
|
||||
stamp = time.strftime("%Y-%m-%d %H:%M UTC", time.gmtime(t_end))
|
||||
|
||||
def fmt(d):
|
||||
age_h = (t_end - d["tape_first"]) / 3600
|
||||
burst = "BURST" if age_h <= BURST_H else f"{age_h:.0f}h"
|
||||
chain = (f" · chain z={d['z_chain']} {d['wins_chain']}/{d['n_chain']} "
|
||||
f"${d['pnl_chain']:+,.0f} ({d['flips']} flips)"
|
||||
if "z_chain" in d else "")
|
||||
return (f"{d['wallet'][:10]}… z={d['z']:+.2f} {d['wins']}/{d['n']} "
|
||||
f"({d['win_pct']:.0f}%) avg_p {d['avg_p']:.2f} "
|
||||
f"med ${d['med_bet']:,.0f} f/b {d['avg_fills']:.1f} "
|
||||
f"pnl ${d['pnl']:+,.0f} vol ${d['notional']:,.0f} "
|
||||
f"{d['top_niche']}({d['niches']}) {burst}{chain}")
|
||||
|
||||
print(f"tape through {stamp} · {len(scored)} wallets with >= "
|
||||
f"{args.min_bets} proxy-resolved held bets\n")
|
||||
print(f"— COPYABLE candidates (z >= 2, pnl > 0, <= {args.max_bets} bets, "
|
||||
f"<= {args.max_fills:.0f} fills/bet, med >= ${args.min_med_usd:.0f}) —")
|
||||
for d in interesting:
|
||||
print(fmt(d))
|
||||
print(f"\n— algo flow (scores, but uncopyable execution; {len(algos)} of "
|
||||
f"{len(fresh) - len(interesting)}) —")
|
||||
for d in algos:
|
||||
print(fmt(d))
|
||||
print("\n— benchmark: known wallets through the same screen —")
|
||||
for d in sorted(bench, key=lambda x: -x["z"])[:15]:
|
||||
print(f"[{known[d['wallet'].lower()]}] {fmt(d)}")
|
||||
|
||||
json.dump({"tape_end": t_end, "params": {
|
||||
"min_bets": args.min_bets, "win_t": WIN_T, "lose_t": LOSE_T,
|
||||
"quiet_h": QUIET_H, "min_net_sh": MIN_NET_SH,
|
||||
"min_net_usd": MIN_NET_USD, "p_band": [P_LO, P_HI]},
|
||||
"candidates": interesting, "benchmark": bench,
|
||||
"screened": len(scored)},
|
||||
open(OUT, "w"), indent=1, default=float)
|
||||
print(f"\nwrote {OUT}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user