Skip to main content

TradeTide logo

Badge

Status

Python versions

Python

Documentation

Documentation Status

Continuous integration

Unittest Status

Test coverage

Unittest coverage

Google Colab

Google Colab

PyPI package

PyPI version

PyPI downloads

PyPI downloads

Anaconda package

Anaconda version

Anaconda downloads

Anaconda downloads

Latest Anaconda release

Latest release date

TradeTide

TradeTide is a Python/C++ package for researching and backtesting foreign-exchange trading strategies. It includes bundled historical samples, technical indicators, position management, and portfolio simulation.

Features

  • Bundled historical samples for five major FX pairs.

  • Technical indicators including Bollinger Bands, moving-average crossings, RMI, RSI, and MACD.

  • Composable all_of, any_of, and weighted signal rules.

  • Backtesting with configurable exit and capital-management strategies.

Installation

TradeTide is available from PyPI and Anaconda:

pip install TradeTide
conda install TradeTide --channel MartinPdeS

Verify the installation with the Python interpreter used for backtests:

python -c "import TradeTide; print(TradeTide.__version__)"

Released wheels are the easiest option. Building from source requires CMake, a C++20 compiler, pybind11, and OpenMP.

Graphical workspace

Launch the local strategy lab in your browser:

TradeTide

After updating a source checkout, reinstall with pip install -e . to register the command. You can also use python -m TradeTide.gui or the tradetide-gui alias. The GUI runs locally and needs no additional dependencies, accounts, or internet access. The home page offers editable mean-reversion, trend-following, and momentum templates, plus recent experiments. The keyboard-accessible navigation separates Market data, Strategy, Results, Orders & trades, Compare, and Research. Navigation preserves your draft and completed runs; a successful backtest opens the Results tab.

Market data

Choose the bundled currency pair and historical sample independently from the strategy configuration. Samples are available from 1 to 180 days, with one-click presets for 1 day, 15 days, 1 month, 3 months, and 6 months. The 1-year option is visible but disabled until longer bundled market data is available.

TradeTide Market data tab with currency pair, sample duration, and common duration presets

Strategy and saved configurations

Build a stack of up to eight independently configured Bollinger Bands, moving-average crossings, RSI, RMI, and MACD indicators. Enable or disable each indicator and combine its entry events using unanimous agreement, any non-conflicting agreement, or weighted voting with a configurable threshold.

Tune fixed position size, concurrent positions, capital at risk, fixed, trailing, or break-even exits, commission, slippage, and additional spread. Use Load strategy in the Strategy tab to replace the current draft with a saved configuration. Save strategy at the bottom of the tab opens a name dialog and stores a reusable strategy in the local browser library.

TradeTide Strategy tab with indicator and risk configuration panels

Analysis and research

Inspect equity, drawdown, market entry markers, individual indicator curves, simulated entry requests (executed or skipped), and a searchable trade ledger with costs and position sizes. Open any trade to see its cost breakdown and highlight its entry and exit on the market chart. Filter trades by side or outcome, sort by P&L, and export the filtered ledger as CSV. Chart range sliders and keyboard inspection make individual periods easier to examine.

Compare any two completed runs to inspect metric changes and exact parameter differences. Normalized equity curves are overlaid only for matching markets and observation times; metric comparisons remain available for different samples. The Research tab ranks every retained experiment by return, risk, or Sharpe ratio, overlays matching normalized equity curves, and exports a standalone HTML experiment report.

Drafts and up to 20 named strategies are saved locally. The last 30 runs are stored in the browser and restored after a refresh, using the same browser profile and server address/port. Import strategy JSON or the settings from an exported run; undo restores the replaced draft. Export JSON to keep portable copies independent of browser storage. Ctrl+Enter or Cmd+Enter runs the current draft from any workspace tab.

Samples begin at each dataset’s first observation. The selected duration is calendar time and may include market closures; displayed dates show the actual simulation period. During each run, the workspace reports genuine progress through data loading, indicator calculation, signal combination, portfolio simulation, and performance reporting. Bollinger, moving-average, and RMI windows use minutes; RSI and MACD windows use bars. Signal rules combine entry events on the same bar, not persistent indicator regions. Simulated entries use the native engine’s bid/ask closing prices. Skipped requests reflect portfolio constraints or the end of the sample; they are not broker orders. Costs adjust reported equity and P&L after simulation, without changing position sizing. Editing settings leaves the previous result visible until a new run succeeds. The Results tab identifies when the current draft differs from the selected run.

