Polymarket Bot Tutorial · Sura ya 30 kati ya 32

Production-grade risk management code kwa Polymarket bots: position caps, daily loss limits, halt sentinels, fill-rate watchdogs, reconcile-on-restart, idempotent retries. Code patterns kutoka real production trader.

Sura hii inafunika nini

Risk code ni mengi ya production trading bot. Strategy logic ni easy part; surrounding caps, halts, watchdogs, na reconcilers ndio zinazoamua kama bot itaishi bad week yake ya kwanza. Sura hii ni production-grade risk pattern.

  • Kwa nini risk code ni mengi ya real trading bot
  • Position caps (per-market, per-strategy, total)
  • Daily loss kill switch
  • Halt sentinels (file-based emergency stop)
  • Fill-rate watchdog
  • Reconcile diary vs on-chain kwenye restart
  • Code: production-grade halt-aware loop

Kwa nini risk code ni mengi ya real trading bot

Measurement tuliyoifanya kwenye bot codebase yetu wenyewe: 60% ya LOC ni risk code (caps, halts, watchdogs, reconciliation). 30% ni strategy. 10% ni glue.

Ratio hiyo ni correct. Strategy ni easy part - kueleza wakati wa kuingia na wakati wa kuexit inafit katika mistari machache. Risk code ni kila kitu kingine: kile cha kufanya wakati price inahama dhidi yako faster kuliko expected, kile cha kufanya wakati fills zinakoma kuland, kile cha kufanya wakati WebSocket inadrop, kile cha kufanya wakati strategy inageuka kuwa unprofitable.

Builder failure stories nyingi zinashare shape sawa: strategy ilifanya kazi, lakini bot iliendelea kutrade kupitia regime change kwa sababu hakuna halt iliyofired. Andika halts kabla ya kuandika strategy.

Position caps (per-market, per-strategy, total)

Caps tatu, zilizoenforced katika code.

  • Per-market cap: max $X per market bila kujali edge confidence. Typical: $25-100 kwa small bots, $200-500 kwa production. Bounds blast radius ya single-market wrong call.
  • Per-strategy cap: ikiwa unaendesha strategies nyingi, kila moja inapata slice ya total capital. Typical: 30-50% per strategy. Inazuia bad day ya strategy moja kuconsume capital ya nyingine.
  • Total cap: max % ya wallet balance deployed simultaneously. Typical: 50-70%. Inaacha capital kwa unexpected opportunities au kwa kukamata bot bookkeeping bugs zake.

Caps zote tatu zinapaswa kuenforced ndani ya order-placement function, sio tu katika strategy logic. Strategy inaweza kuwa na bug; order-placement gate ni last line of defense.

Daily loss kill switch

Single most important risk control: daily-loss kill switch.

Rule: ikiwa realized + unrealized PnL tangu midnight UTC inadrop chini ya -X% ya starting daily balance, bot inakoma kufungua new positions na (optionally) inaflattens existing zone. Typical X: 5-10%.

Math: bot na 60% expected win rate ina perhaps 5% chance ya 10-trade losing streak. Bila kill switch, streak hiyo inacompound: $200 loss → bot inaendelea kutrade → another $200 loss → wallet down 40%. Na switch firing kwa -10%, bad day inacap kwa $200, na kesho bot inaanza fresh.

Switch inaenforced server-side: andika halt file au weka database flag ambayo trading loop inacheck kila iteration. Restart tu baada ya manual review.

Halt sentinels (file-based emergency stop)

Simplest possible halt mechanism: bot inacheck kwa file (mfano /opt/pmt/HALT) kila loop iteration na inakoma trading ikiwa file inakuwepo.

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)

Kuhalt mara moja kutoka popote (SSH, Telegram bot, monitoring system): touch /opt/pmt/HALT. Kuresume: rm /opt/pmt/HALT.

File-based approach ni intentionally low-tech kwa sababu inafanya kazi chini ya conditions ambapo more sophisticated halt mechanisms zinafail: wakati bot ni partially crashed, wakati database ni unreachable, wakati API key imerate-limited. File-system access daima inapatikana.

