Polymarket Bot Tutorial · Kabanata 29 ng 32

Buuin ang Polymarket paper trading engine bago mag-live: i-simulate ang orders laban sa real prices, subaybayan ang P&L, ipatupad ang 30-trade gate (>=55% win rate, +PnL) bago ang anumang live capital, at code skeleton.

Ano ang sinasaklaw ng kabanatang ito

Ang paper trading ay ang non-negotiable na hakbang sa pagitan ng strategy idea at live deployment. Ang kabanatang ito ay ang simpleng paper engine na nag-gate sa bawat live bot na ipinakalat namin - wala pang 200 linya ng Python, sinusubaybayan ang bawat trade sa JSONL diary, ginagamit ang parehong fees/slippage tulad ng live path.

  • Bakit paper bago live (palagi)
  • Ang 30-trade gate (verified +55% WR + positive PnL)
  • Pagbuo ng simpleng paper engine
  • Pagsubaybay ng paper diary kasama ng live diary
  • Kapag nag-diverge ang paper sa live (at bakit)
  • Pag-graduate sa live: maliit na unang deposit
  • Code: minimal paper engine

Bakit paper bago live (palagi)

Ang 30-trade paper gate ay ang nag-iisang disiplina na naghihiwalay sa 7.6% ng kumikitang Polymarket traders mula sa 84.1% na natatalo. Karamihan sa builders ay nilalaktawan ito at nagbabayad ng matrikula. Ang honest na dahilan kung bakit ito gumagana: ang paper trading ay nagpapakita ng tunay na win rate ng strategy sa sapat na samples upang ma-distinguish ang signal mula sa suwerte.

Ang paglaktaw sa paper ay nagkakahalaga ng higit kaysa nasa-save. Ang strategy na mukhang kumikita sa backtest pero aktwal na coin flip ay mag-bubu-burn ng $200-500 ng live capital bago magprodyus ng 30-sample size ng live data. Ang paper-trading ng parehong 30 trades ay nagkakahalaga ng $0.

Ang paper engine ay hindi kailangang sopistikado. Kailangan itong maging honest - parehong fees, parehong slippage, parehong fill latency tulad ng live path. Mas simple ang mas mahusay, dahil anumang opsyonal ay napuputol at ang bot ay nagla-launch nang mas maaga kaysa dapat.

Ang 30-trade gate (verified +55% WR + positive PnL)

Ang gate ay binary: 30 closed paper trades, written-in-advance na success criteria (karaniwang WR ≥ 55% sa positive-EV strategy), o walang live deployment.

Ang 30 ay ang minimum sample size kung saan ang 95% confidence interval sa true win rate ay sapat na makitid upang ma-distinguish ang signal mula sa noise. Sa ibaba ng 30, ang 60% observed rate ay maaaring tumutugma sa true rate na 45-75%. Sa 30+, ang interval ay lumiit sa ~50-70% - malapad pa rin, ngunit sapat upang itanggal ang "ang strategy ay coin flip."

Ang success criteria ay dapat itakda BAGO magsimula ang paper run. Ang pagtatakda mamaya ay nagprodyus ng post-hoc rationalization (makakahanap ka ng paraan upang mabigyang-kahulugan ang anumang 30 trades bilang "sapat na mahusay").

Pagbuo ng simpleng paper engine

Ang paper engine ay esensyal na ang live trading code na may order-placement function na pinalitan ng simulated fill. Ang simulation:

  • Basahin ang live order book: parehong call tulad ng gagawin ng live bot.
  • I-simulate ang fill: kung bibili sa FOK na may presyo ≥ best ask, i-fill ang order sa volume-weighted average ng asks na natupok; i-record ang fill sa paper diary.
  • Ilapat ang fees: ibawas ang parehong fees na babayaran ng live path.
  • Subaybayan ang inventory: panatilihin ang parallel paper-balance at paper-positions dictionary.

