पॉलीमार्केट Bot ट्यूटोरियल · अध्याय 20 / 32
पॉलीमार्केट whale wallets को ट्रैक करें और top performers को programmatically copy-trade करें: leaderboard और on-chain analysis के ज़रिए profitable wallets पहचानें, size और timing rules के साथ उनके trades को mirror करें।
इस अध्याय में क्या शामिल है
Winning पॉलीमार्केट wallets को copy करना एक popular idea है, लेकिन पॉलीमार्केट पर असल whales ज़्यादातर resolved markets में late-window arb करते हैं, directional bets नहीं। यह chapter on-chain analysis से निकला honest research है: कौन-से wallets सच में copy करने लायक हैं, ज़्यादातर क्यों worth copying नहीं हैं, और position-sizing math क्या है।
- मुनाफ़े वाले वॉलेट्स की पहचान
- on-chain ट्रेड डिटेक्शन
- व्हेल के सापेक्ष पोजीशन साइज़िंग
- लेटेंसी: कितनी देर बहुत देर है
- फिल्टर्स: सिर्फ सत्यापित बढ़त वाले वॉलेट्स फॉलो करें
- Code: whale buy event detect करें, sized copy place करें
मुनाफ़े वाले वॉलेट्स की पहचान
Whale-copying का premise यह है कि कुछ wallets लगातार profitable होते हैं और उनके entries को copy करने से उनकी edge का एक हिस्सा capture हो जाता है। 2025-26 में पॉलीमार्केट के 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 ट्रेड डिटेक्शन
Target wallet के trades detect करने के लिए या तो पॉलीमार्केट की 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 करें।
व्हेल के सापेक्ष पोजीशन साइज़िंग
अगर आप अपनी 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 आते हैं)।
लेटेंसी: कितनी देर बहुत देर है
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 के लिए, पॉलीमार्केट के 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 करते हैं।
फिल्टर्स: सिर्फ सत्यापित बढ़त वाले वॉलेट्स फॉलो करें
किसी भी 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)।

