Polymarket Bot Tutorial · Chương 20 trong 32

Theo dõi ví whale của Polymarket và copy-trade các top performer bằng programmatically: xác định các ví profitable thông qua leaderboard và on-chain analysis, mirror các giao dịch của họ với quy tắc về size và timing.

Chương này đề cập đến gì

Copy các Polymarket wallet chiến thắng là một ý tưởng phổ biến, nhưng những whale thực sự trên Polymarket phần lớn đang làm late-window arb trên các thị trường đã resolved, chứ không phải directional bets. Chương này là nghiên cứu trung thực từ on-chain analysis: ví nào thật sự đáng copy, vì sao đa số không đáng copy, và công thức position-sizing.

  • Xác định các wallet profitable
  • Phát hiện giao dịch on-chain
  • Position sizing tương đối so với whale
  • Latency: trễ đến mức nào thì quá trễ
  • Filters: chỉ theo dõi các wallet có verified edge
  • Code: phát hiện whale buy event, đặt sized copy

Xác định các wallet profitable

Tiền đề của whale-copying là một số wallet liên tục profitable, và việc copy các entry của họ sẽ capture được một phần edge đó. Phân tích on-chain các top wallet của Polymarket trong giai đoạn 2025-26 cho ra một kết quả khá đáng suy nghĩ: đa số các whale nhìn thấy được đều đang làm late-window arbitrage trên các thị trường đã resolved, chứ không phải directional trading.

Hồ sơ chúng tôi đo được trên ba wallet whale ứng viên:

  • "hhhhhh6" (98.5% win rate, $n M volume) - 88% entry ở mức giá ≥0.95, median entry timestamp là 226s trong cửa sổ 300s. Thuần tail-yield arb, không phải directional.
  • "anonymous" (20% win rate) - degenerate gambler. Copy sẽ mất tiền.
  • "Jkim123" (53.5% win rate) - coin-flip. Không phải tín hiệu đáng để copy.

0% giao dịch của các whale này xảy ra trong 120s đầu của bất kỳ cửa sổ 5 phút nào. Tín hiệu dự đoán (nếu có) sẽ đến từ các entry lớn trong EARLY-window - nhưng những wallet đó lại không đứng đầu leaderboard, vì rất khó làm được.

Phát hiện giao dịch on-chain

Phát hiện giao dịch của một wallet mục tiêu đòi hỏi либо polling data-api của Polymarket hoặc subscribe vào on-chain CTF transfer events. Tùy chọn data-api đơn giản hơn.

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 mỗi 5 giây là mức sàn thực tế cho data-api. Thấp hơn mức này bạn sẽ đụng rate limits. Để phát hiện dưới một giây, hãy subscribe vào on-chain ERC-1155 TransferSingle events từ CTF contract được lọc theo proxy address của whale.

Position sizing tương đối so với whale

Nếu bạn size copy của mình như một tỷ lệ cố định của giao dịch whale, bạn sẽ kế thừa risk profile của họ. Có hai cách thay thế thực tế.

  • Cap-based: size mỗi lệnh copy thành một số tiền cố định ($10-50) bất kể whale lớn cỡ nào. Tích lũy chậm hơn nhưng giới hạn lỗ mỗi trade.
  • Win-rate-weighted: size copy như một hàm của win rate gần đây của whale. WR 60%+ → copy full-size; 40-60% → half-size; dưới 40% → bỏ qua.

Cách cap-based là lựa chọn an toàn hơn để triển khai đầu tiên. Chỉ chuyển sang win-rate-weighted sau khi bạn đã đo win rate thực sự của whale trên CÁC LỆNH COPY CỦA CHÍNH BẠN (thường sẽ thấp hơn con số headline của họ vì bạn vào trễ).

Latency: trễ đến mức nào thì quá trễ

Giao dịch của whale sẽ được công khai trong vòng 1-2 giây sau khi thực thi. Copy nó đòi hỏi read-side latency nhanh hơn mức đó, cộng thêm độ trễ đặt lệnh của chính bạn.

End-to-end cho một copy bot điển hình: polling 5-10 giây + đặt lệnh 200ms = tổng 5-15 giây. Đến lúc lệnh copy của bạn khớp, tín hiệu của whale đã phản ánh vào giá.

