Polymarket Bot Tutorial · অধ্যায় 20 of 32
Polymarket whale wallets ট্র্যাক করুন এবং programmatically top performers-এর copy-trade করুন: leaderboard এবং on-chain analysis-এর মাধ্যমে profitable wallets শনাক্ত করুন, size এবং timing rules মেনে তাদের trades mirror করুন।
এই অধ্যায়ে কী কী কভার করা হয়েছে
জয়ী Polymarket wallets copy করা একটি জনপ্রিয় ধারণা, কিন্তু Polymarket-এর আসল whales-রা বেশিরভাগ সময় resolved markets-এ late-window arb করছে, directional bets নয়। এই অধ্যায়টি on-chain analysis থেকে পাওয়া সৎ 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-এর কিছু অংশ ধরা যায়। 2025-26 সালে Polymarket-এর top wallets-এর on-chain analysis একটি sobering result দিয়েছে: visible whales-এর বেশিরভাগই directional trading নয়, resolved markets-এ late-window arbitrage করছে।
আমরা তিনটি candidate whale wallet-এ যে profile মেপেছি:
- "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 করলে money loss হবে।
- "Jkim123" (53.5% win rate) - coin-flip। Copy করার মতো signal নয়।
এই whales-এর trades-এর 0% কোনো 5-minute window-এর প্রথম 120s-এর মধ্যে ঘটেছে। Predictive signal (যদি থাকে) তাহলে EARLY-window large entries থেকে আসবে - কিন্তু ওই wallets-গুলো leaderboard-এর শীর্ষে নেই, কারণ সেগুলো hard।
On-chain trade detection
একটি target wallet-এর trades detect করতে হয় Polymarket-এর data-api poll করতে হবে, না হয় on-chain CTF transfer events-এ subscribe করতে হবে। data-api optionটি আরও সহজ।
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-এর জন্য পাঁচ সেকেন্ড polling হলো practical floor। এর চেয়ে কম হলে rate limits-এ পড়বেন। Sub-second detection-এর জন্য whale-এর proxy address দিয়ে filtered CTF contract-এর on-chain ERC-1155 TransferSingle events-এ subscribe করুন।
Whale-এর তুলনায় position sizing
আপনি যদি আপনার copy-কে whale-এর trade-এর একটি constant fraction হিসাবে size করেন, তাহলে তাদের risk profile-ই inherit করবেন। দুইটি practical alternative রয়েছে।
- 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 করুন।
প্রথম deploy-এর জন্য cap-based approach বেশি safe। Win-rate-weighted-এ যান শুধু তখনই, যখন আপনি whale-এর actual win rate আপনার নিজের copies-এ measure করেছেন (যা সাধারণত তাদের headline number-এর চেয়ে খারাপ, কারণ আপনি late আসেন)।
Latency: কত দেরি হলে খুব দেরি
Whale-এর trade execution-এর 1-2 সেকেন্ডের মধ্যে publicly visible হয়ে যায়। Copy করতে হলে read side-এ তার চেয়েও কম latency, plus আপনার 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 reflect হয়ে গেছে।
Polymarket-এর narrow markets-এ 99% copies-এর জন্য এটি খুব দেরি। Whale-এর entry mid-কে 1-2 cents move করেছে; আপনি তাদের entry-এর তুলনায় সেই 1-2 cents premium pay করেন। তাদের edge যদি 3c হয়, আপনি পৌঁছানোর আগেই তার অর্ধেক gone।
যে copy bots কাজ করে তারা হয় (a) slow-moving markets target করে যেখানে 30s latency matter করে না, অথবা (b) sub-second timeframe-এ react করতে on-chain event subscription ব্যবহার করে।
Filters: শুধু verified edge আছে এমন wallets follow করুন
কোনো wallet copy list-এ যোগ করার আগে তিনটি filter।
- 30+ closed trades wallet-এর history-তে। ছোট sample noise।
- Lifetime win rate > 60%, অথবা entry prices-এর ভিত্তিতে per-trade positive expected value। যেকোনো একটি condition; দুটোই হলে আরও ভালো।
- Pattern late-window arb নয়। Entry-তে median seconds-to-resolution check করুন; যদি এটা 0-এর কাছে হয়, wallet tail-yield arb করছে, যা আপনি reproduce করতে পারবেন না।
বেশিরভাগ candidate whale এই তিনটির একটিতে fail করে। আসল copyable wallets-এর pool ছোট। List maintain করতে periodic recheck লাগে - গত মাসে profitable ছিল এমন wallets এ মাসে নাও হতে পারে।
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 (zero address = mint = whale bought) বনাম to (zero address = burn = sold) চেক করে buy ও sell আলাদা করুন।





