Polymarket Bot Tutorial · Розділ 20 із 32

Відстежуйте whale wallets Polymarket і copy-trade найкращих виконавців програмно: визначайте прибуткові wallets через leaderboard та on-chain analysis, віддзеркалюйте їхні trades із правилами щодо розміру та таймінгу.

Що охоплює цей розділ

Копіювання успішних Polymarket wallets - популярна ідея, але реальні whales на Polymarket здебільшого займаються late-window arb на resolved markets, а не directional bets. Цей розділ - чесне дослідження на основі on-chain analysis: які wallets справді варто копіювати, чому більшість не варта копіювання, і математика 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.

Профіль, який ми виміряли на трьох кандидатах 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) - degenerate gambler. Копіювання призводить до втрат.
  • "Jkim123" (53.5% win rate) - coin-flip. Не сигнал, який варто копіювати.

0% trades цих whales відбулися в перші 120s будь-якого 5-хвилинного вікна. Predictive signal (якщо він є) походив би від великих entries на РАННЬОМУ етапі вікна - але саме ці wallets не очолюють leaderboard, бо їх важко знаходити.

On-chain trade detection

Виявлення trades цільового wallet вимагає або polling data-api Polymarket, або підписки на on-chain події CTF transfer. Варіант із 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 detection підписуйтесь на on-chain ERC-1155 TransferSingle events із контракту CTF, відфільтровані за proxy address whale.

Position sizing відносно whale

Якщо ви визначаєте розмір копії як сталу частку trade whale, то успадковуєте його risk profile. Є два практичні альтернативні підходи.

  • Cap-based: задавайте кожну копію як фіксовану суму в доларах ($10-50) незалежно від розміру whale. Повільніше нарощує прибуток, але збиток на trade обмежений.
  • Win-rate-weighted: визначайте розмір копії як функцію recent win rate whale. 60%+ WR → copy повного розміру; 40-60% → половина розміру; нижче 40% → пропустити.

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

Latency: наскільки запізно - це вже запізно

Trade whale стає публічно видимим через 1-2 секунди після виконання. Щоб його скопіювати, потрібна менша latency на етапі читання, а також власна latency розміщення ордера.

End-to-end для типового copy bot: 5-10 секунд polling + 200ms розміщення ордера = 5-15 секунд загалом. На момент, коли спрацьовує ваша копія, сигнал whale уже врахований у ціні.

Для 99% копій це надто пізно на вузьких markets Polymarket. Вхід whale зрушує mid на 1-2 центи; ви платите цю премію 1-2 центи відносно того, де зайшов він. Якщо його edge був 3c, половина вже зникла до вашого приходу.

Copy bots, які працюють, або (a) орієнтуються на повільні markets, де latency 30s не має значення, або (b) використовують on-chain event subscription, щоб реагувати в sub-second таймфреймах.

Filters: слідкувати лише за wallets із підтвердженою edge

Три фільтри перед тим, як додати будь-який wallet до списку копіювання.

  • 30+ закритих trades в історії wallet. Менші вибірки - це шум.
  • Lifetime win rate > 60%, АБО позитивний expected value на trade на основі entry prices. Достатньо однієї умови; обидві разом - краще.
  • Pattern НЕ є late-window arb. Перевірте median seconds-to-resolution на вході; якщо він близький до 0, wallet займається tail-yield arb, який ви не зможете відтворити.

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

Code: detect whale buy event, place sized copy

Reference: detect подію CTF TransferSingle для відстежуваного whale, виконати 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 = продав).

Поширені запитання

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