Polymarket Bot Tutorial · Chapter 30 of 32
Polymarket bots-এর জন্য production-grade risk management code: position caps, daily loss limits, halt sentinels, fill-rate watchdogs, reconcile-on-restart, idempotent retries। বাস্তব production trader থেকে নেওয়া code patterns।
এই chapter-এ কী কী covered আছে
Risk code-ই হলো একটি production trading bot-এর বেশিরভাগ অংশ। Strategy logic হলো সহজ অংশ; surrounding caps, halts, watchdogs, আর reconcilers-ই নির্ধারণ করে bot তার প্রথম খারাপ সপ্তাহ টিকে থাকতে পারবে কি না। এই chapter-এ আছে production-grade risk pattern।
- কেন risk code-ই একটি real trading bot-এর সবচেয়ে বড় অংশ
- Position caps (per-market, per-strategy, total)
- Daily loss kill switch
- Halt sentinels (file-based emergency stop)
- Fill-rate watchdog
- Restart-এর সময় diary বনাম on-chain reconcile করা
- Code: production-grade halt-aware loop
কেন risk code-ই একটি real trading bot-এর সবচেয়ে বড় অংশ
আমরা আমাদের own bot codebase-এ যে measurement করেছি: LOC-এর 60% হলো risk code (caps, halts, watchdogs, reconciliation)। 30% হলো strategy। 10% হলো glue।
এই ratio-টাই ঠিক। Strategy হলো সহজ অংশ - কখন enter করতে হবে আর কখন exit করতে হবে তা কয়েক ডজন line-এ fit হয়ে যায়। Risk code হলো বাকি সব: price expected-এর চেয়ে দ্রুত against-এ গেলে কী করতে হবে, fills stop হলে কী করতে হবে, WebSocket drop হলে কী করতে হবে, strategy unprofitable প্রমাণিত হলে কী করতে হবে।
বেশিরভাগ builder failure story-র গঠন এক: strategy কাজ করছিল, কিন্তু bot regime change-এর মধ্যেও trade করতে থাকল কারণ কোনো halt fire করেনি। Strategy লেখার আগে halt লিখুন।
Position caps (per-market, per-strategy, total)
Code-এ enforce করা তিনটি cap।
- Per-market cap: edge confidence যাই হোক না কেন, প্রতি market-এ সর্বোচ্চ $X। সাধারণ: ছোট bot-এর জন্য $25-100, production-এর জন্য $200-500। একটি single-market ভুল call-এর blast radius সীমাবদ্ধ করে।
- Per-strategy cap: আপনি যদি multiple strategy চালান, প্রতিটি total capital-এর একটি slice পায়। সাধারণ: strategy প্রতি 30-50%। একটি strategy-র খারাপ দিন যেন অন্যগুলোর capital খেয়ে না ফেলে।
- Total cap: simultaneousভাবে deploy করা wallet balance-এর সর্বোচ্চ %। সাধারণ: 50-70%। Unexpected opportunity বা bot-এর own bookkeeping bug ধরার জন্য capital রেখে দেয়।
এই তিনটি cap-ই strategy logic-এর ভেতরে নয়, order-placement function-এর ভেতরে enforce করা উচিত। Strategy-তে bug থাকতে পারে; order-placement gate-ই শেষ defense line।
Daily loss kill switch
সবচেয়ে গুরুত্বপূর্ণ single risk control: একটি daily-loss kill switch।
Rule: UTC midnight থেকে realized + unrealized PnL যদি starting daily balance-এর -X%-এর নিচে নেমে যায়, তাহলে bot নতুন position খুলবে না এবং (optional) existing position flat করবে। সাধারণ X: 5-10%।
Math: 60% expected win rate-এর একটি bot-এর 10-trade losing streak হওয়ার প্রায় 5% chance থাকতে পারে। Kill switch না থাকলে সেই streak compound করে: $200 loss → bot trading চালিয়ে যায় → আরও $200 loss → wallet 40% down। Switch -10%-এ fire করলে bad day cap হয় $200-এ, আর আগামীকাল bot fresh start করে।
Switch server-side enforce করা হয়: একটি halt file লিখুন বা database flag set করুন, যা trading loop প্রতি iteration-এ check করে। Manual review-এর পরেই আবার restart করুন।
Halt sentinels (file-based emergency stop)
সবচেয়ে সহজ halt mechanism: bot প্রতি loop iteration-এ একটি file (যেমন /opt/pmt/HALT) check করে, এবং file থাকলে trading stop করে।
def trading_loop():
while True:
if os.path.exists("/opt/pmt/HALT"):
log("HALT file detected, sleeping")
time.sleep(30)
continue
run_one_iteration()
time.sleep(5)
যেকোনো জায়গা থেকে সঙ্গে সঙ্গে halt করতে (SSH, Telegram bot, monitoring system): touch /opt/pmt/HALT। Resume করতে: rm /opt/pmt/HALT।
File-based approach ইচ্ছে করেই low-tech, কারণ এটি এমন পরিস্থিতিতেও কাজ করে যেখানে আরও sophisticated halt mechanism fail করে: যখন bot আংশিকভাবে crash করেছে, যখন database unreachable, যখন API key rate-limited। File-system access সবসময় available থাকে।
Fill-rate watchdog
Strategy ধরে নেয় FOK order কিছু rate-এ fill হবে (প্রায়শই 60-80%)। Rate উল্লেখযোগ্যভাবে কমে গেলে কিছু একটা বদলেছে: market maker সরে গেছে, আপনার strategy identify হয়ে গেছে, কোনো API outage চলছে। কারণ যাই হোক, strategy-র PnL math-এর ভিত্তি হিসেবে থাকা assumption ভেঙে গেছে।
Watchdog logic: rolling 24-hour fill-rate count। যদি < 30% (অথবা expected-এর 50%) হয়, alert + auto-halt। Manual review-এর পরেই resume।
Watchdog diagnostic হিসেবেও useful। হঠাৎ fill-rate drop সাধারণত external event-এর সাথে correlate করে (Polymarket deploy, Polygon congestion, আপনার IP rate-limited হওয়া) - trading impact যাই হোক না কেন, যা জানা আপনার দরকার।
Restart-এর সময় diary বনাম on-chain reconcile করা
Bot একটি diary maintain করে যেখানে সে মনে করে কোন position ধরে আছে। Chain-ই সত্য বজায় রাখে। এদের সবসময় agree করা উচিত; না করলে bot ভুল belief-এর ওপর operate করছে এবং ভুল trade করবে।
Reconciliation logic: প্রতিটি restart-এ এবং normal operation-এর সময় প্রতি ঘণ্টায় একবার, bot যে token-এ touch করেছে সবার on-chain balance fetch করুন। Diary-এর সাথে compare করুন; কোনো token-এর balance যদি rounding tolerance-এর চেয়ে বেশি differ করে, alert + halt করুন।
Divergence-এর সবচেয়ে common cause হলো এমন একটি successful order, যা bot-এর API call miss করেছে (timeout, retry কখনও record হয়নি)। Chain-এর কাছে position আছে; bot মনে করে নেই। Reconciliation না থাকলে bot take-profit exit post করবে না এবং position resolution পর্যন্ত ride করবে।
Code: production-grade halt-aware loop
Reference: সব risk control wired-in থাকা production trading loop।
def production_loop():
while True:
# Halt checks
if os.path.exists("/opt/pmt/HALT"):
sleep_with_log(30); continue
if daily_pnl_below_threshold():
create_halt("daily PnL kill"); continue
# Reconcile every hour
if now() - last_reconcile > 3600:
ok = reconcile_diary_vs_chain()
last_reconcile = now()
if not ok: create_halt("reconciliation failed"); continue
# Fill-rate watchdog
if recent_fill_rate() < 0.30:
create_halt("fill rate collapse"); continue
# Strategy
try:
run_strategy_once()
except Exception as e:
log_exception(e)
if consecutive_exceptions >= 5:
create_halt(f"exceptions: {e}"); continue
time.sleep(5)
Patternটি হলো: প্রতিটি iteration gate-এর মধ্য দিয়ে যায়। Construction অনুযায়ী strategy bugs controls bypass করতে পারে না।





