尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
It is remarkable how much long-term advantage people like us have gotten by trying to be consistently not stupid, instead of trying to be very intelligent.
A paper trading desk for high-probability Kalshi contracts. It starts with $1,000 of simulated cash, reads the public book, and buys only when a favorite still makes sense after the Kalshi fee and the settled record. The aim is to avoid the stupid trade, not to invent a clever one.檢視完整 README ↗It is remarkable how much long-term advantage people like us have gotten by trying to be consistently not stupid, instead of trying to be very intelligent.
Charlie Munger
A paper trading desk for high-probability Kalshi contracts. It starts with $1,000 of simulated cash, reads the public book, and buys only when a favorite still makes sense after the Kalshi fee and the settled record. The aim is to avoid the stupid trade, not to invent a clever one.
The desk starts in paper mode. A Kalshi key is not required for the paper book. Public market data is enough. Switch to live trading on the dashboard: confirm the warning, choose $1 to $5,000, and approve. That amount is the most the desk may use. Orders then go to Kalshi with CST_KALSHI_API_KEY_ID and the PEM file at CST_KALSHI_PRIVATE_KEY_PATH.
A contract priced at 90¢ is not a gift. If that price is the true chance, buying it loses the fee. The desk treats cash as the default and buys only when all of this is true:
New buys pause if equity falls 5% from its peak, or if you pause them. If a held favorite's bid drops 8¢ under the price we paid, and the bid still has size, the desk sells. That can book a small loss. It is there so a broken quote does not turn into a total loss of the premium. A stop is not a promise that the account never goes down.
After each scan the desk writes a retrospective. The governor may only tighten a knob, one step, inside the rail. It cannot turn the fee rule off, and it cannot lower the 90% floor. With CST_OPENAI_API_KEY set, one Decisions call may drop a proposed clip, and a chat note may suggest drops. Neither can add a buy. A missing key or a bad response leaves the deterministic set.
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest
cst serve
Open http://127.0.0.1:8000.
For continuous operation on this Mac, run .venv/bin/python tools/paper_service.py install. The macOS service starts at login, restarts after a crash, and prevents idle sleep while running. It reads .env from this checkout. Keep the Mac powered, awake, and connected; closing a laptop lid or shutting it down can interrupt the run. Use status, restart, or stop in place of install to manage the service. A restart loads code changes without resetting the account.
The runner scans every ten minutes and marks open positions every minute. Its log is data/logs/runner.log; the account and research record live in data/book.sqlite. Scans retain a source-code fingerprint, observation and evaluation times, the book before execution, settings, calibration, counts, refusals, equity, and favorite quotes. Trade records contain fills, fees, exits, and settlements. Retrospectives retain model concerns, proposed and applied changes, and model failures. These records are local and ignored by Git.
Run .venv/bin/python tools/paper_report.py for a read-only JSON retrospective with recent scans, reviews, trades, changes, and cash/fee/P&L reconciliation. Fills and settlements update the account in one database transaction; an interrupted write rolls back the whole operation.
cst cycle runs one scan in the terminal. cst simulate prints the separate model described below. cst reset returns the paper book to the starting cash and starts the paper window over. cst bench times the admission rule on a fixed fixture and, if a key is set, one Decisions call. It does not write the book.
Copy .env.example to .env to change the starting bankroll, the 90% bar, or the one-second quote-evaluation cadence. After the first run, learned knobs live in data/book.sqlite and survive a restart. The environment values are the seed, and the reset command restores them.
The status line stays Paper until you approve live trading. The strip under the thesis is the paper window: day count, net P&L after fees, resolved trades, hit rate, drawdown, and cash still in open clips. The simulation record shows archived observations and historical sample sizes separately from this account's results. A fill is an open position, not a confirmed win.
Open Activity & analysis for scan counts, reviews, and historical evidence. Settings contains controls and risk parameters. The scan splits its page budget across the next 24 hours, days 1–7, and days 7–21 within the configured limits. The earliest window receives twice the weight: four of the default eight pages. Each active contract still has to pass the entry rules. Coverage is partial.
You can pause new buys, block a contract, close a paper clip when the book has size, and tighten a risk knob by one step. You cannot force a buy the fee rule or the settled record refused. Those changes are listed under "What changed by hand." Mutating requests send the token from the page's own state.
"Closest look" is the buy, or the favorite that came nearest and was still refused, with the cents written out.
The equity line is the paper account, marked at the bid after an exit fee. A new clip usually shows a small dip equal to the spread and the fee. That dip is real friction, not a bug.
The table at the bottom is a model with a known true chance. It is not the live book.
The scan reads each favorite's series fee multiplier and applies 0.07 × multiplier × contracts × price × (1 − price). Unknown fee schedules are skipped. Paper buys cross the spread; fills and exit marks round the fee up to the next cent as a conservative approximation. The recorded entry fee schedule is retained for exit marks. Kalshi's account-specific precision and per-order rounding rebates are not simulated. See the series metadata and fee-rounding rules.
When you are ready to talk about real orders, the names in .env.example are the ones to fill:
CST_OPENAI_API_KEY. Optional. It lets the Decisions call drop a duplicate clip and lets the chat note read the tape. The desk still runs without it. The Decisions model is gpt-6-luna. The chat model is CST_OPENAI_MODEL.CST_KALSHI_API_KEY_ID and CST_KALSHI_PRIVATE_KEY_PATH. Paper mode ignores them. Live mode signs orders with them after you approve an amount on the dashboard.src/cst/fees.py — venue fee mathsrc/cst/venues/ — public Kalshi readssrc/cst/text.py — strict match for "same price", looser match for "same risk"src/cst/strategy.py — the admission rulesrc/cst/depth.py — fresh displayed size, read onlysrc/cst/decisions.py — one drop-only Decisions call per scansrc/cst/review.py — the governor, and the optional chat notesrc/cst/broker.py — paper fills, stops, settlementsrc/cst/store.py — the book, the audit, the operator overridessrc/cst/simulate.py — the separate modelsrc/cst/engine.py — the scan loopsrc/cst/dashboard/ — the page served at /docs/ARCHITECTURE.md — where to lookdocs/GAPS.md — choices still openAGENTS.md — how to work in this repoThe scan filters by closing time and excludes multivariate combos and inactive contracts. It reads a bounded number of pages. Activity & analysis shows the counts.
The fee formula and the public endpoints follow Kalshi's market-data quick start. The shape of the desk — a venue adapter, a paper broker, and a risk gate in front of any order — is the usual structure of paper-first prediction-market bots. The code here is original.
A favorite can settle at zero. Sizing and the pause line keep that from being the whole account. They do not repeal it.