From 008b3138cc4a58c874d2b78362281ae23fd818f2 Mon Sep 17 00:00:00 2001 From: jaxperro Date: Mon, 20 Jul 2026 15:36:00 -0400 Subject: [PATCH] tape research: first sharp screen over the RTDS firehose (#2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- live/tape_sharps.json | 854 ++++++++++++++++++++++++++++++++++++++++++ live/tape_sharps.py | 295 +++++++++++++++ 2 files changed, 1149 insertions(+) create mode 100644 live/tape_sharps.json create mode 100644 live/tape_sharps.py diff --git a/live/tape_sharps.json b/live/tape_sharps.json new file mode 100644 index 00000000..a993671f --- /dev/null +++ b/live/tape_sharps.json @@ -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 +} \ No newline at end of file diff --git a/live/tape_sharps.py b/live/tape_sharps.py new file mode 100644 index 00000000..4b8c20d0 --- /dev/null +++ b/live/tape_sharps.py @@ -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()