- Overview
- Why
bbstraderStands Out - Trusted by Traders Worldwide
- The
bbstraderEdge: Uniting C++ Speed with Python Flexibility - Key Modules
- Getting Started
- Installation
- CLI workflow
- Community & Support
- Professional Services
Imagine having the raw, blistering speed of C++ for your high-frequency trades, combined with Python's ecosystem for lightning-fast prototyping, advanced AI models, and seamless data analysis. That's bbstrader β not just a library, but a game-changing toolkit designed for quants, algo traders, and institutional pros who demand an edge in volatile markets. Whether you're scalping forex pairs, backtesting complex strategies, or copying trades across accounts in real-time, bbstrader empowers you to build, test, and deploy with unmatched efficiency.
Forget the frustrations of slow Python bottlenecks or MQL5's rigid sandbox. bbstrader bridges worlds: C++ for mission-critical performance and Python for intelligent orchestration. It's open-source, battle-tested across platforms, and ready to supercharge your trading arsenal.
In a crowded field of trading libraries, bbstrader is architected to solve the most challenging problems in algorithmic trading: performance, flexibility, and platform limitations.
- Blazing Speed with C++ Core: Compile your strategy logic in native C++ for deterministic, low-latency execution. Perfect for HFT, arbitrage, or compute-heavy models that Python alone can't handle.
- Python's Powerhouse Ecosystem: Leverage
NumPy,pandas,scikit-learn,TensorFlow, and more for research, ML-driven signals, and backtesting β all seamlessly integrated with your C++ core. - Institutional-Grade Architecture: From its event-driven backtester to its modular design,
bbstraderis built with the principles of professional trading systems in mind, providing a robust foundation for serious strategy development. In today's hyper-fast financial landscape, every microsecond counts.bbstraderisn't another lightweight wrapper β it's an institutional-grade powerhouse engineered to tackle real-world trading challenges head-on. - Break Free from MQL5 Limits: Ditch interpreted code and ecosystem constraints. Build multi-threaded, AI-infused strategies that execute orders in microseconds via MetaTrader 5 (MT5) integration.
Flexible Interface: CLI & GUI
bbstraderadapts to your workflow.- Automation Fanatics: Use the CLI for headless scripts, cron jobs, and server deployments.
- Visual Traders: Launch the Desktop GUI (currently for Copy Trading) to monitor your master and slave accounts, check replication status, and manage connections visually.
- Cross-Platform & Future-Proof: Works on Windows, macOS, Linux. (IBKR integration in development).
With thousands of downloads, bbstrader is trusted by traders worldwide. It's not just code β it's your ticket to profitable, scalable strategies.
bbstrader's hybrid design is its secret weapon. At the heart is a bidirectional C++/Python bridge via client module:
- C++ for Speed: Core classes like
MetaTraderClienthandle high-performance tasks. Inject Python handlers for MT5 interactions, enabling native-speed signal generation and risk checks. - Python for Smarts: Orchestrate everything with modules like
tradingandbtengine. - The Data Flow: The result is a clean, efficient, and powerful execution loop:
Python (Orchestration & Analysis) -> C++ (High-Speed Signal Generation) -> Python (MT5 Communication) -> C++ (Receives Market Data)
This setup crushes performance ceilings: Run ML models in Python, execute trades in C++, and backtest millions of bars in minutes.
MetaTrader 5 is a world-class trading platform, but its native MQL5 language presents significant limitations for complex, high-frequency strategies:
- Performance Ceilings: As an interpreted language, MQL5 struggles with the computationally intensive logic required for advanced statistical models, machine learning, and rapid-fire order execution.
- Ecosystem Constraints: MQL5 lacks access to the vast, mature ecosystems of libraries for numerical computation, data science, and AI that C++ and Python offer.
- Architectural Rigidity: Implementing sophisticated, multi-threaded, or event-driven architectures in MQL5 is often a complex and error-prone endeavor.
bbstrader eradicates these barriers. By moving your core strategy logic to C++, you can unlock the full potential of your trading ideas, executing them with the microsecond-level precision demanded by institutional trading.
bbstrader is modular, with each component laser-focused.
- Purpose: Simulate strategies with historical data, including slippage, commissions, and multi-asset portfolios. Optimizes parameters and computes metrics like Sharpe Ratio, Drawdown, and CAGR.
- Features: Event queue for ticks/orders, vectorized operations for speed, integration with models for signal generation.
- Example: Backtest a StockIndexSTBOTrading from the example strategies.
# Inside the examples/
from strategies import test_strategy
if __name__ == '__main__':
# Run backtesting for Stock Index Short Term Buy Only Strategy
test_strategy(strategy='sistbo')- Purpose: High-speed MT5 integration. C++ MetaTraderClient mirrors MT5 API for orders, rates, and account management.
- Features: Bidirectional callbacks, error handling, real-time tick processing.
- Strategy Patterns: Two main patterns to build strategies:
This is the recommended pattern for latency-sensitive strategies, such as statistical arbitrage, market making, or any strategy where execution speed is a critical component of your edge. By compiling your core logic, you minimize interpretation overhead and gain direct control over memory and execution.
Use this pattern when:
- Your strategy involves complex mathematical calculations that are slow in Python.
- You need to react to market data in the shortest possible time.
- Your production environment demands deterministic, low-latency performance.
C++ Side (MovingAverageStrategy.cpp):
#include "bbstrader/metatrader.hpp"
#include <numeric>
#include <iostream>
class MovingAverageStrategy : public MT5::MetaTraderClient {
public:
using MetaTraderClient::MetaTraderClient;
void on_tick(const std::string& symbol) {
auto rates_opt = copy_rates_from_pos(symbol, 1, 0, 20);
if (!rates_opt || rates_opt->size() < 20) return;
const auto& rates = *rates_opt;
double sum = std::accumulate(rates.begin(), rates.end(), 0.0,
[](double a, const MT5::RateInfo& b) { return a + b.close; });
double sma = sum / rates.size();
double current_price = rates.back().close;
if (current_price > sma) {
std::cout << "Price is above SMA. Sending Buy Order for " << symbol << '\n';
MT5::TradeRequest request;
request.action = MT5::TradeAction::DEAL;
request.symbol = symbol;
request.volume = 0.1;
request.type = MT5::OrderType::BUY;
request.type_filling = MT5::OrderFilling::FOK;
request.type_time = MT5::OrderTime::GTC;
send_order(request);
}
}
};This C++ class would then be exposed to Python using pybind11.
// Inside bindings.cpp
#include <pybind11/pybind11.h>
#include "MovingAverageStrategy.hpp"
namespace py = pybind11;
PYBIND11_MODULE(my_strategies, m){
py::class_<MovingAverageStrategy, MT5::MetaTraderClient>(m, "MovingAverageStrategy")
.def(py::init<MT5::MetaTraderClient::Handlers>())
.def("on_tick", &MovingAverageStrategy::on_tick);
}Python Side (main.py):
from bbstrader.api import Mt5Handlers
import MetaTrader5 as mt5
import time
from my_strategies import MovingAverageStrategy
# 1. Instantiate the C++ strategy, injecting the Python MT5 handlers
strategy = MovingAverageStrategy(Mt5Handlers)
# 2. Main execution loop
if strategy.initialize():
while True:
strategy.on_tick("EURUSD")
time.sleep(1)This pattern is ideal for strategies that benefit from Python's rich ecosystem for data analysis, machine learning, or complex event orchestration, but still require high-performance access to market data and the trading API.
Use this pattern when:
- Your strategy relies heavily on Python libraries like
pandas,scikit-learn, ortensorflow. - Rapid prototyping and iteration are more important than absolute minimum latency.
- Your core logic is more about decision-making based on pre-processed data than it is about raw computation speed.
import MetaTrader5 as mt5
from bbstrader.api import Mt5Handlers
from bbstrader.api.client import MetaTraderClient
# 1. Inherit from the C++ MetaTraderClient in Python
class MyStrategyClient(MetaTraderClient):
def __init__(self, handlers):
super().__init__(handlers)
# 2. Instantiate your client
strategy = MyStrategyClient(Mt5Handlers)
# 3. Interact with the MT5 terminal via the C++ bridge
if strategy.initialize():
rates = strategy.copy_rates_from_pos("EURUSD", mt5.TIMEFRAME_M1, 0, 100)
print(f"Retrieved {len(rates)} rates via the C++ bridge.")- Purpose: Manages live sessions, coordinates signals from strategies, risk from models, and execution via metatrader.
- Features: Multi-account support, position hedging, trailing stops.
- Purpose: Build/test models like NLP sentiment, VaR/CVaR risk, optimization.
- Features: Currently Sentiment analysis, and Topic Modeling.
- Example: Sentiment-Based Entry:
from bbstrader.models import SentimenSentimentAnalyzer
model = SentimenSentimentAnalyzer() # Loads pre-trained NLP
score = model.analyze_sentiment("Fed hikes rates β markets soar!")
if score > 0.7: # Bullish? Buy!
print("Go long!")core: Utilities (data structs, logging).
config: Manages JSON configs in ~/.bbstrader/.
api: Handler injections for bridges.
- Python: Python 3.12+ is required.
- MetaTrader 5 (MT5): Required for live execution (Windows).
- MT5 Broker: Admirals, JustMarkets, FTMO.
bbstrader is designed for both Python and C++ developers. Follow the instructions that best suit your needs.
Get started in minutes using pip. We strongly recommend using a virtual environment.
# Create and activate a virtual environment
python -m venv venv
source venv/bin/activate # on Linux/macOS
venv\Scripts\activate # on Windows
# Install bbstrader
pip install bbstrader[MT5] # Windows
pip install bbstrader # Linux/macOSTo develop your own C++ strategies, you can use vcpkg to install the bbstrader library and its dependencies.
# If you don't have vcpkg, clone and bootstrap it
git clone https://github.com/microsoft/vcpkg
./vcpkg/bootstrap-vcpkg.sh or ./vcpkg/bootstrap-vcpkg.bat
# Install bbstrader
./vcpkg/vcpkg install bbstraderbbstrader shines via CLI β launch everything from one command!
| Action | Command |
|---|---|
| Run Backtest | python -m bbstrader --run backtest --strategy SMAStrategy --account MY_ACCOUNT --config backtest.json |
| Live Execution | python -m bbstrader --run execution --strategy KalmanFilter --account MY_ACCOUNT --config execution.json --parallel |
| Copy Trades | python -m bbstrader --run copier --source "S1" --destination "D1" |
| Get Help | python -m bbstrader --help |
Config Example (~/.bbstrader/execution/execution.json):
{
"SMAStrategy": {
"MY_MT5_ACCOUNT_1": {
"symbol_list": ["EURUSD", "GBPUSD"],
"trades_kwargs": { "magic": 12345, "comment": "SMA_Live" },
"short_window": 20,
"long_window": 50
}
}
}- Read the Docs: Full API reference and tutorials.
- GitHub Issues: Report bugs or request features.
- LinkedIn: Connect with the creator.
If you need a custom trading strategy, a proprietary risk model, advanced data pipelines, or a dedicated copy trading server setup, professional services are available.
Contact the Developer:
π§ bertin@bbs-trading.com
If you find this project useful and would like to support its continued development, you can contribute here:
Disclaimer: Trading involves significant risk. bbstrader provides the tools, but you provide the strategy. Test thoroughly on demo accounts before deploying real capital.

