v5 — Market Maker Tier Scoring

Date range: 2024-01-01 → 2026-02-23 (784 days) · Generated: 2026-02-22 21:19 UTC

TL;DR

Tier n Median P&L Mean maker_pct Mean fills/day
A — Professional 8 $22,370.74 0.911 15,611
B — Serious 20 $4,561.65 0.906 2,574
C — Active 80 $7.68 0.899 1,280
D — Casual 8,368 $-1,444.47 0.577 392

n=8,476 wallets total · 2024-01-01 → 2026-02-23 (784 days)

The P&L gradient is the headline result: A ($22,370.74) and B ($4,561.65) are consistently profitable; C ($7.68) is effectively breakeven over 2 years; D bottom candidates ($-1,444.47) are net negative. A/B/C mean maker_pct (~0.90) is dramatically higher than D (0.58) — passive order posting is the primary behavioral separator.

Median P&L from FIFO over each wallet's top-50 tokens. D_casual median reflects the 192 bottom candidates (ranked 109–300); the remaining n=8,176 wallets have no FIFO computation.

Scoring approach: Two-pass. All n=8,476 screened wallets are ranked on 6 activity/quality features. The top 300 by that preliminary score proceed to FIFO P&L computation. A+B+C tiers (108 slots) are assigned from the final 7-feature score on that candidate pool. The bottom 192 candidates plus the 8,176 wallets outside the FIFO pool all receive D_casual (n=8,368 total).


Part 1: Data Coverage

Trade data is drawn from Polymarket's on-chain Polygon transaction log, filtered to the 2024-01-01 window below. The features query ran once and results are cached — re-runs are free.

Maker rate data is drawn from the CTF exchange's order-filled event log, same timestamp window. Scanned once; also cached.

Dataset n Date range Days
features (wallet activity) 394,737 wallets with ≥ 100 fills 2024-01-01 → 2026-01-01 731
maker_pct (order_filled) 1,776,182 wallets 2024-01-01 → 2026-02-23 784
trade tape (FIFO candidates) 20,509,699 fills · 300 wallets 2024-01-05 → 2026-01-01 (727 days)
bilateral screened 8,476 wallets
FIFO candidates 300 wallets

Note: the features cache ends 2026-01-01; maker_pct extends 53 days further to 2026-02-23. maker_pct is a slow-moving behavioral signal — the gap does not materially affect scoring.

Raw features — n=394,737 wallets with ≥ 100 fills · 2024-01-01 → 2026-01-01 (731 days)

stat n_fills n_tokens duration_days trades_per_day buy_sell_balance maker_pct
count 394,737 394,737 394,737 394,737 394,737 394,737
mean 1,343.511 137.674 180.740 33.718 0.854 0.534
std 138,982 813.176 166.344 499.950 0.157 0.134
min 100 1 1 0.140 0 0
25% 128 35 26 0.610 0.794 0.476
50% 181 57 121 2.072 0.907 0.500
75% 315 97 341 12.188 0.966 0.607
max 69,468,280 285,091 732 111,929 1 1

Part 2: Bilateral Screening Gate

Bilateral screening gate — n=394,737 input wallets · 2024-01-01 → 2026-01-01 (731 days)

Criterion n wallets passing Rationale
buy_sell_balance > 0.5 380,042 minority side ≥ 25%
n_fills ≥ 1,000 29,378 sustained activity
n_tokens ≥ 10 372,867 diversified
duration ≥ 7 days 349,481 not a one-off
fills/day ≥ 50 44,656 regular cadence
ALL criteria combined 8,476 final screened set

The fills/day ≥ 50 floor is the tightest single criterion (leaves 44,656 of 394,737). In combination, all five criteria yield n=8,476 wallets with systematic, persistent, two-sided presence over 2024-01-01 → 2026-02-23 (784 days).


Part 3: Two-Pass Scoring Architecture

Pass 1 — 6-Feature Preliminary Score

n=8,476 wallets · 2024-01-01 → 2026-02-23 (784 days)

Equal-weight min-max combination across: maker_pct · trades_per_day · buy_sell_balance · n_tokens · total_notional_usdc · hhi_inv

No P&L in Pass 1. This narrows 8,476 screened wallets to the 300 most likely A/B/C candidates — a 28x scope reduction — before pulling the expensive trade tape.

