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:
- Mag-deposit ng $25-50 bilang smoke-test capital. Tratuhin bilang matrikula; kung mawala ito, sulit ang aral.
- Patakbuhin ang bot sa live mode para sa 5-10 trades na may positions sa minimum size (5 shares).
- I-verify na ang bawat fill ay tumutugma sa paper expectations sa loob ng 2c. Imbestigahan ang anumang mas malaking gap bago magpatuloy.
- Kung 5-10 live trades ay tumutugma sa paper, mag-deposit ng $200-500 at magpatakbo ng normal-size positions.
- 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.





