Anti-lottery filter — jak najít skutečné Polymarket whales

2026-05-02 · whales filter · ~6 min

Když začneš procházet Polymarket leaderboardy, vidíš wallets s "+$2.4M všech-časů" a hned chceš kopírovat. Většinou je to chyba.

90% těch top-100 wallets jsou lottery winners. Vyhrály na 2024 election cycle, mají $2M PnL, a od té doby nic. Žádný edge, žádná aktivita, jen jeden lucky strike.

Tři typy "winning" wallets

Když jsem prošel 500 nejlepších Polymarket wallets přes Goldsky API:

  1. Ghosts (~85%) — Vyhráli jeden velký event, od té doby pasivní. 0-2 trades za poslední měsíc. Žádný edge co reflektuje opakovatelný proces.
  2. Specialists (~10%) — Konzistentně ziskoví v jedné nice. ColdMath = weather. beachboy4 = EPL/NBA. johnbaster = LoL esports. Sharpe 0.7-1.2, low drawdown, denní aktivita.
  3. Diversified pros (~5%) — Multi-niche, vyšší volume, nižší per-trade Sharpe ale stabilní equity curve. GamblingIsAllYouNeed je classic example.

Specialists jsou tier kde existuje real edge. Diversified pros jsou těžší kopírovat protože jejich pozice se rotují rychle. Ghosts jsou potravinový řetězec pro influencery co prodávají kurzy.

5-bod filter — anti-lottery

Tohle je config co používám v find_top_profitable.py + rank_whales_winrate.py:

def is_real_specialist(wallet):
    """Filtruje lottery winners. Returns True jen pro tradery s edge."""
    return all([
        wallet.sharpe_30d >= 0.7,
        wallet.max_drawdown_30d <= 0.15,        # 15% DD max
        wallet.hours_since_last_trade <= 96,    # 4 days max
        wallet.active_days_30d >= 5,            # min 5/30 active
        wallet.is_single_niche(threshold=0.6),  # ≥60% of trades in 1 category
    ])

1. Sharpe ≥ 0.7 (rolling 30d)

Sharpe = (mean_pnl_per_trade - risk_free) / std_pnl. Pro Polymarket s 2-7 day position holds, Sharpe 0.7+ na rolling 30d window znamená že wallet má statistically significant edge přes noise.

Lottery winner má Sharpe ratio bezvýznamně vysoký na all-time (jeden výhra dělí 0 std), ale na rolling 30d se zhroutí pod 0.3.

2. Drawdown < 15% (rolling 30d)

Někdo s 90% win rate ale 50% drawdown během losing streak je pro paper-mode v pohodě, ale live by ho zlikvidoval risk-of-ruin. 15% DD je cap kde se ztratky dají statisticky odhánět.

3. Last trade < 96 hodin

Polymarket events se pohybují rychle. Wallet co naposledy obchodoval před 4+ dny je checkout — nemůžu kopírovat něco co se neděje. Real specialists obchodují denně až několikrát denně.

4. ≥ 5 active days / 30

"Active" = aspoň 1 fill za den. 5 z 30 znamená týdně aspoň 1× vidí market. Pod 5 = sezónní lottery, ne process.

5. Single-niche concentration ≥ 60%

Toto je klíčový test. Když >60% trades wallets je v jedné kategorii (weather, NBA, FX, election, esports), ten wallet má prokazatelnou doménovou expertise.

Diversified mode (žádná kategorie nemá >30%) je buď pro skutečně skill-based pros (rare), nebo pro yield-farmers/arb-botů. Mezi tím je 90% noise. Single-niche >60% je clean signal.

Praktický výsledek na BotLab farmě

Po aplikaci tohoto filtru na všech ~2000 wallets z polymarket public data dostávám užitečnou shortlist:

Whale (truncated)NicheSharpeDDStatus
0x594edb91…weather1.120.9%active 24h
0xdd5cc0a3…politics near-cert0.950.0%active 12h
0x507e52ef…international soccer0.7811.2%active 6h
0x31864feb…LoL esports0.892.4%active 1h
0xed107a85…UFC + macro0.728.7%active 3h
0x6e1d5040…BTC weekly bands0.814.5%active 2h

Tahle 6-tice je core BotLab Polymarket whale-mirror operace. Každý bot kopíruje jednoho specialists v jeho niche, paper-trade jen pozice se size proportional to whale's commitment.

"Ghost wallets jsou marketing kabinet. Specialist wallets jsou repository of edge. Filter je oddělí."

Co to dělá pro PnL

Kdybych kopíroval top-100 leaderboard naive (žádný filter), paper PnL by byl těžce negativní. Whales co vyhráli election fade out, peníze stojí v open pozicích týdny, žádný edge se neopakuje.

S filtrem na 6 specialists distribuovaných napříč nichemi — net +$3,910 paper za 16 dní (k 2026-05-02). Win rate napříč 11 active bots: ~62%.

Konkrétní top 3:

Live data: pnl.botlab.cz

Kdy filter nefunguje

Engine kód

Filter je v veřejném GitHub repo v find_top_profitable.py:

SHARPE_MIN = 0.7
DD_MAX = 0.15
LAST_TRADE_HOURS_MAX = 96
ACTIVE_DAYS_MIN = 5
NICHE_MIN_PCT = 0.6

def filter_specialists(wallets, lookback_days=30):
    return [w for w in wallets if (
        w.sharpe(lookback_days) >= SHARPE_MIN
        and w.drawdown(lookback_days) <= DD_MAX
        and w.hours_since_last_trade <= LAST_TRADE_HOURS_MAX
        and w.active_days(lookback_days) >= ACTIVE_DAYS_MIN
        and w.dominant_niche_pct(lookback_days) >= NICHE_MIN_PCT
    )]

Když najdeš způsob jak filter zlepšit (např. Calmar ratio místo raw Sharpe, dynamický DD threshold podle market regime), open PR.