Polymarket Bot Tutorial · Chapter 20 of 32
Polymarket whale wallets को ट्रैक करें और top performers को programmatically copy-trade करें: leaderboard और on-chain analysis के ज़रिए profitable wallets पहचानें, size और timing rules के साथ उनके trades को mirror करें।
यह chapter क्या cover करता है
Winning Polymarket wallets को copy करना एक popular idea है, लेकिन Polymarket पर असल whales ज़्यादातर resolved markets में late-window arb करते हैं, directional bets नहीं। यह chapter on-chain analysis से निकला honest research है: कौन-से wallets सच में copy करने लायक हैं, ज़्यादातर क्यों worth copying नहीं हैं, और position-sizing math क्या है।
- Profitable wallets की पहचान
- On-chain trade detection
- Whale के relative position sizing
- Latency: कितना late बहुत late है
- Filters: सिर्फ verified edge वाले wallets follow करें
- Code: whale buy event detect करें, sized copy place करें
Profitable wallets की पहचान
Whale-copying का premise यह है कि कुछ wallets लगातार profitable होते हैं और उनके entries को copy करने से उनकी edge का एक हिस्सा capture हो जाता है। 2025-26 में Polymarket के top wallets के on-chain analysis का नतीजा काफी sobering था: दिखाई देने वाले ज़्यादातर whales directional trading नहीं, बल्कि resolved markets पर late-window arbitrage कर रहे हैं।
हमने तीन candidate whale wallets पर यह profile measure की:
- "hhhhhh6" (98.5% win rate, $n M volume) - entries का 88% price ≥0.95 पर, median entry timestamp 300s window के 226s पर। Pure tail-yield arb, directional नहीं।
- "anonymous" (20% win rate) - degenerate gambler. Copy करने से पैसा lose होता है।
- "Jkim123" (53.5% win rate) - coin-flip. Copy करने लायक signal नहीं।
इन whales के trades का 0% किसी 5-minute window के पहले 120s में हुआ। Predictive signal (अगर कोई हो) EARLY-window large entries से आएगा - लेकिन ऐसे wallets leaderboard के top पर नहीं होते, क्योंकि यह hard है।
On-chain trade detection
Target wallet के trades detect करने के लिए या तो Polymarket की data-api poll करनी पड़ती है, या on-chain CTF transfer events subscribe करने होते हैं। data-api option ज़्यादा simple है।
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)
Data-api के लिए five-second polling practical floor है। इससे कम पर आपको rate limits hit होंगी। Sub-second detection के लिए, whale के proxy address से filtered CTF contract के on-chain ERC-1155 TransferSingle events subscribe करें।
Whale के relative position sizing
अगर आप अपनी copy को whale के trade के constant fraction के रूप में size करते हैं, तो आप उनके risk profile को inherit करते हैं। इसके दो practical alternatives हैं।
- Cap-based: whale size चाहे जो हो, हर copy को एक fixed dollar amount ($10-50) तक size करें। Compounding धीमा होगा, लेकिन प्रति trade loss bounded रहेगा।
- Win-rate-weighted: whale के recent win rate के function के रूप में copy size करें। 60%+ WR → full-size copy; 40-60% → half-size; 40% से नीचे → skip.
Cap-based approach पहले deploy करने के लिए ज़्यादा safe है। Win-rate-weighted पर तब ही जाएँ जब आपने whale का actual win rate YOUR copies पर measure कर लिया हो (जो आमतौर पर उनके headline number से खराब होता है, क्योंकि आप late आते हैं)।
Latency: कितना late बहुत late है
Whale का trade execution के 1-2 seconds के भीतर publicly visible हो जाता है। उसे copy करने के लिए read side पर उससे तेज latency चाहिए, और उसके ऊपर आपकी own order placement latency भी।
Typical copy bot के लिए end-to-end: 5-10 second polling + 200ms order placement = कुल 5-15 seconds। जब तक आपकी copy fire करती है, whale का signal price में already embed हो चुका होता है।
99% copies के लिए, Polymarket के narrow markets में यह बहुत late है। Whale की entry ने mid को 1-2 cents move किया; आप उनके entry price की तुलना में वही 1-2 cents premium चुकाते हैं। अगर उनकी edge 3c थी, तो आपके पहुँचने तक उसका आधा हिस्सा already चला जाता है।
जो copy bots काम करते हैं, वे या तो (a) slow-moving markets target करते हैं जहाँ 30s latency matter नहीं करती, या (b) on-chain event subscription का उपयोग करके sub-second timeframe में react करते हैं।
Filters: सिर्फ verified edge वाले wallets follow करें
किसी भी wallet को अपनी copy list में जोड़ने से पहले तीन filters लगाएँ।
- 30+ closed trades wallet history में। छोटे samples noise होते हैं।
- Lifetime win rate > 60%, OR entry prices के आधार पर trade-दर-trade positive expected value। कोई एक condition; दोनों हों तो बेहतर।
- Pattern late-window arb नहीं होना चाहिए. Entry पर median seconds-to-resolution check करें; अगर यह 0 के पास है, तो wallet tail-yield arb कर रहा है जिसे आप reproduce नहीं कर सकते।
ज़्यादातर candidate whales इन तीन में से किसी एक filter में fail हो जाते हैं। सच में copyable wallets का pool छोटा है। List maintain करने के लिए periodic recheck चाहिए - जो wallets पिछले महीने profitable थे, ज़रूरी नहीं कि इस महीने भी हों।
Code: whale buy event detect करें, sized copy place करें
Reference: किसी watched whale के लिए CTF TransferSingle event detect करें, और sized copy buy fire करें।
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)
from की जाँच करके buy और sell में फर्क करें (zero address = mint = whale ने खरीदा) बनाम to (zero address = burn = sold)।