Pass 2 — FIFO P&L

n=300 candidates · 2024-01-05 → 2026-01-01 (727 days)

The top 300 wallets by Pass-1 score proceed to FIFO computation. Trade tape restricted to each wallet's top-50 tokens by fill count (SQL-side filter). Trade tape cached after initial scan — never re-queried.

Metric Value
Fills fetched 20,509,699
Wallets 300
Mean fills/wallet 68,365
Date range 2024-01-05 → 2026-01-01 (727 days)

Part 4: FIFO P&L Analysis

FIFO matches each SELL against the chronologically prior BUY on the same outcome token per wallet. P&L = Σ (sell_price − buy_price) × token_qty. e.g. BUY 100 tokens @ $0.42, then SELL those 100 @ $0.57 → P&L = (0.57 − 0.42) × 100 = +$15.00

SELL size normalization: On-chain SELL records store size as USDC received (not token quantity). Normalized: token_qty = size / price for every SELL before matching. e.g. SELL size=9.50 USDC @ price=$0.95 → token_qty = 9.50 / 0.95 = 10 tokens.

n=300 FIFO-scored wallets · 2024-01-05 → 2026-01-01 (727 days)

Metric Value
Positive P&L 69 (23.0%)
Negative P&L 231 (77.0%)
Median $-501.99
p75 $-8.01
p90 $1,230.99
p99 $58,534.97
Best $109,540.26
Worst $-18,136,416.35

The 231 negative-P&L wallets (77.0%) were selected on activity features (fills/day, maker_pct, breadth) not P&L — so a majority negative is expected. The P&L rank component is what distinguishes A/B from the rest; all 8 A-tier wallets have positive realized P&L.

The $-18,136,416.35 worst case is an extreme outlier — likely a large directional player that passes the bilateral gate but concentrates on outcome resolution and loses heavily. P&L enters the score as a percentile rank, so this outlier does not distort tier assignments.


Part 5: Maker Rate Analysis

maker_pct = fills on the passive (maker) side / total fills, derived from the CTF exchange's order-filled event log. The maker/taker side is an explicit on-chain field — no heuristic required.

n=8,476 screened wallets · 2024-01-01 → 2026-02-23 (784 days)

Metric Value
Mean 0.581
Median 0.541
p25 / p75 0.466 / 0.680
Pure makers (≥ 0.90) 708
Near-balanced (0.40–0.60) 3,906
Pure takers (≤ 0.10) 7

The distribution has a sharp primary mode around 0.45–0.50 (the largest bin, ~21% of screened wallets): bots that mix maker and taker roles roughly equally — likely TWAP-style, hedging, or accumulation strategies that alternate sides. A secondary cluster around 0.65–0.70 represents passive-leaning systematic traders. The right tail (≥ 0.90: 708 wallets) is pure resting-order market makers who rarely cross the spread.

A passive MM posts resting orders → maker_pct high. An accumulator crosses the spread → maker_pct low. Both can satisfy the bilateral gate criteria; maker_pct is what separates them cleanly.

For a concrete contrast: rank 2 (maker_pct=0.989) posts resting limits almost exclusively; rank 51 (maker_pct=0.444) crosses the spread on the majority of its 32,835 fills/day. Same tier, fundamentally different strategy archetype.


Part 6: Score Distribution & Tier Boundaries

The final score combines 7 components, min-max scaled jointly across all candidates and summed with fixed weights (see Part 9). Tiers are assigned by rank from the n=300-candidate pool. D_casual (n=8,368) covers the 192 bottom candidates (ranked 109–300) plus 8,176 wallets that never entered the FIFO pool.

n=300 candidates · 2024-01-05 → 2026-01-01 (727 days)

Tier boundaries are rank-based (not score-gap driven). The score distribution across the candidate pool is relatively continuous — the gaps between tiers are small: A/B boundary: 0.6247 vs 0.6231 (gap=0.0016) · B/C boundary: 0.6027 vs 0.5991 (gap=0.0036). Wallets near the tier boundary are exchangeable in quality; the tier labels are a practical convenience, not a hard categorical split.


Part 7: Tier Roster — Top Wallets

Tier A_professional — n=8 · 2024-01-05 → 2026-01-01 (727 days)

