Skip to main content

Trading infrastructure library with backtesting

Project description

CI Build PyPI Version

tradedesk

Contributing: CONTRIBUTING.md

tradedesk is an event-driven trading framework for building, running, and evaluating systematic trading strategies across both backtesting and live broker environments.

It provides:

  • Event-based strategy execution
  • Unified backtest and live broker runtime model
  • Market data aggregation and indicator framework
  • Portfolio orchestration and risk management
  • Trade recording, metrics, and reporting

The framework is designed so that strategies react to events --- not broker implementations --- enabling the same strategy code to run unchanged in both backtest and live environments.

Core Concepts

Event-Driven Architecture

All major subsystems communicate via events:

  • Market data events (ticks, candles)
  • Strategy events (signals)
  • Execution events (orders, fills)
  • Portfolio events (position updates)
  • Recording events (trade lifecycle)

As a user, you primarily:

  • Implement a strategy that reacts to candle updates
  • Optionally subscribe to events for custom analytics or logging

Architecture Overview

For a concise public map of the system, see ARCHITECTURE.md. tradedesk is built around an event-driven core that wires together market data, strategy logic, portfolio management, execution adapters (IG for live trading, Dukascopy-backed backtests), and a recording layer for metrics and reports. The public interfaces expose reusable building blocks (marketdata, strategy, portfolio, recording) with clear data-flow guarantees across backtest and live paths.

Basic Strategy Structure

A strategy derives from the base strategy class and implements candle handling logic.

Typical flow:

  1. Market data arrives (tick or candle)
  2. Aggregation produces candles
  3. Strategy receives on_candle_close
  4. Strategy emits order requests
  5. Execution layer processes orders
  6. Portfolio updates positions
  7. Recording captures trade lifecycle

Running a Backtest

Backtesting uses the same event model as live trading.

High-level flow:

  • Dukascopy cache data is loaded via BacktestClient.from_dukascopy_cache(...)
  • run_backtest(...) drives the event loop and recording pipeline
  • Strategy code executes unchanged
  • Portfolio and recording operate identically to live mode

See docs/backtesting_guide.md for the current cache-backed workflow.

Live Trading (IG)

The IG execution module provides:

  • REST client for order management
  • Streaming price integration
  • Position synchronization
  • Retry and resilience handling

Your strategy remains unchanged --- only the execution configuration differs.

IG Credentials

Live IG runs read credentials from environment variables:

  • IG_API_KEY (required)
  • IG_USERNAME (required)
  • IG_PASSWORD (required)
  • IG_ENVIRONMENT (optional, defaults to DEMO, valid values are DEMO and LIVE)

Example:

IG_API_KEY=... \
IG_USERNAME=... \
IG_PASSWORD=... \
IG_ENVIRONMENT=DEMO \
python your_live_runner.py

tradedesk authenticates with IG and captures the short-lived session headers (CST and X-SECURITY-TOKEN) from the login response automatically. You do not configure those session tokens yourself.

Portfolio & Risk

The portfolio subsystem:

  • Tracks positions
  • Applies risk policies
  • Reconciles fills
  • Emits portfolio events

Risk controls such as spread limits and portfolio-level order gates can reject orders before broker submission.

Recording & Reporting

The recording subsystem:

  • Tracks trades and equity curves
  • Computes excursions and performance metrics
  • Generates structured reports

Users can subscribe to recording events for custom reporting pipelines.

Typical Project Structure

my_strategy/
    strategy.py
    run_backtest.py
    config.py

Installation

Python 3.11+ is required.

Install the published package:

pip install tradedesk

For local development:

pip install -e '.[dev]'

Documentation

See the docs/ directory for:

  • Backtesting guide
  • Strategy guide
  • Portfolio guide
  • Indicator guide
  • Aggregation guide
  • Risk management guide
  • Metrics guide

Public package entry points are grouped under:

  • tradedesk.marketdata
  • tradedesk.execution
  • tradedesk.execution.backtest
  • tradedesk.portfolio
  • tradedesk.recording
  • tradedesk.strategy

tradedesk is designed for clarity, determinism, and event-level transparency.

See Also

  • docs/backtesting_guide.md
  • docs/strategy_guide.md
  • docs/indicator_guide.md
  • docs/crash-recovery.md

Contributing

See CONTRIBUTING.md for guidelines on contributing to tradedesk.

License

Licensed under the Apache License, Version 2.0. See: https://www.apache.org/licenses/LICENSE-2.0

Copyright 2026 Radius Red Ltd. | Contact

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tradedesk-0.10.0.tar.gz (462.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tradedesk-0.10.0-py3-none-any.whl (128.0 kB view details)

Uploaded Python 3

File details

Details for the file tradedesk-0.10.0.tar.gz.

File metadata

  • Download URL: tradedesk-0.10.0.tar.gz
  • Upload date:
  • Size: 462.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tradedesk-0.10.0.tar.gz
Algorithm Hash digest
SHA256 f0ee8fe01a4f54e43383c03a170d448a1ede86cf26a2538373780af7bcac262b
MD5 219e19960997a3c9f515f86d86ce5bf9
BLAKE2b-256 4d0f1439686244c4badb2340d080420418c8d8f646ebf10d76012dee6c467c86

See more details on using hashes here.

Provenance

The following attestation bundles were made for tradedesk-0.10.0.tar.gz:

Publisher: publish.yml on radiusred/tradedesk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tradedesk-0.10.0-py3-none-any.whl.

File metadata

  • Download URL: tradedesk-0.10.0-py3-none-any.whl
  • Upload date:
  • Size: 128.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tradedesk-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ee88661ca6ea65e025405521dc3a12b4573001f02e6ae319fcf3ad5a8bdcdba3
MD5 28917f8bbc92f2f70093b0f74d554ea5
BLAKE2b-256 b6917661ccf6312e9dfaf838940d3f82aab9f8106836fc6ebbfb66999f976db1

See more details on using hashes here.

Provenance

The following attestation bundles were made for tradedesk-0.10.0-py3-none-any.whl:

Publisher: publish.yml on radiusred/tradedesk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page