Skip to main content

oak-domain-betting

The betting domain for the OakQuant platform. Right now it is one thing only: a point-in-time odds capture that runs from day one.

pip install -e .
oak-odds snapshot      # every open market on every venue, timestamped
oak-odds status        # what the corpus holds

Signing in

The domain is capability-gated, fail-closed: a tenant whose enterprise does not carry betting sees none of it, and never another domain's content instead.

# inside grove, after the package is installed
python -m oak_domain_betting.provisioning.seed_betting_owner --dry-run
python -m oak_domain_betting.provisioning.seed_betting_owner --password-stdin

Creates the oakquant-betting enterprise, grants it the betting capability, and provisions owner.betting@oakquant.ai as its owner. Idempotent — re-running never duplicates a row and never deletes one.

⚠️ Never pass a password as an argument. It lands in the process table, in shell history, and in any transcript. --password-stdin reads from a pipe or a TTY prompt and never renders it. Omit the flag and the owner stays on the invite flow.

Why capture comes before the model

Everyone has results. Almost nobody has timestamped odds — and without them there is no point-in-time price, no closing line value, and no honest backtest. An hour of prices not captured cannot be reconstructed at any price. This is the same irreversibility that already cost this platform its macro board history, and it is the only part of the programme that has a deadline of now.

Everything else can be written later against the history this is accumulating today: the de-vig, the hierarchy, the features, the gates.

What it does not do

It does not convert a price into a probability. Removing the overround is Phase B0, and proportional, Shin and power methods disagree materially on longshots. Get it wrong and every number downstream is wrong — silently, and in the flattering direction. So nothing here pretends to have done it.

Quote.mid exists and is documented as not a probability. Polymarket's outcomePrices already sum to 1 and are deliberately not promoted to the quote, because a field that looks finished is more dangerous than one that obviously is not.

The venues, and why these two

venue why
Kalshi A regulated exchange, not a risk desk — you are matched against other participants, so winning does not get you closed. Carries real sports (EPL, La Liga, Europa League) as binary markets with a settlement field, so one capture eventually yields both the price and the label.
Polymarket A second independent book on overlapping events. Not redundancy — a control. Two venues disagreeing is information; it is also the only way to notice a feed has gone stale, which from inside one feed looks like a market that stopped moving.

Both are public and key-free. Nothing here has been paid for, and nothing will be until the retention and use-class terms have been read — a monthly price reads like a purchase and is not one, and a personal-use tier does not cover a billing product.

⭐ Three-way soccer arrives as three binary markets sharing one event ticker. KXEPLGAME-26SEP20FULMUN has a -FUL, a -MUN and a -TIE, and their three YES mids sum to more than 1. That excess is the exchange's overround, sitting in the data, which makes Gate B0 testable the moment the instrument is written: a harness that cannot reproduce the venue's own cut from quoted prices cannot be trusted to find an edge.

What lands on disk

$OAK_ODDS_DIR/                       # default ~/oakquant-odds
  raw/<provider>/<date>/<ts>.json.gz    # verbatim. THIS is the asset.
  canonical/<date>.jsonl                # flat rows. Derived, regenerable.

Raw is written before anything is parsed. If normalisation throws, the irreplaceable half is already safe. Normalisation can be rewritten a year from now and re-run over raw; a field dropped at capture time is simply gone.

⚠️ A skip is not a pass

Five silent losses shipped on this platform in one week, every one the same shape: a loop that skipped records and reported success. So the capture counts what was written, not what was attempted; every skipped market carries a reason; truncation from hitting a page limit is recorded differently from a feed that simply ended; and a run that captures nothing exits non-zero and says so — "NOTHING CAPTURED. This hour is lost and cannot be refetched."

Apache-2.0.

Metadata

Release files for oak-domain-betting 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oak-domain-betting 0.2.0
File Size Uploaded
oak_domain_betting-0.2.0.tar.gz 46.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for oak-domain-betting 0.2.0
File Interpreter ABI Platform
oak_domain_betting-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 84.3 kB

Release files / oak_domain_betting-0.2.0.tar.gz

Download URL oak_domain_betting-0.2.0.tar.gz
Size 46.5 kB
Tags Source
SHA-256 checksum
How to use checksums
2a397785cd5c99e02e8b17ca7451877b2b3945576947eb8e8b3d140ff630d1ee
BLAKE2b-256 checksum
How to use checksums
75b30ca555c77d3dd6413d82f8aa63c2177dcdf9f71f74168385985ff227c212
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release files / oak_domain_betting-0.2.0-py3-none-any.whl

Download URL oak_domain_betting-0.2.0-py3-none-any.whl
Size 37.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
71f591a8130f61bdafe6e9262812a356914962c2831bb1874266b0f021fe6e18
BLAKE2b-256 checksum
How to use checksums
cf75c0f700a2d2cccc3c7ab2f1487cca5fd4a66f2b71adb4d7e5e091b2db5fcb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 6, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page