Ang buong engine ay umaakma sa 100-200 linya ng Python. Ang pangunahing disiplina: bawat pag-aakala na ginagawa ng live path (fill rate, latency, fee) ay dapat ma-reproduce sa paper, kahit bahagyang mas masama kaysa sa katotohanan - ang paper ay dapat ang sahig, hindi ang kisame.

Pagsubaybay ng paper diary kasama ng live diary

Ang paper trading run ay nagprodyus ng JSONL diary na hindi makikilala sa istruktura mula sa live diary na isusulat ng bot mamaya. Parehong fields: timestamp, action, market_slug, side, size, price, expected_fill_price, simulated_pnl_at_exit.

Dalawang dahilan upang gamitin ang parehong format. Una, ang analysis tools na nagbabasa ng live trades (PnL reports, win-rate calculators) ay gumagana sa paper nang walang pagbabago. Pangalawa, ang paghahambing ng paper sa live mamaya ay nakakahuli ng divergences na nagpapahiwatig ng bugs.

Production tip: papalit ang paper engine sa per_trade_paper.jsonl sa parehong directory tulad ng live per_trade.jsonl. Single command na naghahambing sa pareho: diff -y <(jq -r .market_slug per_trade.jsonl) <(jq -r .market_slug per_trade_paper.jsonl).

Kapag nag-diverge ang paper sa live (at bakit)

Hindi maiiwasang divergences sa pagitan ng paper at live. Tatlong karaniwan.

  • Slippage: ang paper ay nag-fill sa ask snapshot; ang live ay naglalakad sa book at maaaring mag-fill 1-2c na mas masama sa manipis na markets. Solusyon: i-simulate ang slippage sa paper sa pamamagitan ng pagdaragdag ng per-trade penalty na katumbas ng kalahati ng spread.
  • Fill latency: ang paper ay nag-fi-fill kaagad; ang live ay tumatagal ng 200-500ms kung saan maaaring gumalaw ang presyo. Solusyon: i-simulate sa pamamagitan ng paghihintay at muling pagbasa ng book bago "mag-fill" sa paper.
  • Adverse selection: ipinapalagay ng paper na makukuha mo ang best ask; ang live ay nakikipagkumpetensya sa ibang bots na maaaring na-lift na ang ask na iyon. Solusyon: mas mahirap i-simulate; honest disclosure sa iyong sarili na nag-o-overestimate ang paper.

Kapag sinasabi ng paper +5%/buwan at ang live ay tumatakbo sa -2%/buwan, ang gap ay karaniwang isa sa mga ito. I-audit ang mga ito isa-isa sa halip na ipagpalagay na mali ang strategy mismo.

Pag-graduate sa live: maliit na unang deposit

Pumasa ang paper sa 30 trades. Live deployment plan:

  1. Mag-deposit ng $25-50 bilang smoke-test capital. Tratuhin bilang matrikula; kung mawala ito, sulit ang aral.
  2. Patakbuhin ang bot sa live mode para sa 5-10 trades na may positions sa minimum size (5 shares).
  3. I-verify na ang bawat fill ay tumutugma sa paper expectations sa loob ng 2c. Imbestigahan ang anumang mas malaking gap bago magpatuloy.
  4. Kung 5-10 live trades ay tumutugma sa paper, mag-deposit ng $200-500 at magpatakbo ng normal-size positions.
  5. Kung hindi sila tumutugma, huminto, mag-debug, mag-fix, mag-restart mula sa step 1.

Ang pinakakaraniwang live-paper gap sa unang deployment ay nawawalang fee o misestimate ng slippage. Ang pag-aayos ng mga iyon ay simple; ang disiplina ay ang paghuli ng gap bago mag-scale ng kapital.

Code: minimal paper engine

Reference: simpleng paper engine na nagbabasa ng live book + nag-si-simulate ng FOK fill.

import json, time
PAPER_BAL = 10_000.0   # USD starting
positions = {}         # token_id -> shares

def paper_fok_buy(token_id, max_price, size):
    book = fetch_book(token_id)
    # Walk asks, fill what we can within max_price
    filled = 0; cost = 0
    for level in book.asks:
        px = float(level["price"])
        if px > max_price: break
        avail = float(level["size"])
        take = min(avail, size - filled)
        filled += take
        cost += take * px
        if filled >= size: break
    if filled < size:
        return {"status":"rejected","filled":0}  # FOK semantics

    global PAPER_BAL
    PAPER_BAL -= cost
    positions[token_id] = positions.get(token_id, 0) + filled

    log_paper({"ts": int(time.time()), "action":"buy",
               "token": token_id, "size": filled, "price": cost/filled})
    return {"status":"matched","filled":filled,"cost":cost}

Production additions: paper sell function (mirror ng buy), paper GTC simulation (i-post sa book sa presyo, i-simulate ang fill kapag umabot ang mid sa presyo), reconciliation sa pagitan ng paper diary at "would-have-been" live diary.

Mga madalas na tanong

Ano ang 30-trade gate?
Aming panloob na gating rule para sa pagpunta mula paper papuntang live: hindi bababa sa 30 closed paper trades, win rate >= 55%, at net PnL positive net ng slippage. Ang pagbagsak sa alinman sa mga ito ay nangangahulugang manatili sa paper. Inimbento namin ang rule na ito pagkatapos ng ilang premature go-live attempts na nag-wipe ng accounts noong 2025.
Bakit 30 trades at hindi 100?
Statistical power. Sa 30 trades, ang 55% win rate ay may halos 70% probability na maging tunay na edge (hindi noise). Sa 100 trades, ang confidence na iyon ay lumalago sa 90%+. Pinili namin ang 30 bilang minimum bar dahil ang mas mahabang paper periods ay madalas nag-iinduce ng overfitting - ang mga trader ay nag-twi-tweak ng strategy nang masyadong mahaba sa halip na subukan ito.
Maaari ko bang laktawan ang paper trading kung confident ako?
Ang confidence ay eksaktong kapag hindi mo dapat ito laktawan. Ang mga bots na pinakamahusay sa Polymarket ay pinapatakbo ng mga taong nagkamali na noon. Ang 30-trade gate ay umiiral upang mahuli ang mga strategies na mukhang tama ngunit hindi. Karamihan sa aming sariling strategies ay bumagsak sa paper sa simula - iyon ang halaga.
Tumutugma ba ang paper results sa live results?
Karaniwang oo para sa slow-moving strategies (politika, weather), hindi para sa mabibilis (5-min crypto, sports microstructure). Ang gap ay "ang paper trading ay hindi nagbabayad ng slippage" - ang aktwal na fills ay mas masama kaysa sa presyo na nakita mo. Nagdi-discount kami ng paper returns ng 30-50% bago maniwala sa kanila para sa live, lalo na para sa mabibilis na strategies.
Paano ako mag-implement ng paper engine sa Python?
Mag-subscribe sa tunay na CLOB WebSocket para sa markets na iyong nile-trade. Kapag nagdedesisyon ang iyong strategy na "maglagay ng order," i-log ito sa JSONL file na may would-be fill price (kasalukuyang bid para sa buy, kasalukuyang ask para sa sell). Subaybayan ang positions nang virtual. Mark-to-market laban sa live price. Ang buong engine ay ~200 linya ng Python.
Gaano katagal akong dapat mag-paper trade bago mag-live?
Hanggang matupad ang 30-trade gate, o 2-4 na linggo alinman ang mas mahaba. Kung umaabot ka sa gate nang masyadong mabilis, nag-o-overfit ka; bumagal at i-verify na ang iyong win rate ay matibay sa maliliit na parameter changes. Kung hindi mo maabot ang gate pagkatapos ng buwan, ang strategy ay malamang walang edge at dapat mo itong patayin.