Use python -m TradeTide.gui --port 8766 --no-browser to choose a port or open the displayed URL yourself. Stop the server with Ctrl+C. The server binds only to 127.0.0.1 and is intended for a local research session.

First backtest

Load the bundled EUR/USD sample, add an indicator to a strategy, and run a backtest:

from TradeTide import Backtester, BacktestResult, Currency, Market, Strategy
from TradeTide import capital_management, exit_strategy
from TradeTide.indicators import BollingerBands
from TradeTide.times import days, minutes

market = Market()
market.load_from_database(Currency.EUR, Currency.USD, time_span=3 * days)

strategy = Strategy()
strategy.add_indicator(BollingerBands(window=30 * minutes, multiplier=2.0))

backtester = Backtester(
    strategy=strategy,
    market=market,
    exit_strategy=exit_strategy.Static(stop_loss=4, take_profit=4),
    capital_management=capital_management.FixedLot(
        capital=100_000,
        fixed_lot_size=10_000,
        max_capital_at_risk=10_000,
        max_concurrent_positions=1,
    ),
)
backtester.run()
result = BacktestResult.from_portfolio(backtester.portfolio)
result.plot_equity_drawdown()

Bundled datasets are EUR/USD, GBP/USD, CHF/USD, JPY/USD, and CAD/USD. time_span accepts a timedelta or a positive duration string such as "2d 6h".

Testing

For local development, install the development extra and run the suite:

git clone https://github.com/MartinPdeS/TradeTide.git
cd TradeTide
pip install -e '.[dev]'
pytest

Contributing

See CONTRIBUTING.md for the native-build requirements, formatting checks, and pull-request guidelines.

Contact

For questions or contributions, contact martin.poinsinet.de.sivry@gmail.com.

Metadata

Release files for TradeTide 1.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for TradeTide 1.1.6
File
tradetide-1.1.6-cp314-cp314-win_amd64.whl CPython 3.14 CPython 3.14 Windows x86-64 Details
tradetide-1.1.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
tradetide-1.1.6-cp314-cp314-macosx_26_0_arm64.whl CPython 3.14 CPython 3.14 macOS 26.0+ ARM64 Details
tradetide-1.1.6-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
tradetide-1.1.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
tradetide-1.1.6-cp313-cp313-macosx_26_0_arm64.whl CPython 3.13 CPython 3.13 macOS 26.0+ ARM64 Details
tradetide-1.1.6-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
tradetide-1.1.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
tradetide-1.1.6-cp312-cp312-macosx_26_0_arm64.whl CPython 3.12 CPython 3.12 macOS 26.0+ ARM64 Details
tradetide-1.1.6-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
tradetide-1.1.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
tradetide-1.1.6-cp311-cp311-macosx_26_0_arm64.whl CPython 3.11 CPython 3.11 macOS 26.0+ ARM64 Details

Total release size: 181.0 MB

Release files / tradetide-1.1.6-cp314-cp314-win_amd64.whl

Download URL tradetide-1.1.6-cp314-cp314-win_amd64.whl
Size 19.3 MB
Tags CPython 3.14 Windows x86-64
SHA-256 checksum
How to use checksums
2649143357f28da4c85cb327c6e7fa362cb32394df7f3c1a9ffca8f0d0ce6cbe
BLAKE2b-256 checksum
How to use checksums
e47c8aab0a323e596cec909d361501614892abbc9c19ee84cbaa42f77442ed42
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL tradetide-1.1.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 12.7 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
87aa64657fee2765c50c6de701523e6bee275e763ac2ccf5859ca719bcb26cbe
BLAKE2b-256 checksum
How to use checksums
a37b5601b981bdfd732fb2c15b74d1fa83dfa5d303ebc69e06b56d671d25501d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp314-cp314-macosx_26_0_arm64.whl

Download URL tradetide-1.1.6-cp314-cp314-macosx_26_0_arm64.whl
Size 13.7 MB
Tags CPython 3.14 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
ca73527575c29ada5f1131b16a0ed9751ec798fb924a6175542805ba40035046
BLAKE2b-256 checksum
How to use checksums
210fbe0b840434a1a349c822e06dc2ecd7bd6453b42036e909b26df862612a57
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp313-cp313-win_amd64.whl