Với 99% lệnh copy, như vậy là quá trễ trên các thị trường hẹp của Polymarket. Entry của whale đã làm mid dịch 1-2 cent; bạn phải trả premium 1-2 cent so với mức họ vào. Nếu edge của họ là 3c, thì một nửa đã mất khi bạn tới.

Copy bot hoạt động được sẽ либо (a) nhắm vào các thị trường biến động chậm nơi latency 30 giây không quan trọng, hoặc (b) dùng on-chain event subscription để phản ứng trong khung thời gian sub-second.

Filters: chỉ theo dõi các wallet có verified edge

Ba filter trước khi thêm bất kỳ wallet nào vào danh sách copy của bạn.

  • 30+ closed trades trong lịch sử wallet. Mẫu nhỏ hơn chỉ là noise.
  • Lifetime win rate > 60%, HOẶC positive expected value trên mỗi trade dựa trên entry prices. Chỉ cần một điều kiện; có cả hai thì tốt hơn.
  • Pattern KHÔNG phải late-window arb. Kiểm tra median số giây đến lúc resolution tại thời điểm entry; nếu gần 0, wallet đó đang làm tail-yield arb mà bạn không thể tái tạo.

Phần lớn các whale ứng viên đều fail một trong ba điều này. Tập các wallet thực sự có thể copy là rất nhỏ. Duy trì danh sách này đòi hỏi kiểm tra lại định kỳ - những wallet profitable tháng trước chưa chắc tháng này vẫn vậy.

Code: phát hiện whale buy event, đặt sized copy

Tham chiếu: phát hiện một CTF TransferSingle event cho một whale đã theo dõi, rồi kích hoạt một lệnh buy copy có size tương ứng.

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)

Phân biệt buy và sell bằng cách kiểm tra from (zero address = mint = whale đã mua) so với to (zero address = burn = đã bán).

Các câu hỏi thường gặp

Làm sao để tìm các Polymarket wallet profitable để copy?
Leaderboard của Polymarket hiển thị các top wallet theo PnL trên nhiều khung thời gian (week, month, all-time). Các công cụ independent on-chain analytics (DeFiLlama, Dune dashboards) cũng xếp hạng Polymarket wallet. Hãy chọn những wallet có profitability đã được xác minh trong nhiều tháng, không phải vài tuần - các hot streak thường đảo chiều.
Làm sao để phát hiện một whale trade theo thời gian thực?
Subscribe vào Polygon transaction logs cho địa chỉ wallet (web3.py / ethers eth_subscribe), lọc các lệnh matchOrder trên Polymarket exchange contracts. Decode event để lấy market, side và size. Latency: 2-10 giây từ lúc on-chain confirmation đến khi bot của bạn phản ứng.
Tôi có thể copy chính xác một whale trade không?
Không thể chính xác - đến lúc bạn phát hiện và submit, giá thường đã di chuyển. Copy thực tế là "scale-in": lấy một phần vị thế của whale trong vài phút sau giao dịch của họ, chấp nhận sự suy giảm giá như chi phí của việc copy. Sizing: 1-5% kích thước vị thế của họ cho mỗi lần copy.
Nếu lần này whale sai thì sao?
Bạn sẽ lỗ. Copy trading kế thừa toàn bộ rủi ro của chiến lược cơ sở cộng với tổn thất do latency. Cách phòng vệ là copy nhiều whale và coi mỗi whale là một phần nhỏ của portfolio - nếu 5 whale mỗi con đều có win rate 60% độc lập, portfolio sẽ tăng trưởng kép. Nếu bạn chỉ copy một whale win rate 60% và tập trung quá mức, variance sẽ giết bạn.
Copy trading có bị cấm trên Polymarket không?
Không. Điều khoản của Polymarket cho phép xem leaderboard và giao dịch công khai. Điều bị cấm là multi-accounting (chạy nhiều wallet như một người để né giới hạn). Copy wallet của người khác từ một wallet duy nhất của bạn thì ổn.
Làm sao để size tương đối so với một whale?
Bankroll-fraction sizing: không bao giờ copy một giao dịch đơn lẻ quá 2-5% tổng bankroll của bạn, bất kể whale đã trade bao nhiêu. Hãy coi tín hiệu của whale là một trong nhiều tín hiệu, không phải chuyện chắc thắng. Whale có bankroll lớn gấp 10 lần bạn vẫn thua - drawdown tương đối của bạn sẽ tệ hơn nhiều nếu size quá mạnh tay.