Polymarket Bot Tutorial · Chapter 20 of 32
Polymarket whale wallets کو track کریں اور top performers کو programmatically copy-trade کریں: leaderboard اور on-chain analysis کے ذریعے profitable wallets identify کریں، اور size اور timing rules کے ساتھ ان کی trades mirror کریں۔
اس chapter میں کیا cover کیا گیا ہے
Winning Polymarket wallets کو copy کرنا ایک popular idea ہے، لیکن Polymarket پر actual whales زیادہ تر resolved markets میں late-window arb کرتے ہیں، directional bets نہیں۔ یہ chapter on-chain analysis سے حاصل ہونے والی honest research ہے: کن wallets کو واقعی copy کرنا چاہیے، کیوں زیادہ تر copy کرنے کے قابل نہیں ہوتے، اور position-sizing math کیا ہے۔
- Profitable wallets کی شناخت
- On-chain trade detection
- Whale کے مقابلے میں position sizing
- Latency: کتنی دیر بہت زیادہ ہے
- Filters: صرف verified edge والے wallets follow کریں
- Code: whale buy event detect کریں، sized copy place کریں
Profitable wallets کی شناخت
Whale-copying کا premise یہ ہے کہ کچھ wallets مسلسل profitable ہوتے ہیں اور ان کی entries copy کرنے سے ان کے edge کا کچھ حصہ capture ہو جاتا ہے۔ Polymarket کے top wallets کی 2025-26 on-chain analysis نے ایک سخت نتیجہ دیا: زیادہ تر visible whales late-window arbitrage کر رہے ہیں، directional trading نہیں۔
ہم نے تین candidate whale wallets پر جو profile measure کیا:
- "hhhhhh6" (98.5% win rate, $n M volume) - entries کا 88% قیمتوں ≥0.95 پر، median entry timestamp 300s window کے 226s پر۔ Pure tail-yield arb، directional نہیں۔
- "anonymous" (20% win rate) - degenerate gambler۔ Copy کرنے سے نقصان ہوتا ہے۔
- "Jkim123" (53.5% win rate) - coin-flip۔ Copy کرنے کے قابل signal نہیں۔
ان whales کی trades کا 0% کسی بھی 5-minute window کے پہلے 120s میں ہوا۔ Predictive signal (اگر کوئی ہو) EARLY-window بڑے entries سے آئے گا - لیکن وہ wallets leaderboard کے top پر نہیں ہوتے، کیونکہ یہ مشکل ہوتا ہے۔
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 لگ جائیں گی۔ Sub-second detection کے لیے CTF contract سے on-chain ERC-1155 TransferSingle events کو whale کے proxy address کے filter کے ساتھ subscribe کریں۔
Whale کے مقابلے میں 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 پہلی deployment کے لیے زیادہ safe ہے۔ Win-rate-weighted پر تب جائیں جب آپ نے whale کا actual win rate اپنی copies پر measure کر لیا ہو (جو عام طور پر headline number سے worse ہوتا ہے کیونکہ آپ late پہنچتے ہیں)۔
Latency: کتنی دیر بہت زیادہ ہے
Whale کی trade execution کے 1-2 seconds کے اندر publicly visible ہو جاتی ہے۔ اسے copy کرنے کے لیے read side پر اس سے بھی faster latency چاہیے، اور پھر اپنی order placement latency بھی۔
ایک typical copy bot کے لیے end-to-end: 5-10 second polling + 200ms order placement = مجموعی طور پر 5-15 seconds۔ جب تک آپ کی copy fire ہوتی ہے، whale کا signal price میں embed ہو چکا ہوتا ہے۔
Polymarket کی narrow markets میں 99% copies کے لیے یہ بہت late ہے۔ Whale کی entry نے mid کو 1-2 cents move کیا؛ آپ کو ان کی entry کے مقابلے میں وہ 1-2 cents premium pay کرنا پڑتا ہے۔ اگر ان کا edge 3c تھا، تو آپ کے پہنچنے تک اس کا آدھا حصہ پہلے ہی ختم ہو چکا ہوتا ہے۔
جو copy bots work کرتے ہیں وہ یا تو (a) slow-moving markets target کرتے ہیں جہاں 30s latency matter نہیں کرتی، یا (b) on-chain event subscription استعمال کرتے ہیں تاکہ sub-second timeframe میں react کر سکیں۔
Filters: صرف verified edge والے wallets follow کریں
اپنی copy list میں کوئی بھی wallet add کرنے سے پہلے تین filters۔
- 30+ closed trades wallet کی history میں۔ چھوٹے samples noise ہوتے ہیں۔
- Lifetime win rate > 60%، یا entry prices کی بنیاد پر trade کا positive expected value۔ کوئی ایک condition؛ دونوں ہوں تو بہتر۔
- Pattern late-window arb نہیں ہونا چاہیے۔ Entry پر median seconds-to-resolution چیک کریں؛ اگر یہ 0 کے قریب ہے، تو wallet tail-yield arb کر رہا ہے جسے آپ reproduce نہیں کر سکتے۔
زیادہ تر candidate whales ان تین میں سے کسی ایک filter میں fail ہو جاتے ہیں۔ واقعی copy کیے جا سکنے والے wallets کی pool چھوٹی ہے۔ List کو maintain کرنے کے لیے periodic recheck ضروری ہے - جو wallets last month profitable تھے، ضروری نہیں کہ اس month بھی ہوں۔
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 کو check کر کے buy اور sell میں فرق کریں (zero address = mint = whale نے خریدا) بمقابلہ to (zero address = burn = sold)۔