rank wallet mm_score realized_pnl maker_pct fills/day n_tokens
1 0x51373c6B56… 0.658 $47,998.38 0.844 8,570 50,005
2 0x1cFC260BfA… 0.6523 $12,623.72 0.989 802 24,537
3 0x7F69983eB2… 0.649 $25,857.57 0.704 111,929 17,188
4 0xC8ab97a908… 0.6419 $18,883.91 0.93 1,385 24,698
5 0x8e8D8163c3… 0.6386 $1,228.35 0.991 639 18,700
6 0x2370d48501… 0.6333 $48,233.79 0.943 648 4,239
7 0x2104D2eB66… 0.6297 $11,490.77 0.98 854 1,598
8 0x9e41715A30… 0.6247 $109,540.26 0.912 59 953

Rank 8 (0x9e41715A30…) stands out: only 59 fills/day (barely above the 50/day gate) yet the highest P&L in the entire dataset ($109,540.26). High P&L at very low fill rate points to concentrated directional bets rather than passive spread capture.

Tier B_serious — n=20 · 2024-01-05 → 2026-01-01 (727 days)

rank wallet mm_score realized_pnl maker_pct fills/day n_tokens
9 0xD9093fF2E1… 0.6231 $7,741.29 0.997 1,325 313
10 0x6550ff2e1e… 0.6223 $108,616.21 0.95 312 491
11 0x20235f3a93… 0.6213 $1,685.91 0.965 785 705
12 0x8c104bB4AD… 0.62 $4,879.36 0.95 173 305
13 0xdCc9d68a4B… 0.6198 $13,674.72 0.902 92 2,613
14 0xA20b482F97… 0.6195 $4,243.94 0.77 15,116 26,650
15 0x6b7Ec4ba07… 0.618 $10,157.01 0.887 225 9,695
16 0x6cff256159… 0.6145 $58,213.71 0.844 124 4,922
17 0x203f6F1fA0… 0.6142 $1,996.15 0.813 16,083 10,825
18 0x0a7eD19909… 0.6133 $2,109.19 0.913 216 3,514
19 0x30E443872d… 0.6112 $90,339.68 0.823 163 3,584
20 0x4A49b47b69… 0.6094 $800.99 0.946 52 588
21 0xe0AAA89D43… 0.6086 $8,267.17 0.916 462 789
22 0x1DA35a47Ce… 0.6073 $22,558.80 0.845 250 567
23 0x2b19bEAaaE… 0.6056 $1,254.70 0.907 14,979 1,567
24 0xFbF3512A06… 0.6053 $51,794.05 0.934 63 60
25 0xBed17750E6… 0.6051 $912.49 0.962 238 270
26 0xa3e22cd32A… 0.6047 $724.46 0.976 612 35,694
27 0x386849A339… 0.603 $1,412.21 0.893 85 278
28 0xbBa783BFE4… 0.6027 $1,550.14 0.915 118 137

Tier C_active — top 30 of n=80 · 2024-01-05 → 2026-01-01 (727 days)

rank wallet mm_score realized_pnl maker_pct fills/day n_tokens
29 0x8053925555… 0.5991 $504.65 0.973 413 212
30 0xd2B51D9aCc… 0.5964 $6,213.85 0.692 25,222 12,298
31 0xe4fC1041eD… 0.5951 $554.36 0.909 446 515
32 0x59247A7213… 0.5946 $560.40 0.915 133 590
33 0xfc892E3E39… 0.5944 $140.89 0.947 134 1,170
34 0x792481D0D0… 0.5928 $5,374.14 0.781 267 4,005
35 0x719DEEF5E2… 0.5925 $671.71 0.928 118 1,139
36 0x0C9f372EBF… 0.5912 $202.53 0.962 138 251
37 0x600B771B20… 0.5905 $742.31 0.967 71 67
38 0x2021aeDd6D… 0.5903 $1,991.80 0.817 67 572
39 0x5796881fC3… 0.5892 $287.13 0.934 156 142
40 0xf86c606c8a… 0.5873 $23.26 0.937 100 6,371
41 0x3c2A504656… 0.5873 $594.22 0.973 288 107
42 0x96E9eDF0E2… 0.5871 $423.08 0.979 132 780
43 0x11899A5a28… 0.5863 $1,351.80 0.896 446 265
44 0xB2aD7cd5bC… 0.5859 $1,317.85 0.76 4,641 5,280
45 0xDaeFe62bC5… 0.5857 $976.66 0.855 82 806
46 0x26aEbc7cA7… 0.5844 $77.03 0.938 104 3,349
47 0x37eED0985F… 0.5841 $730.15 0.834 759 310
48 0xbAcE19B995… 0.5836 $766.81 0.82 7,102 8,174
49 0xC8b2b62e9a… 0.583 $35.25 0.958 163 2,026
50 0xf8c860fB13… 0.5824 $15.07 0.963 199 2,596
51 0x2150455145… 0.5821 $25,118.83 0.444 32,835 14,963
52 0x18345B6921… 0.5813 $133.11 0.972 83 291
53 0xbcE2a42663… 0.5809 $205.69 0.895 182 626
54 0xB818b62D3d… 0.5793 $64.93 0.962 708 888
55 0xFab2260cB5… 0.5784 $32.45 0.966 213 343
56 0x2aF4C4E28b… 0.5773 $22.46 0.978 235 181
57 0x88EC5ba618… 0.5756 $-1.66 0.916 448 2,391
58 0xAC71D9d21d… 0.5748 $214.27 0.878 136 104