Download URL tradetide-1.1.6-cp313-cp313-win_amd64.whl
Size 18.7 MB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
cf7e10fee59e196a1b162324fa846aa8a488743c808933ea8d9d4a820baf00b6
BLAKE2b-256 checksum
How to use checksums
8ac53918bd930415446004ded462c6c8dee9b804a12023540ba278b50e61ae56
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL tradetide-1.1.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 12.7 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
51a621b3a2c50baa70a31fe6a52fcae55cd340f1a8aa1d54a15dd01a6e3c8063
BLAKE2b-256 checksum
How to use checksums
29a802c880901c7632ea605d489fe96b925f943459f8623446a6b892da4d66b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp313-cp313-macosx_26_0_arm64.whl

Download URL tradetide-1.1.6-cp313-cp313-macosx_26_0_arm64.whl
Size 13.7 MB
Tags CPython 3.13 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
0729346cd5dae3691e6e60e69001d34bcd6859e250d88b7b77daacd707eda1d4
BLAKE2b-256 checksum
How to use checksums
46b755d1b9759308fa272066a284b3e8d845bad1cff94b240d3680f1c7ef76eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp312-cp312-win_amd64.whl

Download URL tradetide-1.1.6-cp312-cp312-win_amd64.whl
Size 18.7 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
495a556577773ee79ce54b6ad771151f3fad246da5a9aa7f5eeb0d3983172a57
BLAKE2b-256 checksum
How to use checksums
fa47e993976a067dd071c10e998ca9f97793efb8a4bed39b316962a00abde5ac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL tradetide-1.1.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 12.7 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
1c148a01b6c80b00e08c3eb36c52aa09f3db2c11f0d731e54e2ccd17379ff790
BLAKE2b-256 checksum
How to use checksums
89a45cdc43cf2f0acb952619d79b36b9acf2ea3e2cc6e3501ba8863338e8323e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp312-cp312-macosx_26_0_arm64.whl

Download URL tradetide-1.1.6-cp312-cp312-macosx_26_0_arm64.whl
Size 13.7 MB
Tags CPython 3.12 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
ad05db616abd4c52518b28be90fbcb28163d0665c853e65bc28f7fe0dd2b2d2a
BLAKE2b-256 checksum
How to use checksums
6f03b0a3f74a00a8a1d2c2a0e20aebcab8a1f889eacb29d24de2c5fbf308e1a0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp311-cp311-win_amd64.whl

Download URL tradetide-1.1.6-cp311-cp311-win_amd64.whl
Size 18.7 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
6ec266e2d8a801ba6fbb149fe25c1aa77a61777dafacfde09c336fd79d93e748
BLAKE2b-256 checksum
How to use checksums
bfa08ebf906a257bf606d12954c59e602f11afec027808b4821de5123ae56f29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL tradetide-1.1.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 12.7 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f39b10f56d53a7c7b10e43c5554f7663ddad3d322d1e926c989fd6c5d70f63e5
BLAKE2b-256 checksum
How to use checksums
ab45416aff2367dc91fcf1dc32be21d08e80205ad607df23e0cdd8394c4ac944
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / tradetide-1.1.6-cp311-cp311-macosx_26_0_arm64.whl

Download URL tradetide-1.1.6-cp311-cp311-macosx_26_0_arm64.whl
Size 13.7 MB
Tags CPython 3.11 macOS 26.0+ ARM64
SHA-256 checksum
How to use checksums
bc5097db780a6093518480a916d7bb2fc2a961e0bdee476509de5e334209bc2f
BLAKE2b-256 checksum
How to use checksums
ae6cba8efa1e294e38bfc20d9d02a7490103ae4e97fb12bab9d3f664d7a511e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release history Release notifications | RSS feed

1.1.7

12 release files

This release

1.1.6 This release

12 release files

1.1.2

12 release files

1.1.1

12 release files

1.1.0

12 release files

1.0.0

9 release files

0.3.0

9 release files

0.2.6

9 release files

0.2.5

9 release files

0.2.4

9 release files

0.2.3

9 release files

0.2.2

9 release files

0.2.1

9 release files

0.2.0

9 release files

0.1.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page