tradedesk
tradedesk is an event-driven trading framework for building, running, and
evaluating systematic strategies across backtesting and live broker
environments.
What it provides
- Event-driven strategy execution
- Shared strategy model across backtest and live runs
- Market data aggregation and indicators
- External market datasets and parsers
- Portfolio orchestration and risk controls
- Trade recording, metrics, and reporting
- Research helpers for walk-forward validation and correlation checks
- Optional machine-learning helpers in
tradedesk.ml
The design goal is portability: strategies react to framework events rather than broker-specific implementations, so the same strategy code can move between backtest and live execution with minimal runtime wiring changes.
Installation
Python 3.11+ is required.
Install the published package:
pip install tradedesk
Install the optional machine-learning dependencies:
pip install 'tradedesk[ml]'
For local development:
pip install -e '.[dev]'
Architecture at a glance
The public package is organized into a small set of domains:
tradedesk.marketdatafor market events, subscriptions, aggregation, and indicatorstradedesk.data_sourcesfor external datasets such as CFTC COT historytradedesk.strategyfor strategy base classes and strategy-facing eventstradedesk.portfoliofor portfolio state, sizing, and risk policiestradedesk.executionfor live execution adapters and order handlingtradedesk.execution.backtestfor simulated execution and replaytradedesk.recordingfor lifecycle events, trade records, and metricstradedesk.researchfor walk-forward and correlation-gate helperstradedesk.mlfor optional feature engineering, labels, and walk-forward tooling
For a broader system map, see docs/architecture.md.
Runtime model
Typical flow:
- Market data arrives as ticks or candles.
- Aggregation updates candle streams.
- Strategies react in callbacks such as
on_price_update(...)oron_candle_close(...). - Strategies request orders through the execution layer.
- Portfolio and execution components apply gates, place or simulate orders, and emit lifecycle events.
- Recording subscribers capture fills, positions, equity, and metrics.
Backtesting
Backtests use the same event model as live sessions.
BacktestClient.from_dukascopy_cache(...)loads Dukascopy-backed historyrun_backtest(...)runs the event loop and recording pipeline- Strategy, portfolio, and recording components behave the same way they do in live sessions
See docs/backtesting_guide.md for the current cache-backed workflow.
Live trading with IG
The IG integration provides REST-backed order execution, price streaming, and position synchronisation while keeping strategy code unchanged.
Live runs use these environment variables:
IG_API_KEYIG_USERNAMEIG_PASSWORDIG_ENVIRONMENT(DEMOby default, orLIVE)IG_ACCOUNT_IDfor strategies that create tick-levelMarketSubscriptionitems
Example:
IG_API_KEY=... \
IG_USERNAME=... \
IG_PASSWORD=... \
IG_ENVIRONMENT=DEMO \
IG_ACCOUNT_ID=... \
python your_live_runner.py
tradedesk handles the short-lived IG session headers (CST and
X-SECURITY-TOKEN) during authentication. They are not configured manually.
When live sessions request historical candles from IG, account-level historical-data limits are surfaced as a dedicated failure mode so embedding runtimes can back off or alert explicitly.
Machine learning support
tradedesk.ml is optional and installs behind the [ml] extra. It provides:
- Feature engineering over OHLC(V) and optional bid/ask data
- Label generation helpers
- Walk-forward cross-validation utilities
- Model wrappers and strategy integration points
See docs/ml_guide.md for the ML overview and docs/ml_labels_guide.md for label-specific details.
External data sources
tradedesk.data_sources exposes loaders and parsers for datasets that sit
outside the live IG / Dukascopy execution paths.
Three free, no-auth macro feeds are supported:
- FRED — US rates (DFF, DGS3MO/2/10, T10Y2Y) and VIX from the St. Louis Fed
- ECB — EUR €STR, AAA government yield curve (3M–10Y) and Euribor from the ECB Data Portal
- CFTC COT — Commitment-of-Traders positioning for metals, energy, indices, 10Y notes and CME EUR/JPY/GBP currency futures, including the TFF dealer, asset-manager and leveraged-funds buckets
Series are materialized to a Parquet lake under the existing market-data root
and loaded uniformly via load_macro_series / load_macro_frame:
from tradedesk.data_sources import load_macro_series, load_macro_frame
rates = load_macro_frame("FRED", ["DGS2", "DGS10", "VIXCLS"])
estr = load_macro_series("ECB", "EUR_ESTR")
eur_cot = load_macro_series("CFTC", "EURUSD")
A python -m tradedesk.data_sources.ingest CLI refreshes the lake on demand or
on a weekly cron (idempotent; per-series failures are non-fatal).
See docs/data_sources_guide.md for the full series
catalogue, the look-ahead semantics for CFTC release dates, and the lower-level
CFTC COT API (CFTC_CONTRACTS, load_contract_history, download_cot_zip,
iter_cot_rows, cot_release_date).
Documentation
Start with:
- docs/strategy_guide.md
- docs/backtesting_guide.md
- docs/portfolio_guide.md
- docs/risk_management.md
- docs/indicator_guide.md
- docs/aggregation_guide.md
- docs/metrics_guide.md
- docs/settings.md
- docs/operational_resilience.md
- docs/crash-recovery.md
- docs/data_sources_guide.md
- docs/ml_guide.md
Contributing
See CONTRIBUTING.md for development setup, quality gates, and PR expectations.
License
Licensed under the Apache License, Version 2.0. See: https://www.apache.org/licenses/LICENSE-2.0
Copyright 2026 Radius Red Ltd. | Contact
Metadata
Release files for tradedesk 1.6.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tradedesk-1.6.3.tar.gz | 816.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tradedesk-1.6.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.0 MB
Release files / tradedesk-1.6.3.tar.gz
| Download URL | tradedesk-1.6.3.tar.gz |
|---|---|
| Size | 816.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e45220b42cbe9b779bfcce6779f500cf0ad1aed5d800686a407e3bcff6a337c6
|
|
BLAKE2b-256 checksum How to use checksums |
90dcbe4c124c43c7f2296fa934453e27a4f5f9487fab755ebc7c018d51b1e64f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 11, 2026.
Transparency logRelease files / tradedesk-1.6.3-py3-none-any.whl
| Download URL | tradedesk-1.6.3-py3-none-any.whl |
|---|---|
| Size | 228.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ea8ddcc0df8dfb5f26ee2dd79cfa5e3973f15b2d90333112c850a089e943958e
|
|
BLAKE2b-256 checksum How to use checksums |
d8e255fba66a106baac34f20f437e0923b952725e05201c3eff6b67a093443dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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 Jun 11, 2026.
Transparency log