CFTC COT SDK
A robust, verified Python SDK for accessing, querying, and analyzing CFTC Commitments of Traders (COT) data.
Overview
The cftc-cot SDK provides a fluent, production-ready interface for the CFTC's SODA2 API. It simplifies the complexity of querying 6 different CFTC datasets, handles API-specific naming quirks, and provides powerful post-fetch analysis tools.
Key Features
- Fluent API: Chainable query building for intuitive data retrieval.
- Production-Tested: Verified field mappings and API interactions against live CFTC data.
- Advanced Analysis: Net Positions, Z-Scores, the classic 0–100 COT Index, extreme positioning detection, long/short ratios, percentile ranks, and week-over-week change.
- Caching: Optional in-memory or persistent disk caching of API responses (COT data updates weekly, so a 24h TTL eliminates redundant requests).
- Resilient Networking: Automatic retry with exponential backoff on transient API failures (429/5xx).
- Command-Line Interface: A
cftc-cotCLI for quick lookups without writing Python. - Robust Field Handling: Preserves official API quirks (typos, naming inconsistencies) using structured field constants.
- Production Ready: Full type hinting, comprehensive exception hierarchy, and rate-limiting support via app tokens.
Installation
pip install cftc-cot-soda
# With disk caching support:
pip install cftc-cot-soda[cache]
Install from GitHub
# Latest tagged release, straight from the source repo
pip install git+https://github.com/victorKariuki/cftc-cot.git@v0.2.0
# Or the wheel attached to a GitHub Release
pip install https://github.com/victorKariuki/cftc-cot/releases/download/v0.2.0/cftc_cot_soda-0.2.0-py3-none-any.whl
Quick Start
from cftc_cot import COTClient, COTAnalysis
# Initialize client
client = COTClient()
# Query: 52-week history of Crude Oil positioning
df = client.legacy().market("Crude Oil").last_n_weeks(52).execute()
# Analyze: Compute net positions and the COT Index
analysis = COTAnalysis(df, classification="legacy")
df_analyzed = analysis.cot_index(window=52)
print(df_analyzed[['report_date_as_yyyy_mm_dd', 'noncomm_net', 'noncomm_net_cot_index']].tail())
Caching
# In-memory cache (per-process) or persistent disk cache.
client = COTClient(cache="memory")
client = COTClient(cache="disk", cache_dir="./cot_cache", cache_ttl=86400)
Command-Line Interface
cftc-cot latest --dataset legacy --market "Crude Oil"
cftc-cot history --dataset legacy --market "Crude Oil" --weeks 52
cftc-cot markets --dataset legacy
cftc-cot index --dataset legacy --market "Crude Oil" --window 156
# Choose output format and enable caching:
cftc-cot --format json --cache memory latest --dataset legacy --market "Gold"
Documentation
For a complete API reference, guides, and dataset specifications, please visit our GitHub Wiki.
License
This project is licensed under the MIT License. See the LICENSE file for details.
Metadata
Release files for cftc-cot-soda 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cftc_cot_soda-0.2.1.tar.gz | 19.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cftc_cot_soda-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.7 kB
Release files / cftc_cot_soda-0.2.1.tar.gz
| Download URL | cftc_cot_soda-0.2.1.tar.gz |
|---|---|
| Size | 19.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3dd9f7c184dfdb25e9183e038f815a2f04ad415692a1e0800c675aebea2e0ee6
|
|
BLAKE2b-256 checksum How to use checksums |
4fdceae00d7cd68cb9bd59aa60a187c14af531db54d91557ebe6e668e44d63b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / cftc_cot_soda-0.2.1-py3-none-any.whl
| Download URL | cftc_cot_soda-0.2.1-py3-none-any.whl |
|---|---|
| Size | 17.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
831ec8d066c5d8619184e873e23cb463a57e328f39f2e624263792beb81821ca
|
|
BLAKE2b-256 checksum How to use checksums |
d4835da51e410ec84f45acf44d1b5c3ba413f4a5a1855aecaf9e302ec0f03760
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|