HISTORY

Release History

Every version of Predict & Profit, what changed, and why.

v2.5

(August 2026)Current

The forecast model

  • The weather bot now prices markets from NOAA's National Blend of Models. NBM publishes calibrated, bias-corrected station-level temperature guidance, including mean, standard deviation and percentiles, for exactly the stations Kalshi settles on.
  • Probability now comes from interpolating NOAA's own published percentiles, with normal tails beyond P10 and P90 and a 1.15 multiplier on sigma for fat tails.
  • The model this replaces counted agreement across raw ensemble systems. Across 112 settled trades it scored a Brier of 0.2858 against 0.2439 for simply predicting the base rate, because raw ensemble spread on overnight minima was 2.1 to 4.0 times too narrow and gridpoint bias reached 7F.
  • The five raw NWP sources (GFS, AIGEFS, ECMWF IFS, AIFS, HRRR) remain at a combined 0.25 weight as a disagreement check. They are no longer the model.
  • Same-day markets are skipped. NBM coverage starts at forecast hour 24, and rather than fall back to the model that lost money, the bot does not trade what it cannot price.

Critical fixes

  • Partially filled positions never settled. Settlement selected status 'accepted' only, but a partial fill sets 'partially_filled', so the row held real contracts, settled on the exchange, and the ledger booked nothing. The daily-loss kill switch reads settled P&L, so a loss that never settled never counted against your limit.
  • The weather bot booked P&L gross of fees. Fees are now recorded at order time and subtracted at settlement, in paper trading as well as live, taken from Kalshi's own reported figure rather than modelled. Whether a limit order fills as maker or taker is decided by how it executes, not by how it was submitted.
  • The econ bot never recorded a position it closed. Both closing paths placed a real sell on Kalshi and then wrote nothing, so the realized P&L of the close existed only on Kalshi's side. The regime close fires only on losers, so the kill switch ran past the limit you set it to.
  • The econ settlement calculation was the pre-2.4 version. Kalshi's all_yes and all_no results matched no win case and booked a winning trade as a total loss, void was booked as a total loss instead of returning the stake, and fractional fills were truncated. CPI and PCE markets do settle this way.
  • The weather scan saw a fraction of the market. It asked Kalshi for category 'Climate', which matches zero series, so every scan fell through to a truncating catalogue walk that surfaced 39 to 63 of the 291 real weather series. The correct category is 'Climate and Weather'.

Fixed

  • Atlanta, Boston, Phoenix and San Antonio passed the risk gate but had no forecast definition, so their candidates were fetched, scored and discarded every cycle. All four now have coordinates, timezones and verified settlement stations.
  • PHL in a city allowlist silently dropped Philadelphia, because only PHIL was recognised.
  • Econ: positions that settled mid-session held a slot until restart. Stale row repair now runs every cycle.
  • Econ: the P&L report hid open exposure older than --days, and voided markets counted as losses.

Diagnostics

  • Every weather log line claimed UTC while carrying local time, so no log line could be lined up against climate-day bounds, NBM cycles, Kalshi settlement or the econ bot's log.
  • 'No forecast exists' and 'the forecast is too close to 50/50' shared one skip reason. The first is a coverage gap that no setting affects. It is now no_forecast_available.
  • Weather cycles that overrun --scan-interval now report the real work time and the effective loop length.
  • Econ: a BLS outage silently disabled the nowcast's only accuracy check. This never affected trade sizing.

Still open

  • Weather scan cycles can still take longer than --scan-interval on a large city allowlist. A cold cycle on 20 cities has been measured at 14 to 24 minutes against a 300-second interval. Lower the city count or raise the interval.
  • Execution quality is not yet measured. Now that fees are in the ledger this can finally be measured. Until it has been, treat the choice between bid and cross as unproven either way.

v2.4.1

(August 2026)

Single fix

  • Orders were rejected with 'post only cross' and the trade was lost. When a contract's bid fell below the bot's minimum price, the bot bid at the ask but still marked the order post only, which tells Kalshi to reject anything that would trade immediately. This happened every time a bid dropped under ten cents. The flag now follows the price.

v2.4

(August 2026)

Bug-fix release, no new features

  • The econ bot stopped trading on any database that was not empty. It read timestamps back from SQLite as text and compared them to a date. A fresh install worked, so this only appeared after your first few trades.
  • NO positions were closed at a loss and recorded as wins. The profit calculation was inverted for the NO side. Every NO trade was affected.
  • The budget always read $0.00 deployed, because Kalshi removed the price field the bot was reading, so it kept deploying past the limit you set.
  • Running both bots on one API key made them fight. Neither bot filtered to its own markets, so each charged the other's positions against its budget. Both now ignore markets that are not theirs.
  • The 24-hour duplicate-trade window silently dropped a full calendar day, so the bot could re-enter a ticker it already held.
  • Segfault in the weather bot's AIGEFS forecast download, caused by decoding GRIB from several threads at once.
  • bot_doctor.py reported a working PKCS#1 private key as bad and told customers to run an openssl conversion they did not need.

Known limitation at the time

  • The weather forecast model was unchanged in this release and did not perform in our own testing. Customers were advised to keep weather position sizes small. That is what v2.5 addresses.

v2.3

(June 2026)

Mandatory upgrade: Kalshi V2 API migration

  • Kalshi shut down their V1 order endpoint. All previous versions can no longer place orders.
  • Both bots migrated to /portfolio/events/orders with new payload format (bid/ask side, decimal string price/count).
  • 18 new unit tests covering all buy/sell and YES/NO combinations.
  • Open-meteo rate limiting added (2-second delay between API calls).
  • Windows start_bot.bat added for both bots.
  • Python 3.13 confirmed supported.
  • Your config, API keys, and trade history are preserved when upgrading.

v2.2

(May 2026)

Reliability release

  • Confirmed-fill accounting: submitted orders no longer counted as filled trades.
  • NO-side weather edge routing added.
  • Source failure logging: failed data sources now visible in logs.
  • Visual dashboard rebuilt: 6-tab Streamlit app (Overview, Positions, Performance, Scan History, Reconcile, Log Viewer).
  • bot_doctor.py self-check script added.
  • migrate_db.py database migration tool added.
  • QUICKSTART.md, SETUP_KEYS.md, TROUBLESHOOTING.md, WINDOWS_SETUP.md added.
  • Pinned requirements.txt.

v2.0

(April 2026)

Inflation bot + ensemble expansion

  • Inflation bot added (CPI/PCE markets, 5 signal sources: Cleveland Fed, FRED, BLS, BEA, homemade nowcast).
  • Weather ensemble expanded from 62 to 164 members (added ECMWF IFS + AIFS-ENS).
  • Kelly criterion position sizing.
  • Regime change detection and optional auto-close.

v1.0

(March 2026)

Initial release

  • Weather bot with GFS + AIGEFS ensemble (62 members).
  • Basic YES-side trading only.
  • PostgreSQL storage (later migrated to SQLite for customer package).

Running an older version?

Download the latest from your Gumroad library. Your config, keys, and trade history are preserved. See the troubleshooting page for upgrade help.