Fill-rate watchdog

Strategy inadhani FOK orders zinafill kwa rate fulani (mara nyingi 60-80%). Wakati rate inadrop significantly, kitu kimebadilika: market makers walipull, strategy yako ilipata identified, API outage iko ongoing. Whatever reason, assumption iliyodrive strategy PnL math imebreak.

Watchdog logic: rolling 24-hour fill-rate count. Ikiwa < 30% (au 50% ya expected), alert + auto-halt. Resume tu baada ya manual review.

Watchdog pia ni useful kama diagnostic. Sudden fill-rate drop kawaida inacorrelate na external event (Polymarket deploy, Polygon congestion, IP yako kupata rate-limited) ambayo ungetaka kujua bila kujali trading impact.

Reconcile diary vs on-chain kwenye restart

Bot inadumisha diary ya positions inayoshikilia. Chain inadumisha truth. Wanapaswa daima kuagree; wakati hawagree, bot inaopera kwenye wrong belief na itatrade incorrectly.

Reconciliation logic: kwenye kila restart na mara moja per hour wakati wa normal operation, fetch on-chain balances kwa kila token bot imegusa. Linganisha dhidi ya diary; alert + halt ikiwa token yoyote balance inadiffer kutoka diary kwa zaidi ya rounding tolerance.

Most common cause ya divergence ni successful order ambayo bot API call ilikosa (timeout, retry kamwe haijarekodi). Chain ina position; bot inadhani haina. Bila reconciliation, bot haitapost take-profit exit na position inariden hadi resolution.

Code: production-grade halt-aware loop

Reference: production trading loop na risk controls zote zimewired.

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: kila iteration inapita kupitia gate. Strategy bugs haziwezi kubypass controls, by construction.

Maswali yanayoulizwa mara kwa mara

Ni nini halt sentinel?
File (mfano, data/halt_autobuy) ambayo bot inacheck kabla ya kila order. Ikiwa file inakuwepo, bot inarefuses kuweka orders hata kama strategy inasema kufanya. Inakuruhusu kustop bot mid-incident na single touch command. Tuliongeza pattern hii exact kwa production trader yetu baada ya wedged-fill incident katika April 2026.
Niweke position caps gani?
Per-market: 1-5% ya bankroll. Per-strategy: 10-20%. Total open exposure: 50-70% ya bankroll (weka cash buffer). Cap SINGLE order kwa 1-2% ya bankroll bila kujali strategy - single fat-fingered order haipaswi kamwe kuwa account-sized.
Ninawezaje kuimplement daily loss kill switch?
Track realized + unrealized PnL per UTC day. Ikiwa daily PnL inadrop chini ya -3 hadi -5% ya bankroll, weka halt sentinel na notify yourself. Bot inakoma new orders; existing positions zinamanaged kwa mkono. Reset kwa 00:00 UTC daily.
Bot inapaswa kufanya nini kwenye restart baada ya crash?
Steps tatu: (1) Reconcile open orders kupitia SDK dhidi ya local diary yako. (2) Check open positions on-chain dhidi ya local state yako. (3) Ikiwa kitu chochote kinadiverge, halt bot na require manual review. Kamwe usiauto-resume katika inconsistent state.
Ninawezaje kuzuia single bug kufuta account yangu?
Layered limits: code-level position cap, code-level order-size cap, file-level halt sentinel, exchange-level (Polymarket) implicit minimum/maximum, monitoring alerts zinakupage kwenye unusual order rate. Hakuna single layer ni sufficient - zinamultiply.
Je, bot inapaswa kutrade ikiwa logging yangu inafail?
Hapana. Ikiwa bot haiwezi kuandika kwa diary yake, haiwezi kureconcile kwenye restart, ambayo inamaanisha crash inaongoza kwa inconsistent state. Hard-fail bot ikiwa logging inafail. Healthy production bots ni paranoid kuhusu observability yao wenyewe.