Polymarket Bot Tutorial · Kapitel 20 von 32
Verfolge Polymarket-Whale-Wallets und copy-trade Top-Performer programmgesteuert: Identifiziere profitable Wallets über Leaderboard- und On-chain-Analyse und spiegele ihre Trades mit Größen- und Timing-Regeln.
Was dieses Kapitel abdeckt
Gewinnende Polymarket-Wallets zu kopieren ist eine beliebte Idee, aber die tatsächlichen Whales auf Polymarket machen größtenteils Late-window-Arb auf aufgelösten Märkten, keine directional bets. Dieses Kapitel ist die ehrliche Research aus der On-chain-Analyse: welche Wallets man wirklich kopieren sollte, warum die meisten es nicht wert sind, kopiert zu werden, und die Positionsgrößen-Mathematik.
- Identifying profitable wallets
- On-chain trade detection
- Position sizing relative to the whale
- Latency: how late is too late
- Filters: only follow wallets with verified edge
- Code: detect whale buy event, place sized copy
Identifying profitable wallets
Die Grundidee des Whale-Copyings ist, dass einige Wallets konstant profitabel sind und das Kopieren ihrer Entries einen Teil ihres Edge einfängt. Eine On-chain-Analyse der Top-Wallets von Polymarket in 2025-26 ergab ein ernüchterndes Ergebnis: Die meisten sichtbaren Whales machen Late-window-Arbitrage auf aufgelösten Märkten, keine directional trades.
Das von uns gemessene Profil von drei potenziellen Whale-Wallets:
- "hhhhhh6" (98.5% win rate, $n M volume) - 88% der Entries bei Preisen ≥0.95, medianer Entry-Zeitstempel 226s in einem 300s-Fenster. Reines tail-yield arb, nicht directional.
- "anonymous" (20% win rate) - degenerierter Glücksspieler. Kopieren kostet Geld.
- "Jkim123" (53.5% win rate) - Münzwurf. Kein Signal, das es wert wäre, kopiert zu werden.
0% dieser Whale-Trades fanden in den ersten 120s eines 5-Minuten-Fensters statt. Vorhersage-Signal (falls vorhanden) würde aus EARLY-window großen Entries kommen - aber diese Wallets sind nicht die, die oben auf dem Leaderboard stehen, weil es schwer ist.
On-chain trade detection
Das Erkennen der Trades einer Ziel-Wallet erfordert entweder Polling von Polymarkets data-api oder das Abonnieren von On-chain-CTF-Transfer-Events. Die data-api-Option ist einfacher.
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)
Fünf-Sekunden-Polling ist die praktische Untergrenze für die data-api. Darunter wirst du Rate Limits treffen. Für Sub-second-Erkennung abonniere on-chain ERC-1155 TransferSingle-Events vom CTF-Contract, gefiltert nach der Proxy-Adresse des Whales.
Position sizing relative to the whale
Wenn du deinen Copy als konstanten Anteil des Whale-Trades bemisst, übernimmst du deren Risk Profile. Zwei praktische Alternativen.
- Cap-based: jeden Copy auf einen festen Dollarbetrag ($10-50) begrenzen, unabhängig von der Whale-Größe. Langsamer zu compounden, aber Verlust pro Trade begrenzt.
- Win-rate-weighted: Copy als Funktion der jüngsten Win rate des Whales bemessen. 60%+ WR → Full-size-Copy; 40-60% → Half-size; unter 40% → überspringen.
Der cap-based Ansatz ist der sicherere erste Deploy. Wechsle erst zu win-rate-weighted, nachdem du die tatsächliche Win rate des Whales auf DEINEN Copies gemessen hast (die ist meist schlechter als die Headline-Zahl, weil du zu spät kommst).
Latency: how late is too late
Der Trade des Whales ist innerhalb von 1-2 Sekunden nach Ausführung öffentlich sichtbar. Ihn zu kopieren erfordert auf der Read-Seite eine schnellere Latenz als diese, plus deine eigene Order-Platzierungs-Latenz.
End-to-end für einen typischen Copy-Bot: 5-10 Sekunden Polling + 200ms Order-Platzierung = insgesamt 5-15 Sekunden. Bis dein Copy auslöst, ist das Signal des Whales bereits im Preis.
Für 99% der Copies ist das auf Polymarkets engen Märkten zu spät. Der Entry des Whales hat den Mid um 1-2 Cents bewegt; du zahlst diesen 1-2-Cent-Aufschlag relativ zu ihrem Einstieg. Wenn ihr Edge 3c betrug, ist die Hälfte davon schon weg, bis du ankommst.
Copy-Bots, die funktionieren, tun entweder (a) langsam bewegte Märkte an, bei denen 30s Latenz keine Rolle spielt, oder (b) nutzen on-chain Event-Subscription, um in Sub-second-Zeitfenstern zu reagieren.
Filters: only follow wallets with verified edge
Drei Filter, bevor du irgendeine Wallet zu deiner Copy-Liste hinzufügst.
- 30+ closed trades in der Historie der Wallet. Kleinere Stichproben sind Rauschen.
- Lifetime win rate > 60%, ODER positiver Expected Value pro Trade basierend auf den Entry-Preisen. Eines von beiden; beides ist besser.
- Pattern is NOT late-window arb. Prüfe die mediane Seconds-to-resolution beim Entry; wenn sie nahe 0 liegt, macht die Wallet tail-yield arb, das du nicht reproduzieren kannst.
Die meisten Kandidaten-Whales fallen bei einem dieser drei Punkte durch. Der Pool der tatsächlich kopierbaren Wallets ist klein. Die Liste zu pflegen erfordert regelmäßige Rechecks - Wallets, die letzten Monat profitabel waren, sind es diesen Monat möglicherweise nicht.
Code: detect whale buy event, place sized copy
Referenz: Erkenne ein CTF TransferSingle-Event für einen beobachteten Whale und löse einen Sized-Copy-Buy aus.
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)
Unterscheide Buy von Sell, indem du from prüfst (Zero Address = mint = der Whale hat gekauft) vs to (Zero Address = burn = verkauft).





