vibe-trading-livetennis
A custom Vibe-Trading data loader for tennis event-market price series, with optional live match-state enrichment. Observe-only, MIT-licensed.
Disclosure: this package is maintained by the Live Tennis API team (https://livetennisapi.com). It is vendor-authored — judge accordingly. The price series it loads comes from Polymarket's own public, keyless API; the optional enrichment uses our free tier.
Why this is a separate package (not a PR into Vibe-Trading)
We first proposed a live-tennis tool for the Vibe-Trading repo in HKUDS/Vibe-Trading#1133. The maintainer declined bundling it — correctly, because a tool bundled into the package must run on free public sources, and a keyed API is a dependency the project can't own for its users. In the same breath they pointed at the honest path:
"a skill plus a custom loader. The project supports registering your own data source and writing a skill that documents its interface, so anyone who wants live tennis state alongside event contracts can wire yours up without it being part of the package."
This repo is exactly that: a standalone loader + SKILL.md you
register into your own install. Nothing is added to the Vibe-Trading tree.
What it does
- Registers one data source,
polymarket_tennis, implementing Vibe-Trading'sDataLoaderProtocol.fetch(...)returns{symbol: DataFrame(trade_date index; open/high/low/close/volume)}. - The OHLC series is built from Polymarket's public keyless CLOB price
history — the recorded implied-probability series for a tennis event-market
outcome (each share settles $1/$0, so the price is the market's implied
probability). This mirrors Vibe-Trading's own
prediction_markettool, exposed through the loader interface. - Optional live match-state enrichment from the Live Tennis API free tier —
live score, which player is serving, and a derived break-point flag — gated on
LIVETENNIS_API_KEY. No key → enrichment off, loader still works. - A conservative market↔match player-name matcher (reusing the ideas in
livetennisapi/polymarket-tennis) that returnsNonerather than guessing when names are ambiguous.
Quickstart
pip install vibe-trading-livetennis
import vibe_trading_livetennis
from vibe_trading_livetennis import DataLoader
vibe_trading_livetennis.register() # wire `polymarket_tennis` into your install
loader = DataLoader()
frames = loader.fetch(
["will-jannik-sinner-win-the-2026-mens-us-open#Yes"],
"2026-02-01", "2026-02-13", interval="1D",
)
print(frames["will-jannik-sinner-win-the-2026-mens-us-open#Yes"].tail())
A symbol is a Polymarket market slug, numeric market id, 0x condition
id, or raw CLOB token id, optionally suffixed #<outcome> (default: first
outcome). See SKILL.md for the full interface and registration
notes.
Honest coverage (read before backtesting)
- The series is a genuine recorded history of implied probability from CLOB
/prices-history— not fabricated, not a live snapshot relabelled as history. - It is implied probability in [0, 1], not a conventional asset price.
- CLOB history has no per-bar volume, so
volumeis0.0on every bar. - Coverage is only as deep as the market's own lifetime (a tennis market lives days to weeks). There is no multi-year OHLC; deep historical backtests need your own recorded series. The loader serves the market's real recorded window, live/recent included.
- A market must exist on Polymarket and resolve to one outcome token; otherwise that symbol is omitted (one bad symbol never aborts the batch).
Tiers (enrichment only)
The price loader needs no key. The optional live-state enrichment uses the Live Tennis API free keyed tier: 30 req/min, 100 req/day — live scores (score / server / break-point), players (including current ranking), fixtures, usage. 100/day is a develop-and-test or ~15-minute-cadence budget, not continuous fast polling. Completed-match history and point-by-point are Basic; the market-prices feed is Pro; model win-probability and in-play stats are Ultra. This package requires none of them — market prices come from Polymarket's public API and enrichment uses only free-tier endpoints. Free keys: https://livetennisapi.com/subscribe/free
Observe-only
Every request this package makes is a GET to a public data endpoint. It has no
order, position, wallet or account surface, and it computes no trading signal —
it is a data source, not a strategy or an executor.
Development
pip install -e ".[dev]"
ruff check .
pytest
License
MIT — see LICENSE.
Metadata
Release files for vibe-trading-livetennis 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| vibe_trading_livetennis-0.1.0.tar.gz | 21.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| vibe_trading_livetennis-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 40.2 kB
Release files / vibe_trading_livetennis-0.1.0.tar.gz
| Download URL | vibe_trading_livetennis-0.1.0.tar.gz |
|---|---|
| Size | 21.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cdf00e043398b79610f9f4847a33296fb4f1a313bf7b3bcf4792b0c6c17f7f61
|
|
BLAKE2b-256 checksum How to use checksums |
595749c6030fc07f7c5d63f38e8f0252e141a64260a73fa87587f712b3233ad5
|
| 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 Aug 18, 2026.
Transparency logRelease files / vibe_trading_livetennis-0.1.0-py3-none-any.whl
| Download URL | vibe_trading_livetennis-0.1.0-py3-none-any.whl |
|---|---|
| Size | 18.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
582351e7d582af1785198168a6efa5f1f3022b06b15a998d2e94ab45baec5e80
|
|
BLAKE2b-256 checksum How to use checksums |
6c787a46066b7902c31d42d1f1944f8d48f944e43f767e2340f226613007de74
|
| 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 Aug 18, 2026.
Transparency logSecurity for vibe-trading-livetennis 0.1.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for vibe_trading_livetennis-0.1.0.tar.gz
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 Aug 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.