futuresclock (Python)
Typed, dependency-free client for the Futures Clock open data: trading hours, contract specifications, expiry dates and China market-access status for 75 futures contracts on SHFE, INE, DCE, CZCE, GFEX, CFFEX, CME, COMEX, NYMEX, CBOT, ICE, LME, Eurex, SGX, OSE and HKEX.
Every record carries the official exchange source it was checked against and its review date. The data is versioned and archived on Zenodo (DOI 10.5281/zenodo.23031490 for release 1.3.0; concept DOI 10.5281/zenodo.23031489 always resolves to the newest release).
Install
pip install futuresclock
Python 3.9+, standard library only.
Use
from futuresclock import FuturesClock
fc = FuturesClock()
hours = fc.trading_hours()
copper = next(p for p in hours["products"] if p["slug"] == "shfe-cu")
print(copper["timeZone"], copper["sessions"][0])
# Asia/Shanghai {'label': 'Day session', 'open': '09:00', 'close': '10:15', ...}
expiries = fc.expiries()
print(expiries["nextByProduct"]["cme-es"]["ltd"])
# {'symbol': 'ESZ6', 'date': '2026-12-18', 'estimated': False, ...}
contracts = fc.contracts()["contracts"]
access = fc.china_access()["products"]
Each dataset is one JSON document (returned as a dict) with
datasetVersion, dataReviewed, license and the rows. Read the version
before caching: the site republishes on every review and the expiry window
rolls forward daily (asOf).
Options:
FuturesClock(
base_url="https://futuresclock.com", # default
timeout=30.0, # seconds
fetch=None, # callable(url, headers, timeout) -> bytes, to route through requests/httpx
)
A non-2xx response raises FuturesClockError with .status and .url.
Datasets
| Method | Path | Rows |
|---|---|---|
trading_hours() |
/data/trading-hours.json |
69 products, sessions in exchange-local time |
contracts() |
/data/contracts.json |
75 contracts: size, tick, expiry rule, source |
expiries() |
/data/expiries.json |
last-trading and first-notice days, 12 months |
china_access() |
/data/china-access.json |
42 Chinese products: 特定品种 / QFI / hedge |
CSV twins of every file, the field-by-field method and the correction process are documented at https://futuresclock.com/en/data-methodology/.
License
This client is MIT. The data is published under the Futures Clock Open Data Compilation License 1.0.0: free to copy, transform and redistribute, commercially or not, with factual attribution to futuresclock.com. Exchange facts remain the exchanges'.
This is reference material, not prices, signals or advice. Verify every fact against the linked official notice before trading.
Metadata
Release files for futuresclock 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 | |
|---|---|---|---|
| futuresclock-0.1.0.tar.gz | 5.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| futuresclock-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.6 kB
Release files / futuresclock-0.1.0.tar.gz
| Download URL | futuresclock-0.1.0.tar.gz |
|---|---|
| Size | 5.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
35207f4056e8a3cd7d150e4f400b61c611e1bb8a5797148adb7a4333dc4689ec
|
|
BLAKE2b-256 checksum How to use checksums |
7a4425ccc599e3186c276c7490cd45763fb96a10c1f3996e8f6bdddc10d97788
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|
Release files / futuresclock-0.1.0-py3-none-any.whl
| Download URL | futuresclock-0.1.0-py3-none-any.whl |
|---|---|
| Size | 5.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e7fc5e986b150aacf95e8311530e2c78b8f51ff5fa064f4a6ee45942ae5a9645
|
|
BLAKE2b-256 checksum How to use checksums |
a82d2f23e6642a2fb4be58c43af667def3bb41bc28256d1b57d0b6f0b33e5dfc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.3
|