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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vibe_trading_livetennis-0.1.0.tar.gz.
File metadata
- Download URL: vibe_trading_livetennis-0.1.0.tar.gz
- Upload date:
- Size: 21.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdf00e043398b79610f9f4847a33296fb4f1a313bf7b3bcf4792b0c6c17f7f61
|
|
| MD5 |
342a8c612a62014fad820ee669aed00e
|
|
| BLAKE2b-256 |
595749c6030fc07f7c5d63f38e8f0252e141a64260a73fa87587f712b3233ad5
|
Provenance
The following attestation bundles were made for vibe_trading_livetennis-0.1.0.tar.gz:
Publisher:
publish.yml on livetennisapi/vibe-trading-livetennis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibe_trading_livetennis-0.1.0.tar.gz -
Subject digest:
cdf00e043398b79610f9f4847a33296fb4f1a313bf7b3bcf4792b0c6c17f7f61 - Sigstore transparency entry: 2501621534
- Sigstore integration time:
-
Permalink:
livetennisapi/vibe-trading-livetennis@93285894229c8be1c8d78f4be38f524d3b69c342 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/livetennisapi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@93285894229c8be1c8d78f4be38f524d3b69c342 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file vibe_trading_livetennis-0.1.0-py3-none-any.whl.
File metadata
- Download URL: vibe_trading_livetennis-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
582351e7d582af1785198168a6efa5f1f3022b06b15a998d2e94ab45baec5e80
|
|
| MD5 |
fe3be3a7aee8f5cf6cd246b2541daba2
|
|
| BLAKE2b-256 |
6c787a46066b7902c31d42d1f1944f8d48f944e43f767e2340f226613007de74
|
Provenance
The following attestation bundles were made for vibe_trading_livetennis-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on livetennisapi/vibe-trading-livetennis
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vibe_trading_livetennis-0.1.0-py3-none-any.whl -
Subject digest:
582351e7d582af1785198168a6efa5f1f3022b06b15a998d2e94ab45baec5e80 - Sigstore transparency entry: 2501621545
- Sigstore integration time:
-
Permalink:
livetennisapi/vibe-trading-livetennis@93285894229c8be1c8d78f4be38f524d3b69c342 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/livetennisapi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@93285894229c8be1c8d78f4be38f524d3b69c342 -
Trigger Event:
workflow_dispatch
-
Statement type: