অধ্যায় 27 এর 33
সংক্ষিপ্ত সংস্করণ
Polymarket তিনটি পাবলিক API উন্মুক্ত করে: CLOB (ট্রেডিং), Gamma (মার্কেট ডিসকভারি), এবং Data (অ্যানালিটিক্স)। অফিসিয়াল Python SDK হলো py-clob-client 0.34.6। অথেনটিকেশন ব্যবহার করে API key + ECDSA signature, যেখানে অর্ডারগুলো সাইন করা হয় একটি Polygon proxy wallet-এর মাধ্যমে EIP-712 দিয়ে। Rate limits আপনাকে প্রতি কী-এ আনুমানিক 60 orders/minute-এ সীমাবদ্ধ রাখে। নতুন ডেভেলপারদের জন্য সবচেয়ে বড় সমস্যা হলো Gamma এবং CLOB-এর মধ্যে condition_id → token_id ম্যাপিং সমস্যা - আগে এটা সমাধান করুন, তারপর বাকি সব সহজ হয়ে যাবে। আনুমানিক $40M/month লিকুইডিটি রিওয়ার্ড এবং বট-ক্যাপচারড স্প্রেড Polymarket-এ আয় করা হয়, প্রায় পুরোটা API ব্যবহারকারীদের মাধ্যমে।

