Date: Oct 27, 2026, Version: 1.1.20

Badge |
Status |
|---|---|
Python versions |
|
Documentation |
|
Continuous integration |
|
Test coverage |
|
Google Colab |
|
PyPI package |
|
PyPI downloads |
|
Anaconda package |
|
Anaconda downloads |
|
Latest Anaconda release |
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.
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.
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.