Kalshi sells contracts on yes/no questions: will it rain in Miami tomorrow? will Bitcoin finish this hour above $X? A contract pays $1 if the answer is yes and $0 if it is no, so the price is the market's guess at the odds. 75¢ means "about a 75% chance."
KALPOLY is a set of small programs on this PC (e7) that watch those markets and, in a few narrow cases, place real orders on Ed's Kalshi account. Everything on this page was checked against the code, settings, the 30-minute job, Windows Task Scheduler and the running programs on 8 October 2026 — not copied from the old version of this page.
live\enabled.flag is present (live trading allowed). 30-minute job runs 8:08 AM to about 10:38 PM ET. Dashboard: https://kalpoly.seamansys.com (local port 8300); this page is its "About" button.| Piece | Status | Money limit | One-line description |
|---|---|---|---|
| Crypto maker | LIVE | $140, Kalshi pot 2 | In the last 15 minutes of an hourly Bitcoin/Ethereum market, when the answer is already all but decided, it leaves a buy order slightly under the price and waits for someone to sell to it. |
| Weather lag | LIVE | $60 own cap (pot split 11 Oct), Kalshi pot 0 | Buys a temperature or rain contract only after the weather station shows it has already happened, with a 2°F (or 0.05 in rain) safety margin. |
Rain incentive (lip_maker) | LIVE | $140 own cap (pot split 11 Oct), Kalshi pot 0 | Leaves buy orders on the strong favourite (80–90¢) in rain markets that Kalshi pays a bonus to support, 20 contracts each, markets closing within 3 days. Since 11 Oct it only posts when the rain forecast and the 30-year climate for that date agree with the side. |
Temperature maker (maker) | ARMED, IDLE | $100, Kalshi pot 0 | Still runs every 30 minutes, but has not posted since 5 September. Same 2°F rule, 10 contracts, 3¢ under the favourite. |
| Crypto taker | KILLED | — | Buying at the asking price was shut down on 14 September. Only the read-only price recorder (the "tape") still runs. |
| Forecast | SCORE ONLY | $75 scaffold, disarmed | Paper betting closed 7 October. A once-a-day scorecard grades the forecast against Kalshi's own prices and books nothing. The $75 live program exists but has no on-switch. |
| Paper sleeves | OFF | — | All pretend strategy sleeves retired (A1/B1/C3/W2 removed 5 October, the rest 6 October). |
| Venue lag, Thesis A | GONE | — | Retired. No scheduled task, not in the 30-minute job. Do not revive. |
These are programs that stay running all the time. A Windows task checks every 5 minutes and restarts one only if it has stopped.
| Watcher | Places orders? | What it does | Running now |
|---|---|---|---|
crypto_lag | No (tape only) | Records Coinbase's Bitcoin/Ethereum price next to every nearby Kalshi hourly contract,
every 15 seconds, into logs\crypto_lag.jsonl. The crypto maker reads this
to judge how volatile the market is. |
Yes, PID 25752, since 5 Oct. Task \KALPOLY\Crypto_Lag. |
crypto_maker | Yes — live | The crypto maker described below. | Yes, PID 4124, since 6 Oct. Task \KALPOLY\Crypto_Maker. |
weather_lag | Yes — live | Refreshes the station readings (highs, lows, rain so far today) and runs the weather-lag check. Sleeps 11 PM to 8 AM ET. | Yes, PID 33384, restarted 8 Oct 12:15 PM ET after the fix. Task \KALPOLY\Weather_Lag. |
crypto_venue | No (tape only) | Records Kalshi vs Polymarket vs Coinbase crypto prices into
logs\crypto_venue.jsonl. Nothing trades on it. |
Yes, PID 34056, since 6 Oct 5:16 PM. Its restart task
\KALPOLY\Crypto_Venue is Disabled, so it will not come back after a
reboot. |
run_scan.cmd)Task \KALPOLY\Weather_Scan runs it every 30 minutes from 8:08 AM ET for 15 hours
(last start about 10:38 PM). If one is still running when the next is due, the new one is
skipped. On 8 October each run took about 3½ to 5½ minutes, well inside the 30.
| Step | State | What it does |
|---|---|---|
live_trading.filter | ON | 30-minute backup for weather lag (the 15-second watcher is the main path). Can place real orders. |
live_trading.exit | ON | If a newer station reading contradicts why a weather-lag bet was made, it sells the position. Never sells just because the price moved. Can place real orders. |
live_trading.maker | ON (idle) | Temperature maker. Real orders, but has not posted since 5 Sep. |
live_trading.maker_book | ON | Copies maker fills into the live ledger so settle and the reports can see them. |
live_trading.lip_maker | ON | Rain incentive bot. Real orders. |
live_trading.forecast_maker | REM'd (off) | $75 forecast pilot. Also needs live\forecast_maker.enabled.flag, which does not exist. |
weather.run | REM'd (off) | Old forecast paper cycle (plus GDP/CPI pages). Off since 7 Oct afternoon. |
closebook, makerpaper, crypto_lag snapshot, crypto_edge_report, lip_shadow, venue_lag, crypto_venue, paper_sleeves run_batch | REM'd (off) | Old notebooks and tapes removed on 6 Oct to stop the scan running past 30 minutes. The crypto edge table now has its own 7 AM task. |
live_trading.settle | ON | Closes finished bets using Kalshi's official result. |
report, maker_report, crypto_maker_report, fleet_report, balance_report | ON | Rebuild the dashboard pages and log the Kalshi balances. Read-only. |
| Task | When | What it runs |
|---|---|---|
\KALPOLY\Weather_Scan | Every 30 min, 8:08 AM ET for 15 h | run_scan.cmd (above) |
\KALPOLY\Crypto_Maker | Every 5 min (keep-alive) | start_crypto_maker.cmd |
\KALPOLY\Crypto_Lag | Every 5 min (keep-alive) | start_crypto_lag.cmd |
\KALPOLY\Weather_Lag | Every 5 min (keep-alive) | start_weather_lag.cmd |
\KALPOLY\Crypto_Venue | Disabled | start_crypto_venue.cmd |
\KALPOLY\Crypto_Edge | Daily 7:00 AM | run_crypto_edge.cmd — rebuilds live\crypto_edge.json, the crypto maker's price table and kill checks. If this misses a day, the crypto maker stops posting (it refuses a table older than 24 hours). |
\KalpolyForecastScorecard | Weekdays 8:21 AM | run_forecast_scorecard.cmd — grades the forecast, books nothing. |
\KALPOLY\FastAPI_KeepAlive | Every 5 min (keep-alive) | start_live_trading.cmd — the dashboard web service. |
\KALPOLY\DayAhead_NO | Every 15 min, 9:30 AM–11:45 PM ET | run_dayahead_no.cmd — day-before temperature NO bets (below). |
\KALPOLY\Verify_Critical | Hourly | scripts\verify_critical_files.ps1 — checks the key launcher and live files listed in CRITICAL_PATHS.txt still exist and restores a missing one from git. Never resets settings. |
A small web service (uvicorn, one worker, port 8300 on this PC, PID 25244) serves the pages at
https://kalpoly.seamansys.com. It only shows pages the 30-minute job has already
built; the one exception is the confirm link in old-style phone alerts. It must stay at one
worker: the protection against sending the same order twice only works inside one process.
Menu: Paper (Report, Account, Fillable, Forecast, Strategy sleeves — all frozen, nothing rebuilds the paper ones), Live (Report, Venue lag — stale, Status, Exchange balances, About = this page), Market Maker (temperature maker desk), Crypto Maker desk, Rain Incentive desk.
File live_trading\crypto_maker.py, runs every 15 seconds.
KXBTCD, KXETHD, KXSOLD, KXXRPD). Solana and XRP were added 2026-10-11 (Ed). Each coin posts only once its own price-table cell has 200+ samples — no Bitcoin/Ethereum stand-in — so SOL/XRP stay quiet until the 15-second tape has built their cells (started 2026-10-11 ~9:40 PM ET). One order per settlement hour is per series: a Bitcoin and a Solana order can rest in the same hour, two Bitcoin orders cannot. All four use 1¢ price steps.live\crypto_edge.json, rebuilt 7 AM).MAX_QUEUE_AHEAD = 50), because being last in a long line
tends to get filled only when the price is about to turn against you.live\crypto_maker_guard.jsonl. Code: live_trading\crypto_race_guard.py. Backtest on the 15-second tape (12 Sep–11 Oct): it avoided 5 of 7 losing setups and kept 945 of 1,065 winning ones (89%).Files live_trading\weather_lag.py (15-second watcher) and live_trading\filter.py (the rules). Places orders automatically; the phone alert comes after.
LIVE_LOCK_MARGIN_F). The margin exists
because our station reading and Kalshi's official source have disagreed by 1°F before
(Denver).lag_ts; older than 15 minutes = no trade). Before this it
looked at the forecast scan's timestamp, which stopped moving when the forecast was switched
off on 7 Oct, so it could not trade from about 6 PM on 7 Oct until 12:15 PM on 8 Oct. Forecast
rows are now thrown out before any check, so only live station readings (high, low, rain lag)
can ever lead to an order.lip_maker) — $140, Kalshi pot 0File live_trading\lip_maker.py, runs in the 30-minute job. Kalshi runs a
"liquidity incentive" on some rain markets: it promises a share of a prize pool to people who
leave buy orders on the book. This bot joins the best buy price on the favourite side and does
not use any forecast.
KXRAIN markets that have an active incentive.docs\rain_research_backtest.md.live\lip_rewards.json (it does not exist yet). Missing rewards are a
warning, not a shut-off (changed 8 Oct). On 8 Oct Ed's Kalshi Portfolio page showed
Rewards (Oct): $0.00, so the bot's own estimate of about $19/day is
unconfirmed and not counted as income. Reminder to re-check: Mon 12 Oct.dayahead_no) — $5 a bet, up to $100, Kalshi pot 0File live_trading\dayahead_no.py, live since 11 Oct 2026 (Ed approved at 10:52 PM ET). Runs every 15 minutes, 9:30 AM–11:45 PM ET.
live\enabled.flag and live\dayahead_no.enabled.flag. Creating live\dayahead_no.kill stops it.live\dayahead_no.jsonl and logs\dayahead_no.log. Each fill sends a phone alert.maker) — $100, armed but idleFile live_trading\maker.py. Still in the 30-minute job and able to place orders:
same-day temperature only, 10 contracts, rests 3¢ under a 90¢+ favourite (or joins the bid
if that market pays an incentive), only after the station is 2°F through the line, highs only
after 2 PM local, skips a queue longer than 50. Its last post was 5 September.
Its $100 is still a separate cap in code, even though the rain bot's comment says the rain cap
was raised to $200 using this drawer's unused budget.
Paper booking closed 7 Oct (FORECAST_PAPER_BOOK = False in
weather\config.py). The 30-ticket sample (2–6 Oct) finished 17 wins /
13 losses, +$121 pretend, with Phoenix +$74 and Dallas −$86 doing most of it. Verdict:
not ready. weather.run is out of the 30-minute job.
The scorecard (weather\forecast_scorecard.py), weekdays 8:21 AM. It writes a forecast
chance for every temperature bucket in every city, then compares it to Kalshi's own price
once the day settles. It places nothing, pretend or real. Rules are fixed in advance in
paper\forecast_scorecard_PROTOCOL.md.
The $75 live forecast program (live_trading\forecast_maker.py,
10 contracts, post-only) exists only as a disarmed shell. It needs both the REM'd line in
run_scan.cmd uncommented and live\forecast_maker.enabled.flag to exist.
Neither is the case, and Ed has said not to do either.
Kalshi splits one account into separate cash pots called "exchange indexes". An order can only
use the pot its market belongs to, and the total on the website hides the split. Money is moved
between pots only by Ed, using scripts\kalshi_allocate.py; the bots never move it.
| Pot | Used for | Who uses it here | Cash at 12:13 PM ET 8 Oct |
|---|---|---|---|
| 0 | Default: weather, rain, gas, most sports | Weather lag, rain incentive, temperature maker | $116.17 |
| 1 | Combos | Nothing | $0.02 |
| 2 | Crypto and commodities | Crypto maker | $145.83 |
| 3 | Tennis, baseball, basketball | Nothing in KALPOLY | $60.75 |
| Total cash (positions not included) | $322.76 | ||
Source: the last line of live\exchange_balances.jsonl, written by
the 30-minute job. The code also has an overall ceiling, LIVE_TOTAL_RISK = $495, set when
cash was $495.60 on 14 Sep; nothing adds the four caps up against it before an order.
Order alerts go to Ed's phone through ntfy.sh (a free push-notification service). The channel
name is kept in secrets\ntfy_kalpoly_topic.txt and is not written here. That file went
missing and was restored on 7 Oct 6:18 PM ET; a test push ("TEST alerts restored") reached Ed's
phone. Alerts are sent by the crypto maker, weather lag, the exit step, the rain bot and the
temperature maker when they place or close real orders. Weather-lag orders go through
automatically; the alert is a heads-up after the fact.
| Applies to | Stops when |
|---|---|
| Everything | Delete live\enabled.flag. Every live program checks it and places nothing without it. This is the one switch that stops all real orders at once. |
| Crypto maker | (1) 7 days with zero fills; (2) 20+ graded fills with an average result after fees of zero or worse; (3) the daily table is older than 24 hours (pauses until refreshed). On 8 Oct both written kills read "not fired". |
| Bounded test (all live bots) | Hard stop 31 Oct (extended by Ed on 8 Oct; was 13 Oct). If Kalshi's actual rain rewards plus real trading results are not clearly positive by then, every live bot gets turned off. The rain bot stops itself; the others are switched off by hand. |
| Rain incentive | (1) From 31 Oct, credited rewards under half the bot's own estimate — only if a number has been entered in live\lip_rewards.json; blank is just a warning; (2) from 31 Oct: 200+ filled contracts averaging worse than −2¢ each after fees (before 31 Oct this is only a warning in the log; deferred to 31 Oct per Ed 9 Oct, after it shut the bot off at 8:38 AM that day on 217 contracts averaging −8.5¢, mostly the 8 Oct Miami loss); (3) from 31 Oct, rewards plus settled results zero or worse. Nothing stops the rain bot automatically before 31 Oct. (The two date checks were 16 and 20 Oct until 8 Oct.) |
| Weather lag | No calendar kill. Guarded by the 2°F / 0.05 in margins, quiet hours, the 15-minute freshness check, and the exit step that sells a contradicted position. |
| Temperature maker | Its $100 cap is the whole downside; every order expires at the market close. |
| Forecast | Stays off until the scorecard pass bar is met and Ed approves. |
| Rule | Where it lives |
|---|---|
Do not raise crypto MAX_PAY (0.40). | live_trading\crypto_lag.py (the old taker limit) |
| Do not lower the weather-lag 2°F margin. | LIVE_LOCK_MARGIN_F in live_trading\config.py |
Do not change MAX_QUEUE_AHEAD (stays 50). | live_trading\crypto_maker.py |
| Crypto taker stays killed; tape only. | — |
| Crypto maker stays live: $100, last 15 minutes, 50 contracts. | live_trading\crypto_maker.py |
| Paper scanners never go live automatically. | — |
| Do not revive venue lag or Thesis A. | — |
Do not create live\forecast_maker.enabled.flag; do not un-REM forecast_maker or weather.run in run_scan.cmd. | run_scan.cmd |
| Retired paper sleeves (A1, B1, C3, W2 and the rest) stay retired. | paper_sleeves\_archived\ |
| Date | Change |
|---|---|
| 11 Oct | Day-before temperature NO bot went live at $5 a bet, with a forecast check (skips buckets within 2°F of the forecast high). |
| 22 Sep | Crypto maker window widened from 10 to 15 minutes; crypto maker checks its own pot (2) before posting. |
| Late Sep – 2 Oct | Clean-up. On 2 Oct some live files were wiped and restored; CRITICAL_PATHS.txt and the hourly Verify_Critical guard were added. |
| 5 Oct | Paper sleeves A1, B1, C3, W2 shut down and archived. |
| 11 Oct, night | Rain bot weather check (Ed): posts only when the GFS MOS rain chance and 30-year climatology agree with the side; waiting orders that newly fail are cancelled, nothing sold. Caps, size, 80¢ floor, 3-day horizon and 31 Oct stop unchanged. |
| 11 Oct | Weather pot split: rain incentive $120, weather lag $80, each counting only its own bets. Rain stops posting until its exposure is under $120; nothing was sold. Both still draw on Kalshi pot 0 cash. Later the same night (Ed) shifted again toward the already-happened bets: weather lag $140, rain $60. At 10:11 PM it was reversed after the replay showed weather lag finds only about 2 bets in 38 days: rain $140, weather lag $60. |
| 6 Oct | Rebuild: all remaining pretend sleeves retired; notebooks and tapes taken out of the 30-minute job (scan time down from 30–40 min to about 4–5); crypto edge table moved to its own 7 AM task; rain incentive bot went live, cap raised to $200. |
| 7 Oct | Forecast paper sample closed (30 tickets); weather.run removed from the 30-minute job; daily forecast scorecard started (weekdays 8:21); $75 forecast program built but left disarmed. Phone alert file restored and tested. |
| 8 Oct, early | Paris rain order (Sep 2027, 50 at 45¢) cancelled, nothing filled. |
| 8 Oct, 12:15 PM | Weather lag fixed: freshness based on station readings, forecast rows dropped. Watcher restarted. |
| 8 Oct, midday | Rain bot: markets must close within 3 days; favourites 80¢+ only; 20 contracts; 70 books per pass; missing reward data no longer shuts it off. Atlanta YES at 54¢ (posted 12:13 PM under the old rules) cancelled, nothing filled. |
| 8 Oct, afternoon | Bounded-test hard stop moved from 13 Oct to 31 Oct (Ed). Rain bot's two date checks moved from 16 and 20 Oct to 31 Oct. Nothing else about trading changed. |
| 9 Oct | Rain bot's fill check shut it off at 8:38 AM (217 settled contracts, −8.5¢ average, mostly the Miami YES at 75¢). Ed had it turned back on; the fill check now waits for 31 Oct like the other two and only warns before then. Caps and sizes unchanged. |
| 8 Oct | This page rewritten from the actual system. Old version saved in OLD\bak_overview_20261008\. |
run_scan.cmd — the 30-minute job (what's on and off).
live_trading\config.py — master flag, 2°F margin, $60 lag budget, quiet hours, alert settings.
live_trading\crypto_maker.py — crypto maker rules and caps.
live_trading\lip_maker.py — rain bot rules, caps, stop rules.
live_trading\filter.py, weather_lag.py, exit.py — weather lag.
live_trading\maker.py — temperature maker.
live_trading\kalshi_live.py — the only code that can move money.
weather\config.py — forecast switches and city list.
logs\scan.log — every 30-minute run.
logs\crypto_maker_watch.log, weather_lag_watch.log — the live watchers.
logs\crypto_edge_report.log, forecast_scorecard.log — the daily tasks.
live\crypto_edge.json — crypto win/loss record and kill status.
live\crypto_maker_posts.json, live\lip_posts.json, live\maker_posts.json — every real post.
live\exchange_balances.jsonl — cash per pot, each scan.
paper\forecast_scorecard.jsonl — forecast grades.
https://kalpoly.seamansys.com: Crypto Maker desk, Rain Incentive desk, Live report,
Exchange balances, Status, About (this page). Paper pages and Venue lag are frozen history.
paper\forecast_scorecard_PROTOCOL.md, paper\forecast_diligence_2026-10-07.md,
paper\FORECAST_SAMPLE_CLOSED_2026-10-07.md, PROTECT_CRITICAL.md,
paper_sleeves\_archived\, design notes in docs\superpowers\specs\.
crypto_venue tape is still running (started 6 Oct 5:16 PM, after its task last ran at 12:25 PM) even though the
30-minute job's notes say it stopped on 6 Oct and its restart task is Disabled. It places no
orders; it will stop for good at the next reboot.live_trading\venue_lag.py and a stray logs\_thesis_a_paper_check.py are still on disk,
unused.