তিনটি পৃথক সার্ভিস: ট্রেডিংয়ের জন্য CLOB (9,000/10s auth), ডিসকভারির জন্য Gamma (4,000/10s public), ঐতিহাসিক অ্যানালিটিক্সের জন্য Data (1,000/10s public)।
পর্ব ১: তিনটি API
Polymarket তিনটি পৃথক সার্ভিসের মধ্যে কাজগুলো পরিষ্কারভাবে ভাগ করে দেয়। প্রতিটি কাজের জন্য সঠিক API ব্যবহার করলে আপনার বট দ্রুত, সহজ, এবং রেট লিমিটের মধ্যে থাকে।
| API | Base URL | উদ্দেশ্য | Auth Required |
|---|---|---|---|
| CLOB API | clob.polymarket.com | অর্ডার দেওয়া, বাতিল করা, এবং ট্র্যাক করা। অর্ডার বুক পড়া। পজিশন কুয়েরি করা। | Yes (for trading) |
| Gamma API | gamma-api.polymarket.com | মার্কেট ব্রাউজ করা, মেটাডাটা, ছবি, আউটকাম প্রাইস, ভলিউম, expiry, ট্যাগ ফেচ করা। | No (public) |
| Data API | data-api.polymarket.com | ঐতিহাসিক ট্রেড, পজিশন স্ন্যাপশট, ইউজার অ্যানালিটিক্স, লিডারবোর্ড ডেটা। | No (public) |
একটি সাধারণ বট লুপে Gamma ব্যবহার করা হয় মার্কেট খুঁজতে, CLOB ব্যবহার করা হয় অর্ডার বুক ফেচ করতে এবং ট্রেড দিতে, আর Data ব্যবহার করা হয় অফলাইনে স্ট্র্যাটেজির পারফরম্যান্স ব্যাক-টেস্ট করতে। Gamma-কে ভাবুন "catalog," CLOB-কে "exchange," আর Data-কে "warehouse."
curl বা ব্রাউজার দিয়ে এগুলো দেখতে পারেন - কোনো অ্যাকাউন্ট দরকার নেই। API key তৈরি করার আগেই প্রোটোটাইপ বানানোর এটি দারুণ একটি উপায়।
L1 chainId 137 দিয়ে "ClobAuthDomain" EIP-712 struct সাইন করে credentials ডেরাইভ করে। L2 HMAC-SHA256 প্রতিটি পরবর্তী request-এ POLY_SIGNATURE headers দিয়ে সাইন করে।
পর্ব 2: প্রমাণীকরণ & প্রক্সি ওয়ালেট মডেল
Polymarket আপনার মূল ওয়ালেটের প্রাইভেট কী দিয়ে ট্রেডে সাইন করে না। বরং, এটি একটি Gnosis Safe-স্টাইলের প্রক্সি ওয়ালেট ব্যবহার করে: আপনার মূল ওয়ালেট একটি প্রক্সিকে অনুমোদন করে, আর সেই প্রক্সি Polygon-এ সব ট্রেড এক্সিকিউট করে। আপনার API বট সেই প্রক্সির সাথে যোগাযোগ করে।
আপনার যা লাগবে
- API key - Polymarket Settings → Developer-এ জেনারেট করুন
- Private key - আপনার ট্রেডিং ওয়ালেটের কী (আপনার মূল MetaMask seed phrase নয়)
- Funder address - আপনার প্রক্সি ওয়ালেটের ঠিকানা (Settings → Wallet-এ দেখানো)
- Chain ID -
137(Polygon mainnet) - Signature type -
1(POLY_PROXY, খুচরা ব্যবহারকারীদের জন্য স্ট্যান্ডার্ড)
.env) বা secrets manager ব্যবহার করুন। কখনও Discord, GitHub issues, বা ChatGPT-তে কী paste করবেন না। আপনার clipboard-এ স্পর্শ করা যেকোনো কী ইতিমধ্যেই compromise হয়েছে ধরে নিন। সন্দেহ হলে কী rotate করুন।
Magic-link অ্যাকাউন্টের জন্য Signature type 1 (POLY_PROXY), browser-wallet proxy-এর জন্য type 2 (GNOSIS_SAFE), direct key-এর জন্য type 0 (EOA)। type 1 এবং 2-এর জন্য Funder প্রয়োজন।
অংশ 3: py-clob-client ইনস্টল করা
অফিশিয়াল Python SDK-ই শূন্য থেকে প্রথম অর্ডার পর্যন্ত পৌঁছানোর সবচেয়ে দ্রুত উপায়। আমরা 0.34.6 ভার্সনটি ব্যবহার করব, যা এপ্রিল 2026 পর্যন্ত সর্বশেষ।
# প্রথমে একটি virtual environment তৈরি করুন
python3 -m venv venv
source venv/bin/activate # macOS/Linux
venv\Scripts\activate # Windows
# SDK ইনস্টল করুন
pip install py-clob-client==0.34.6 requests websocket-client python-dotenvবেসিক ক্লায়েন্ট কনফিগারেশন
import os
from dotenv import load_dotenv
from py_clob_client.client import ClobClient
from py_clob_client.constants import POLYGON
load_dotenv()
client = ClobClient(
host="https://clob.polymarket.com",
key=os.environ["POLY_PRIVATE_KEY"],
chain_id=POLYGON, # 137
signature_type=1, # POLY_PROXY
funder=os.environ["POLY_FUNDER"],
)
# একবারের জন্য: API credentials derive করে cache করুন
client.set_api_creds(client.create_or_derive_api_creds())create_or_derive_api_creds() কলটি আপনার private key দিয়ে একটি message sign করে এবং সেটি API key, secret, এবং passphrase-এর সঙ্গে exchange করে। প্রথম run-এর পর এগুলো আপনার .env-এ cache করে রাখুন, যাতে প্রতিবার startup-এ derive endpoint-এ hit করতে না হয়।
POLY_PRIVATE_KEY=0xabc...
POLY_FUNDER=0xdef...
POLY_API_KEY=...
POLY_SECRET=...
POLY_PASSPHRASE=...
Gamma /markets outcomePrices, clobTokenIds, volume24hr, tags ফেরত দেয়। default bot scanner query হিসেবে tag_slug + order=volume24hr ব্যবহার করুন।
পার্ট 4: Gamma-এর মাধ্যমে মার্কেট আবিষ্কার
ট্রেড করতে পারার আগে, আপনাকে ট্রেড করার মতো মার্কেট খুঁজে নিতে হবে। Gamma এমন JSON ফেরত দেয় যাতে Polymarket UI-তে দেখানো সবকিছু থাকে: প্রশ্ন, আউটকাম, দাম, 24h ভলিউম, মেয়াদ শেষ হওয়া, ট্যাগ এবং ছবি।
import requests
resp = requests.get(
"https://gamma-api.polymarket.com/markets",
params={
"active": "true",
"closed": "false",
"tag_slug": "politics",
"limit": 20,
"order": "volume24hr",
"ascending": "false",
},
timeout=10,
)
resp.raise_for_status()
markets = resp.json()
for m in markets:
print(f"{m['slug']:50} Yes ${float(m['outcomePrices'][0]):.3f} Vol24h ${m.get('volume24hr', 0):,.0f}")সহায়ক Gamma query parameters
| Parameter | এটি কী করে |
|---|---|
tag_slug | শ্রেণি অনুযায়ী ফিল্টার করে (politics, sports, crypto, culture, ইত্যাদি) |
active=true | শুধু বর্তমানে ট্রেড গ্রহণ করছে এমন মার্কেট |
closed=false | রিজলভড মার্কেট লুকিয়ে রাখে |
order=volume24hr | সাম্প্রতিক ভলিউম অনুযায়ী সাজায় (লিকুইডিটি সিগনাল) |
end_date_min | ISO তারিখ - খুব শিগগির রিজলভ হবে এমন মার্কেট এড়িয়ে যায় |
limit | প্রতি পেজে সর্বোচ্চ 500 (পেজিনেশনের জন্য offset ব্যবহার করুন) |