Rank 51 (0x2150455145…) is the anomalous C-tier entry: maker_pct=0.444 (taker-dominant, vs ~0.90 for the rest of C), 32,835 fills/day, P&L $25,118.83. This wallet's score is driven by volume and breadth rather than passive posting — included on activity merits, not MM archetype.


Part 8: Known MM Wallet Tracking

v3 identified 8 elite wallets via manual review against data predating 2024. Checking their v5 rank validates generalization — or, as observed here, confirms the cohort has turned over entirely.

n=8 reference wallets · v3 data period (pre-2024) vs v5 window 2024-01-01 → 2026-02-23 (784 days)

v3 known elite wallets in v5 roster — 0/8 found · 2024-01-01 → 2026-02-23 (784 days)

label wallet rank tier mm_score realized_pnl maker_pct
a42f_acc 0xa42f127d7e… not in screened
e007_acc 0xe00740bce9… not in screened
4ffe_acc 0x4ffe49ba2a… not in screened
b548_acc 0xb548b896c7… not in screened
5f6a_acc 0x5f6aedef48… not in screened
330e_acc 0x330efa1eae… not in screened
e041_MM 0xe041d09715… not in screened
fdb8_MM 0xfdb826a0fb… not in screened

0/8 v3 wallets active in the v5 window.

All 8 fall below the 100-fill threshold in 2024-01-01–2026-02-23, likely inactive or operating under different wallet addresses by now. Polymarket's MM cohort has fully turned over; v5 is mapping the current generation, which has no overlap with v3.


Part 9: Methodology Notes

v3 → v5 key differences

Maker rate signal v3 compared each fill price to the token VWAP; below-VWAP buys and above-VWAP sells were labeled "maker fills". This proxy is noisy for thin markets and boundary prices. v5 uses an explicit on-chain field from the CTF exchange's order-filled event log to identify the passive side. Zero ambiguity, no heuristic.

SELL size normalization On-chain SELL records store size as USDC received, not token quantity. FIFO requires consistent units: v5 normalizes token_qty = size / price for every SELL fill before queuing. v3's parquet had this pre-normalized.

Two-pass architecture v3 ran FIFO on ~400 screened wallets (~22 M fills). v5 screens n=8,476 wallets. Running FIFO on all of them would be prohibitively expensive. Two-pass restricts the tape query to n=300 candidates (20,509,699 fills). Everything is cached — re-runs are free.

Score weights

Component Weight Rationale
pnl_rank 25% Percentile rank of FIFO realized P&L — the ultimate quality signal
maker_pct 20% True passive rate — cleanest strategy-archetype separator
trades_per_day 15% Sustained daily cadence, not sporadic spikes
buy_sell_balance 10% Consistently makes both sides, not a net directional player
n_tokens 10% Active across many outcome tokens, not concentrated on one event
total_notional_usdc 10% Absolute capital deployed — separates retail from institutional scale
hhi_inv 10% Inverse HHI; high = diverse token footprint, low = concentrated book

01_mm_scoring.py · 2026-02-22 21:19 UTC n=8,476 wallets total · FIFO candidates: n=300 · 2024-01-01 → 2026-02-23 (784 days)