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 করতে পারে না।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

Halt sentinel কী?
একটি file (যেমন, data/halt_autobuy) যা bot প্রতিটি order-এর আগে check করে। File থাকলে strategy যাই বলুক, bot order place করতে অস্বীকার করে। একটি touch command দিয়েই incident-এর মাঝপথে bot থামাতে দেয়। এপ্রিল 2026-এ wedged-fill incident-এর পর আমাদের production trader-এ এই exact pattern যোগ করা হয়েছিল।
কী position caps set করা উচিত?
Per-market: bankroll-এর 1-5%। Per-strategy: 10-20%। Total open exposure: bankroll-এর 50-70% (cash buffer রাখুন)। Strategy যাই হোক না কেন, SINGLE order bankroll-এর 1-2%-এ cap করুন - একবারের fat-fingered order কখনও account-sized হওয়া উচিত নয়।
Daily loss kill switch কীভাবে implement করব?
প্রতি UTC day-এ realized + unrealized PnL track করুন। Daily PnL যদি bankroll-এর -3 থেকে -5%-এর নিচে নেমে যায়, halt sentinel set করুন এবং নিজেকে notify করুন। Bot নতুন order বন্ধ করে; existing position manually manage করা হয়। প্রতিদিন 00:00 UTC-এ reset করুন।
Crash-এর পরে restart হলে bot-এর কী করা উচিত?
তিনটি ধাপ: (1) SDK-এর মাধ্যমে local diary-এর বিরুদ্ধে open order reconcile করুন। (2) Local state-এর বিরুদ্ধে on-chain open position check করুন। (3) কিছু diverge করলে bot halt করুন এবং manual review required করুন। কখনও inconsistent state-এ auto-resume করবেন না।
একটি bug যেন account empty না করে, তা কীভাবে আটকাব?
Layered limits: code-level position cap, code-level order-size cap, file-level halt sentinel, exchange-level (Polymarket) implicit minimum/maximum, monitoring alerts যা unusual order rate-এ আপনাকে page করে। কোনো single layer যথেষ্ট নয় - তারা একসাথে multiply করে।
Logging fail করলে bot কি trade করবে?
না। Bot যদি তার diary-তে লিখতে না পারে, তবে restart-এর পরে reconcile করতে পারবে না, যার মানে crash-এর ফলে inconsistent state তৈরি হবে। Logging fail করলে bot hard-fail করুন। Healthy production bot নিজের observability নিয়ে paranoid থাকে।