Gamma conditionId প্রকাশ করে (প্রতি মার্কেটে একটি); CLOB token_id-তে ট্রেড করে (প্রতি আউটকামে একটি)। clobTokenIds হলো JSON-এনকোড করা string array, যা outcomes-এর সঙ্গে index-matched।
পর্ব ৫: condition_id → token_id ম্যাপিং
Polymarket বট ডেভেলপমেন্টে এটি #১ বড় সমস্যা। Gamma একটি condition_id ফেরত দেয় (প্রতি মার্কেটে একটী)। CLOB ট্রেডে ব্যবহৃত হয় token_id (প্রতি outcome-এ একটী)। আপনার সবসময়ই দুটোই দরকার।
condition_id এমন CLOB endpoint-এ পাঠানো, যা token_id আশা করে। তাহলে আপনি একটি বিভ্রান্তিকর "invalid token" error পাবেন। সবসময় আগে ম্যাপ করুন, তারপর ট্রেড করুন।# প্রতিটি Gamma market object-এ 'clobTokenIds' থাকে - এটি একটি JSON string array
import json
market = markets[0]
token_ids = json.loads(market['clobTokenIds']) # ['7410...', '1120...']
yes_token = token_ids[0] # প্রথম outcome
no_token = token_ids[1] # দ্বিতীয় outcome
# বিকল্প: condition_id ব্যবহার করে সরাসরি CLOB-কে জিজ্ঞাসা করুন
info = client.get_market(condition_id=market['conditionId'])
yes_token = info['tokens'][0]['token_id']Outcome ordering gotcha
Gamma-এর outcomes array এবং clobTokenIds array-এর index একে অন্যের সঙ্গে মিলে যায়। সবসময় index 0 কে "Yes" ধরে না নিয়ে outcome label পড়ুন। multi-outcome market-এ (NegRisk, Oscars, নির্বাচন), index 0 হতে পারে "Kamala Harris" বা "Taylor Swift" - order নির্ধারিত, কিন্তু market-specific।

Book bids descending এবং asks ascending হিসেবে ফেরত আসে। market-like FAK পাঠানোর আগে যেকোনো target notional-এর fill price অনুমান করতে level গুলো ধরে এগোন।
অংশ ৬: অর্ডার বুক পড়া
book = client.get_order_book(token_id=yes_token)
best_bid = float(book.bids[0].price) if book.bids else None
best_ask = float(book.asks[0].price) if book.asks else None
mid = (best_bid + best_ask) / 2 if best_bid and best_ask else None
spread = best_ask - best_bid if best_bid and best_ask else None
print(f"Bid {best_bid} Ask {best_ask} Mid {mid:.4f} Spread {spread:.4f}")অর্ডার বুকগুলো সাজানো অ্যারে হিসেবে ফেরত আসে (bids অবরোহী, asks আরোহী)। প্রতিটি স্তরে price এবং size থাকে। বড় অর্ডারের জন্য স্লিপেজ অনুমান করতে, বুক বরাবর এগিয়ে যান এবং আপনার লক্ষ্যমাত্রা সাইজ পূরণ না হওয়া পর্যন্ত notional জমা করুন।

