Polymarket Bot Tutorial · Глава 20 из 32

Отслеживайте whale wallets Polymarket и программно копируйте сделки топовых участников: находите прибыльные wallets через leaderboard и on-chain analysis, зеркальте их сделки с правилами по размеру позиции и времени входа.

Что рассматривается в этой главе

Идея копировать winning Polymarket wallets популярна, но реальные whales на Polymarket в основном делают late-window arb на resolved markets, а не directional bets. Эта глава - честное исследование на основе on-chain analysis: какие wallets действительно стоит копировать, почему большинство не заслуживает копирования и как работает math для position sizing.

  • Определение прибыльных wallets
  • On-chain trade detection
  • Position sizing относительно whale
  • Latency: насколько поздно - это уже слишком поздно
  • Filters: следуйте только за wallets с подтвержденным edge
  • Code: detect whale buy event, place sized copy

Определение прибыльных wallets

Суть whale-copying в том, что некоторые wallets стабильно прибыльны, и копирование их entries позволяет захватить часть их edge. On-chain analysis топовых wallets Polymarket за 2025-26 показал отрезвляющий результат: большинство видимых whales занимаются late-window arbitrage на resolved markets, а не directional trading.

Профиль, который мы измерили на трех candidate whale wallets:

  • "hhhhhh6" (98.5% win rate, $n M volume) - 88% entries по ценам ≥0.95, медианный timestamp входа 226s из окна 300s. Чистый tail-yield arb, не directional.
  • "anonymous" (20% win rate) - дегенеративный gambler. Копирование приводит к убыткам.
  • "Jkim123" (53.5% win rate) - coin-flip. Не signal, который стоит копировать.

0% этих whales trades происходили в первые 120s любого 5-minute window. Predictive signal (если он вообще есть) был бы в EARLY-window крупных входах - но именно эти wallets не находятся на вершине leaderboard, потому что это сложно.

On-chain trade detection

Чтобы обнаруживать trades целевого wallet, нужно либо опрашивать Polymarket data-api, либо подписаться на on-chain CTF transfer events. Вариант с data-api проще.

def watch_wallet(wallet_addr, last_seen_ts=0):
    while True:
        url = f"https://data-api.polymarket.com/activity?user={wallet_addr}&limit=100"
        events = requests.get(url).json()
        for ev in events:
            ts = int(ev.get("timestamp", 0))
            if ts <= last_seen_ts: continue
            if ev["type"] == "TRADE":
                process_whale_trade(ev)
            last_seen_ts = max(last_seen_ts, ts)
        time.sleep(5)

Пятисекундный polling - практический минимум для data-api. Ниже этого вы упретесь в rate limits. Для обнаружения с sub-second задержкой подпишитесь на on-chain ERC-1155 TransferSingle events из CTF contract, отфильтровав их по proxy address whale.

Position sizing относительно whale

Если вы делаете copy с постоянной долей от trade whale, вы унаследуете его risk profile. Два практических альтернативных подхода.

  • Cap-based: размер каждого copy фиксирован в долларах ($10-50) независимо от размера сделки whale. Медленнее наращивается, но loss на одну сделку ограничен.
  • Win-rate-weighted: размер copy зависит от недавнего win rate whale. WR выше 60% → full-size copy; 40-60% → half-size; ниже 40% → пропускать.

Cap-based подход - более безопасный вариант для первого запуска. Переходите к win-rate-weighted только после того, как измерите реальный win rate whale на ВАШИХ copies (он обычно хуже, чем headline number, потому что вы приходите поздно).

Latency: насколько поздно - это уже слишком поздно

Trade whale становится публично видимым в течение 1-2 секунд после исполнения. Чтобы скопировать его, вам нужна более быстрая read-side latency, плюс собственная latency размещения order.

End-to-end для типичного copy bot: 5-10 second polling + 200ms order placement = всего 5-15 секунд. К тому моменту, когда ваша copy срабатывает, signal whale уже заложен в price.

Для 99% copies это слишком поздно на узких markets Polymarket. Вход whale сдвинул mid на 1-2 cents; вы платите эту премию 1-2 cents относительно его цены входа. Если его edge был 3c, к моменту вашего прихода половина уже исчезла.

Copy bots, которые работают, либо (a) target slow-moving markets, где latency в 30s не имеет значения, либо (b) используют on-chain event subscription, чтобы реагировать в sub-second timeframe.

Filters: следуйте только за wallets с подтвержденным edge

Три фильтра перед тем, как добавлять любой wallet в ваш copy list.

  • 30+ closed trades в истории wallet. Меньшие выборки - это noise.
  • Lifetime win rate > 60% ИЛИ положительный expected value на trade на основе entry prices. Любое из условий; оба - лучше.
  • Pattern НЕ является late-window arb. Проверьте median seconds-to-resolution на входе; если он близок к 0, wallet занимается tail-yield arb, который вы не сможете воспроизвести.

Большинство candidate whales не проходят один из этих трех фильтров. Набор wallets, которые действительно можно копировать, невелик. Список нужно периодически перепроверять - wallets, которые были прибыльны в прошлом месяце, могут не быть такими в этом.

Code: detect whale buy event, place sized copy

Reference: detect CTF TransferSingle event для отслеживаемого whale, отправить sized copy buy.

from web3 import Web3
w3 = Web3(Web3.WebsocketProvider(POLYGON_WSS))
ctf = w3.eth.contract(address=CTF_ADDR, abi=CTF_ABI)
WHALES = {"0xabc...": {"fraction": 0.05, "cap": 50}}

def on_transfer(event):
    to = event.args["to"].lower()
    if to not in WHALES: return
    cfg = WHALES[to]
    token_id = event.args.id
    whale_size = event.args.value / 1e6
    copy_size = min(cfg["cap"], whale_size * cfg["fraction"])
    if copy_size < 5: return  # not worth fees
    book = fetch_book(str(token_id))
    if book.best_ask:
        place_fok(str(token_id), "BUY", book.best_ask + 0.01, copy_size)

# subscribe to ERC-1155 TransferSingle events from CTF
filt = ctf.events.TransferSingle.create_filter(fromBlock="latest")
while True:
    for ev in filt.get_new_entries(): on_transfer(ev)
    time.sleep(0.5)

Различайте buy и sell, проверяя from (zero address = mint = whale купил) vs to (zero address = burn = sold).

Часто задаваемые вопросы

Как найти прибыльные Polymarket wallets для копирования?
Собственный leaderboard Polymarkets показывает top wallets по PnL в нескольких окнах (week, month, all-time). Независимые on-chain analytics tools (DeFiLlama, Dune dashboards) тоже ранжируют Polymarket wallets. Выбирайте wallets с подтвержденной прибыльностью за месяцы, а не недели - hot streaks часто разворачиваются.
Как обнаружить whale trade в реальном времени?
Подпишитесь на Polygon transaction logs для адреса wallet (web3.py / ethers eth_subscribe), отфильтруйте matchOrder calls на Polymarket exchange contracts. Раскодируйте event, чтобы получить market, side и size. Latency: 2-10 секунд от on-chain confirmation до реакции вашего bot.
Можно ли копировать whale trade в точности?
Не в точности - к моменту, когда вы обнаружили и отправили заявку, price часто уже изменился. Реалистичный copy - это "scale-in": взять долю от position whale в течение нескольких минут после его trade, принимая ухудшение цены как стоимость копирования. Sizing: 1-5% от размера его position на каждый copy.
Что если whale на этот раз ошибся?
Вы проигрываете. Copy trading наследует весь risk underlying strategy плюс потери из-за latency. Хедж - копировать нескольких whales и считать каждого небольшой частью вашего portfolio: если у 5 whales независимо win rate по 60%, portfolio compounding работает. Если вы копируете одного whale с win rate 60% и концентрируетесь, variance вас убивает.
Запрещен ли copy trading на Polymarket?
Нет. Polymarkets terms позволяют смотреть public leaderboards и trades. Запрещен multi-accounting - использование нескольких wallets одним человеком, чтобы обходить limits. Copy-trading чужих wallets из вашего единственного wallet - нормально.
Как задавать size относительно whale?
Bankroll-fraction sizing: никогда не копируйте одну сделку более чем на 2-5% от total bankroll, независимо от того, сколько торговал whale. Рассматривайте signal whale как один из многих, а не как гарантированный результат. Whales с bankroll в 10 раз больше вашего все равно проигрывают - ваш relative drawdown гораздо хуже, если вы агрессивно увеличиваете size.