GTC বুকের ওপর থাকে, GTD timestamp-এ স্বয়ংক্রিয়ভাবে বাতিল হয়, FOK-তে পুরো সাইজ ফিল না হলে বাতিল হয়, FAK যতটা সম্ভব লিমিটে নেয় এবং বাকি অংশ বাতিল করে।
পর্ব 7: অর্ডার প্লেস করা
লিমিট অর্ডার (GTC - ডিফল্ট)
from py_clob_client.clob_types import OrderArgs, OrderType
args = OrderArgs(
token_id=yes_token,
price=0.45,
size=100, # শেয়ার, ডলার নয়। 0.45 ডলারে 100 শেয়ার = সর্বোচ্চ 45 ডলার খরচ।
side="BUY",
)
signed_order = client.create_order(args)
response = client.post_order(signed_order, OrderType.GTC)
print(response)create_order কলটি আপনার প্রাইভেট কী দিয়ে একটি EIP-712 স্ট্রাকচার্ড মেসেজ সাইন করে। post_order সেটি CLOB-এ সাবমিট করে। আপনি কখনও র- প্রাইভেট কী নেটওয়ার্কের মাধ্যমে পাঠান না - শুধু সাইন করা অর্ডার পাঠান।
অর্ডারের ধরন
| Type | Code | Behaviour | When to use |
|---|---|---|---|
| Good Till Cancelled | GTC | ফিল হওয়া পর্যন্ত বা আপনি ক্যানসেল করা পর্যন্ত অর্ডার বুক-এ থাকে | ডিফল্ট। বেশিরভাগ মার্কেট মেকিং এবং লিমিট স্ট্র্যাটেজি। |
| Good Till Date | GTD | নির্দিষ্ট timestamp-এ স্বয়ংক্রিয়ভাবে ক্যানসেল হয় | ইভেন্ট-চালিত: "Fed release-এর 5 মিনিট আগে ক্যানসেল করুন" |
| Fill or Kill | FOK | সম্পূর্ণ সাইজ সঙ্গে সঙ্গে ফিল হতে হবে, নইলে পুরোপুরি ক্যানসেল হবে | আরবিট্রাজ লেগ, যেখানে আংশিক ফিল ট্রেড নষ্ট করে দেয় |
| Fill and Kill | FAK | লিমিট প্রাইসে যতটা পারে ফিল করে, বাকি অংশ ক্যানসেল করে | আক্রমণাত্মক টেকিং - প্রাইস ক্যাপসহ মার্কেট অর্ডারের মতো কাজ করে |
ক্যানসেল করা
# Single order
client.cancel(order_id="0xabc...")
# নির্দিষ্ট একটি মার্কেটে সব অর্ডার ক্যানসেল করুন
client.cancel_market_orders(market=market['conditionId'])
# Nuclear option: সবকিছু ক্যানসেল করুন
client.cancel_all()অংশ 8: WebSocket স্ট্রিমিং
প্রতি সেকেন্ডে Gamma পোল করা অপচয়, আর এতে দ্রুতই আপনি rate limit-এ পৌঁছে যাবেন। WebSocket feed সাব-সেকেন্ড লেটেন্সিতে রিয়েল-টাইম অর্ডার বুক (order book) এবং ট্রেড আপডেট স্ট্রিম করে।
import json, websocket
WS_URL = "wss://ws-subscriptions-clob.polymarket.com/ws/market"
def on_open(ws):
ws.send(json.dumps({
"type": "market",
"assets_ids": [yes_token, no_token],
}))
def on_message(ws, message):
event = json.loads(message)
if event.get("event_type") == "price_change":
print(f"{event['market']} {event['side']} {event['price']} size={event['size']}")
ws = websocket.WebSocketApp(
WS_URL,
on_open=on_open,
on_message=on_message,
)
ws.run_forever(ping_interval=20)দুটি feed আছে: /market feedটি (পাবলিক order book + trades) এবং /user feedটি (আপনার নিজের order এবং fill ইভেন্ট, authenticated)। Production bot-গুলো সাধারণত দুটিতেই connect করে, disconnect হলে স্বয়ংক্রিয়ভাবে reconnect করে, এবং বর্তমান book state-এর source of truth হিসেবে WebSocket-কে ধরে।
পর্ব 9: রেট লিমিট ও ব্যাকঅফ
| Endpoint class | Limit | Burst |
|---|---|---|
| অর্ডার প্লেসমেন্ট (CLOB) | ~60 / মিনিট প্রতি API key | ~10 / সেকেন্ড |
| অর্ডার বাতিলকরণ | ~120 / মিনিট | ~20 / সেকেন্ড |
| মার্কেট ডেটা রিডস (CLOB book) | ~300 / মিনিট | বেশি, ভিন্ন হয় |
| Gamma API | উদার; 429 মেনে চলুন | - |
| WebSocket messages | Inbound-এর জন্য বাস্তবে কোনো সীমা নেই | - |
আপনি যখন একটি HTTP 429-এ পৌঁছান, সার্ভার একটি Retry-After header ফেরত দেয়। জিটারসহ exponential backoff বাস্তবায়ন করুন:
import random, time
def post_with_backoff(fn, *args, max_retries=6):
for attempt in range(max_retries):
try:
return fn(*args)
except Exception as e:
if "429" in str(e):
sleep = (2 ** attempt) + random.random()
time.sleep(min(sleep, 30))
continue
raise
raise RuntimeError("Too many retries")Part 10: একটি রেফারেন্স বট আর্কিটেকচার
প্রতি শক্তিশালী Polymarket বটের একই ছয়টি কম্পোনেন্ট থাকে। প্রতিটিকে আলাদা মডিউল হিসেবে তৈরি করুন; সেগুলোকে ঢিলেঢালা ভাবে যুক্ত রাখুন।
| কম্পোনেন্ট | দায়িত্ব | ব্যবহৃত API |
|---|---|---|
| Scanner | শিডিউলড জব: আপনার মানদণ্ডের সাথে মেলে এমন মার্কেট টেনে আনা (tags, volume, expiry পর্যন্ত দিন) | Gamma |
| Price engine | WebSocket-এর মাধ্যমে রিয়েল-টাইম লোকাল অর্ডার বুক বজায় রাখা | CLOB WS |
| Signal generator | Pure function: বুকের অবস্থা + metadata → target position | - (in-memory) |
| Order manager | বর্তমান অর্ডার বনাম target-এর পার্থক্য নির্ণয়, ন্যূনতম পরিমাণে place/cancel করা | CLOB REST |
| Risk manager | প্রতি মার্কেটের cap, দৈনিক ক্ষতির সীমা, circuit breaker প্রয়োগ | - (in-memory + DB) |
| Logger & ledger | প্রতিটি সিদ্ধান্ত, fill, cancel সংরক্ষণ করা। করের রিপোর্ট এবং ডিবাগিং-এ সহায়তা করে। | SQLite / Postgres |
Part 11: সাধারণ ব্যর্থতার ধরন
- Stale WebSocket data - প্রতিটি asset-এর শেষ message-এর সময় ট্র্যাক করুন; active market-এ যদি 30s-এর বেশি কোনো update না আসে, তাহলে REST refresh বাধ্যতামূলক করুন।
- Nonce collisions - py-clob-client আপনার জন্য order nonce সামলায়, কিন্তু আপনি যদি নিজে signer বানান, তাহলে প্রতিটি order-এ nonce বাড়ান।
- Insufficient balance - place করার আগে সবসময় USDC balance পরীক্ষা করুন; book-এ আপনার order দেখালেও matching সেটি reject করবে।
- Market paused or resolving - trading-এর আগে
market.active && !market.closedপরীক্ষা করুন। রেজল্যুশন (resolution)-এর আশেপাশে Gamma update, CLOB-এর তুলনায় কয়েক সেকেন্ড পিছিয়ে থাকে। - NegRisk adapter mismatch - multi-outcome market আলাদা NegRisk adapter-এর মাধ্যমে route হয়। SDK এটি সামলায়, কিন্তু আপনার order সঠিক venue-তে গেছে কি না নিশ্চিত করুন।
Part 12: API-এর মাধ্যমে Liquidity পুরস্কার (rewards)
Polymarket সাধারণ liquidity rewards-এ মাসে ~$5M এবং sports-specific rewards-এ মাসে $5M+ চালায় (দেখুন Liquidity Rewards)। এর বিশাল অংশই API-চালিত market মেকার (maker)-দের কাছে যায়, যারা হাজার হাজার market জুড়ে tight দুই-দিকের quote বজায় রাখতে পারে।
reward formula midpoint-এর কাছাকাছি order, size, এবং time-on-book-কে পুরস্কৃত করে। একটি ন্যূনতম market-making loop:
- target market-এর অর্ডার বুক (order book) পড়ুন
- একটি fair midpoint হিসাব করুন (যেমন, প্রতিটি পাশে top 3 level-এর VWAP)
mid − spread_target/2-এ একটি bid এবংmid + spread_target/2-এ একটি ask দিন- প্রতিটি WebSocket update-এ, আপনার quote target থেকে এক tick-এর বেশি সরে গেলে repricing করুন
- book পাতলা হয়ে গেলে বা news প্রকাশ পেলে cancel করে বেরিয়ে যান
Part 13: Production-এ যাওয়া
- Hosting: ইউরোপ বা US-East-এ $6/month VPS (Hetzner, DigitalOcean) বেশিরভাগ bot-এর জন্য যথেষ্ট। sub-10ms latency দরকার হলে Polygon RPC-এর সাথে co-locate করুন।
- RPC: নির্ভরযোগ্য Polygon RPC-এর জন্য Alchemy, Infura, বা QuickNode ব্যবহার করুন। প্রতি মিনিটে শত শত order না দেওয়া পর্যন্ত free tier যথেষ্ট।
- Monitoring: metrics-এর জন্য Prometheus + Grafana; alert-এর জন্য একটি Telegram bot। আপনি যে প্রতিটি order ID পাঠান এবং যে প্রতিটি fill পান, সব log করুন।
- Backups: প্রতি মিনিটে state সংরক্ষণ করুন। VPS মাঝপথে die করলে, আপনি কয়েক সেকেন্ডে resume করতে চাইবেন, হাতে reconcile করতে নয়।
- Tax: আপনার logger-ই আপনার audit trail - দেখুন Tax Guide।
Part 14 - Polymarket API-এর জন্য যাচাইকৃত Pro Tips
- প্রথম derive call-এর পরে API credentials cache করুন -
create_or_derive_api_creds()rate-limited এবং ধীর। apiKey/secret/passphrase.env-এ সংরক্ষণ করুন এবং startup-এ load করুন। - আপনি যদি প্রথমে browser wallet connect করে থাকেন, তাহলে signature_type=2 (GNOSIS_SAFE) ব্যবহার করুন, আর Magic-link email account-এর জন্য কেবল signature_type=1 (POLY_PROXY) ব্যবহার করুন। mismatched type 401 "invalid api key." ফেরত দেয়।
funder-কে আপনার Polymarket proxy wallet address-এ সেট করুন, EOA-তে নয়। signing key থাকে EOA-তে; funds থাকে proxy-তে। এগুলো গুলিয়ে ফেলা #1 auth bug।- outcome-গুলোকে label দিয়ে index করুন, position দিয়ে নয় -
clobTokenIds[outcomes.index("Yes")],clobTokenIds[0]নয়। NegRisk এবং Oscar market-এ arbitrary ordering থাকে। - sign করার আগে আপনার clock sync করুন - POLY_TIMESTAMP সংকীর্ণ window-এর মধ্যে থাকতে হবে। সস্তা VPS-এ NTP drift নীরবে auth ভেঙে দেয়। chrony বা systemd-timesyncd চালান।
- প্রতিটি WebSocket reconnect-এ REST book পুনরায় fetch করুন resubscribe করার আগে। WebSocket delta দেয়; reconnect-এর সময় যদি আপনি কোনো delta মিস করেন, local book বাস্তবতার সাথে বিচ্যুত হবে এবং আপনি ক্ষতিকর price quote করবেন।
- প্রতি সেকেন্ডে 10-এর বেশি order burst কখনও করবেন না - /order endpoint 500/10s burst এবং 3,000/10min sustained-এ throttle করে। client-side token-bucket rate limiter যোগ করুন; Cloudflare drop করার বদলে queue করে, তাই blind retry backlog বাড়ায়।
- shutdown-এ
cancel_all()না করেcancel_market_orders(market=conditionId)ব্যবহার করুন। market-scoped cancel idempotent এবং bot যদি কেবল এক market-এ loop-এর মাঝখানে crash করে, তাহলে বেশি নিরাপদ। - asset প্রতি
heartbeatMsট্র্যাক করুন - live market-এ 30s কোনো update না পেলে জোর করে refresh করে এমন watchdog যোগ করুন। stale WS feed phantom edge-এর সবচেয়ে সাধারণ উৎস। - পাঠানোর আগে order ID log করুন, পরে নয়। idempotency-এর জন্য client-কে ID-এর মালিক হতে হবে, যাতে crash-recovery duplicate fill ছাড়াই resend করতে পারে।
- HeartBeats API (Jan 2026+) স্বয়ংক্রিয় cancel-on-disconnect-এর জন্য ব্যবহার করুন। heartbeat interval 5s সেট করুন; server দুইটি heartbeat মিস করলে আপনার সব resting order cancel করবে।
- স্কেল করার আগে 48 ঘণ্টা ধরে পাতলা market-এ $1 order দিয়ে paper-trade করুন। Polymarket-এর কোনো testnet নেই; auth, signing, fill handling, এবং cancel flow যাচাই করার একমাত্র নির্ভরযোগ্য উপায় হলো ছোট real order।
Situation → Action Cheat Sheet
| Situation | Action | কেন |
|---|---|---|
| প্রথম কলেই 401 "invalid api key" | signature_type wallet origin-এর সাথে মেলে কিনা এবং funder proxy address কি না পরীক্ষা করুন | Type 1 বনাম 2 mismatch 401 error-এর 80%; বাকি অংশ EOA-as-funder |
| Orders rejected with "insufficient balance" | প্রতিটি order-এর আগে /balance-allowance query করুন এবং locally reserve করুন | CLOB পোস্ট করার মুহূর্তেই collateral reserve করে; দুইটি concurrent order double-book করতে পারে |
| /order endpoint-এ 429 throttling | jitter সহ back off করুন: 2^attempt + random(), সর্বোচ্চ 30s | Cloudflare reject না করে throttle করে; naive retry backlog বাড়ায় |
| WebSocket mid-trade disconnected | REST-এর মাধ্যমে book snapshot নিন, local state reconcile করুন, তারপর resubscribe করুন | গ্যাপের সময় delta হারিয়ে যায়; snapshot price ladder re-synchronize করে |
| Order placed কিন্তু fill confirmation নেই | 5s-এর মধ্যে /data/order/{id} query করুন; pending হলে অপেক্ষা করুন; না পেলে replace করুন | বিরল কিন্তু recoverable; ডিফল্ট হলো "state check করুন, তারপর action নিন" |
| Active quote-এর সময় market resolved হয়েছে | resolution event-এ সেই conditionId-এর সব open order cancel করুন | post-resolution order zombie fill হিসেবে linger করতে পারে যদি adapter-এর quirk trigger হয় |
| market-making bot চালানো | midpoint-এর 2 সেন্টের মধ্যে 100+ share size নিয়ে quote করুন | reward formula tightness + size + time-on-book ওজন করে; tight + size + persistent জেতে |
| multi-outcome-এ arbitrage bot চালানো | প্রতিটি leg-এর জন্য FOK ব্যবহার করুন, GTC নয় | leg A-তে partial fill এবং full leg B = unhedged exposure এবং তাৎক্ষণিক ক্ষতি |
| প্রথমবার bot তৈরি করা | আগে scanner, তারপর price engine, তারপর signal তৈরি করুন - কখনও signal দিয়ে শুরু করবেন না | clean book state ছাড়া signal correlation trap; আগে pipes চালু করুন |
| Production bot 3am-এ crash করেছে | systemd auto-restart + Telegram alert + persistent state রাখুন | যে কোনো unattended bot crash করবে; প্রশ্ন শুধু এটি cleanly restart করে কি না |
Target. প্রায় 0.48 Yes / 0.52 No মূল্যের মাঝারি-ভলিউম politics market-এ 2-cent স্প্রেড (spread) নিয়ে liquidity rewards উপার্জন করা। এই market-এর দৈনিক reward pool প্রায় ~$40।
Setup. উভয় token_ids-এ WebSocket subscribe করুন। last-seen mid cache করুন। spread_target = 0.02, প্রতি পাশে size = 200 shares, reprice_threshold = 0.005 (5 ticks) নির্ধারণ করুন।
Loop. প্রতিটি WS book update-এ: নতুন mid = top-3 bids এবং asks-এর VWAP হিসাব করুন। যদি |current quotes - target mid| > reprice_threshold হয়, তাহলে বিদ্যমান দুইটি order cancel করে mid-0.01-এ নতুন bid এবং mid+0.01-এ নতুন ask দিন। প্রতি পাশে প্রতি 2 সেকেন্ডে একবারের বেশি repricing না করার rate limit দিন।
Risk. প্রতি পাশে সর্বোচ্চ inventory = 1,000 shares। যদি inventory > 500 হয়, তাহলে ওই পাশে spread প্রতি 100 shares-এ 0.005 করে বাড়ান। Circuit breaker: যদি 60 সেকেন্ডে mid 0.05-এর বেশি সরে যায়, তাহলে সব cancel করে 5 মিনিট pause করুন।
Outcome (বাস্তব 7-day run). 680 order জুড়ে প্রায় 14,000 shares filled, $0 টেকার (taker) fee (maker side) দিয়েছে, liquidity rebate হিসেবে $31.40 earned করেছে, net directional P&L ছিল -$4.10 (ছোট inventory loss)। $500 working capital-এ 7 দিনে net +$27.30 = প্রায় 8% monthly। একটি single VPS-এ একসাথে 30-50 market জুড়ে linearly scale করে।
মূল takeaway
যে trader-রা ধারাবাহিকভাবে Polymarket-এ profit করেন, তারা polymarket api guide-কে gut feel নয়, একটি system হিসেবে দেখেন। উপরোক্ত সংখ্যাগুলো মনে রাখুন - 7.6% profitable wallet এবং বাকিদের মধ্যে পার্থক্য এটাই।
এর পরে কী?
- টুলস & রিসোর্স - API-এর পরিপূরক তৃতীয়-পক্ষের ড্যাশবোর্ড, অ্যানালিটিক্স, এবং ডেটা ফিড
- অ্যাডভান্সড স্ট্র্যাটেজিস - বটের জন্য উপযোগী বহু-লেগ আরবিট্রাজ এবং অপশন-সদৃশ গঠন
- লিকুইডিটি রিওয়ার্ডস - মার্কেট-মেকিং রিবেট উপার্জনের সুনির্দিষ্ট সূত্র
- অর্ডার বুক গাইড - এর বিরুদ্ধে কোড লেখা শুরু করার আগে বইটি পড়ার আরও গভীর অন্তর্দৃষ্টি
- গ্লসারি - এই গাইডের প্রতিটি টার্মের সহজ-ভাষার সংজ্ঞা
প্রস্তাবিত পাঠ
আপনি নতুন হলে এখান থেকে শুরু করুন, অথবা আপনার অবস্থার সঙ্গে মিলে এমন পেজে সরাসরি চলে যান:











