An advanced SuperTrend trading bot for MetaTrader 5 that leverages Machine Learning (K-means clustering) for dynamic parameter optimization, featuring adaptive risk management and comprehensive performance monitoring.
⚠️ DISCLAIMER: This project is for EDUCATIONAL PURPOSES ONLY. Trading forex/CFDs involves substantial risk of loss and is not suitable for all investors. Past performance is not indicative of future results.
- 🧠 ML-Optimized SuperTrend: Dynamic factor selection using K-means clustering
- 📊 Multi-Factor Analysis: Tests multiple ATR factors simultaneously
- 🎯 Volatility-Adjusted Performance: Adapts to market conditions
- 📈 Adaptive Moving Average: Performance-weighted signal filtering
- 💰 Dynamic Position Sizing: Based on account risk percentage
- 🛡️ Trailing Stop Loss: Protects profits in trending markets
- 🎯 Automated TP/SL: ATR-based take profit and stop loss levels
- ⚡ Daily Loss Limits: Prevents excessive drawdown
- 📊 Volume Confirmation: Filters low-quality signals
- 🕐 Session Management: Trade during optimal market hours
- 📰 News Filter Ready: Framework for economic event filtering
- 🔄 Multi-Symbol Support: Trade multiple pairs simultaneously
- 📈 Real-time Performance Dashboard: Live statistics display
- 📊 Comprehensive Backtesting: Historical performance analysis
- 📉 Equity Curve Visualization: Track your growth
- 🎯 Win Rate Analytics: Hourly and daily performance breakdown
- Installation
- Quick Start
- Configuration
- Architecture
- Usage Examples
- Performance Metrics
- Troubleshooting
- Contributing
- License
- Python 3.8 or higher
- MetaTrader 5 Terminal
- Windows OS (required for MT5 Python API)
- Active MT5 demo or live account
pip install ml-supertrend-mt5For developers, contributors, and advanced users who want the latest features:
git clone https://github.com/xPOURY4/ML-SuperTrend-MT5.git
cd ML-SuperTrend-MT5# Windows
python -m venv venv
venv\Scripts\activate
# macOS/Linux (MT5 API only works on Windows)
python -m venv venv
source venv/bin/activatepip install -r requirements.txtpip install -e .TA-Lib requires special installation:
Windows:
- Download the appropriate .whl file from here
- Install:
pip install TA_Lib‑0.4.24‑cp38‑cp38‑win_amd64.whl
Alternative (if above doesn't work):
conda install -c conda-forge ta-libTest your installation:
# Command line interface
ml-supertrend --help
# Python import test
python -c "from ml_supertrend_mt5 import SuperTrendBot; print('✅ Installation successful!')"| Feature | PyPI Installation | GitHub Installation |
|---|---|---|
| Target Users | End users, traders | Developers, contributors |
| Installation | pip install ml-supertrend-mt5 |
git clone + pip install -e . |
| Updates | pip install --upgrade ml-supertrend-mt5 |
git pull |
| Stability | ✅ Stable releases only | |
| Command Line | ✅ ml-supertrend command |
✅ python run_bot.py |
| Import Style | from ml_supertrend_mt5 import ... |
from core.supertrend_bot import ... |
| Customization | ✅ Full source code access | |
| Contributing | ❌ Not applicable | ✅ Can submit PRs |
| Size | 📦 Smaller download | 📁 Full repository |
Recommendation:
- Use PyPI if you want to use the bot as-is for trading
- Use GitHub if you want to modify, contribute, or need latest features
# Install the package
pip install ml-supertrend-mt5
# Run with default settings
ml-supertrend --symbol EURUSD --account demo
# Run with custom parameters
ml-supertrend --symbol GBPUSD --account live --interval 60 --dry-runCreate a config.json file with your MT5 credentials:
{
"accounts": {
"demo": {
"login": YOUR_DEMO_LOGIN,
"password": "YOUR_DEMO_PASSWORD",
"server": "YOUR_BROKER_SERVER"
},
"live": {
"login": YOUR_LIVE_LOGIN,
"password": "YOUR_LIVE_PASSWORD",
"server": "YOUR_BROKER_SERVER"
}
},
"symbols": {
"EURUSD": {
"enabled": true,
"timeframe": "M30",
"min_factor": 1.0,
"max_factor": 5.0,
"factor_step": 0.5,
"cluster_choice": "Best",
"volume_multiplier": 1.2,
"sl_multiplier": 2.0,
"tp_multiplier": 3.0,
"risk_percent": 1.0
}
},
"global_settings": {
"atr_period": 10,
"performance_alpha": 10.0,
"volume_ma_period": 20,
"use_trailing_stop": true,
"trail_activation_atr": 1.5,
"max_positions_per_symbol": 1
}
}from ml_supertrend_mt5 import SuperTrendBot, Config
import MetaTrader5 as mt5
# Initialize configuration
config = Config(
symbol="EURUSD",
timeframe=mt5.TIMEFRAME_M30,
risk_percent=1.0,
cluster_choice="Average" # "Best", "Average", or "Worst"
)
# Create and run bot
bot = SuperTrendBot(config)
bot.connect(login=YOUR_LOGIN, password="YOUR_PASSWORD", server="YOUR_SERVER")
bot.run(interval_seconds=30)# For developers using GitHub installation
from core.supertrend_bot import SuperTrendBot, Config
from core.performance_monitor import PerformanceMonitor
# Same usage as aboveml-supertrend [OPTIONS]
Options:
--account [demo|live] Account type to use (default: demo)
--symbol TEXT Trading symbol (default: EURUSD)
--config TEXT Configuration file path (default: config.json)
--interval INTEGER Update interval in seconds (default: 30)
--dry-run Run in simulation mode without placing real trades
--backtest Run backtest instead of live trading
--monitor Show performance monitor after running
--log-level [DEBUG|INFO|WARNING|ERROR] Logging level (default: INFO)
--help Show this message and exit
Examples:
ml-supertrend --symbol GBPUSD --account demo --interval 60
ml-supertrend --symbol EURUSD --account live --dry-run --log-level DEBUG
ml-supertrend --backtest --symbol USDJPY --monitor| Parameter | Default | Description |
|---|---|---|
symbol |
EURUSD | Trading pair |
timeframe |
M30 | Chart timeframe |
atr_period |
10 | ATR calculation period |
min_factor |
1.0 | Minimum ATR multiplier |
max_factor |
5.0 | Maximum ATR multiplier |
factor_step |
0.5 | Factor increment step |
| Parameter | Default | Description |
|---|---|---|
risk_percent |
1.0 | Risk per trade (% of account) |
sl_multiplier |
2.0 | Stop loss ATR multiplier |
tp_multiplier |
3.0 | Take profit ATR multiplier |
use_trailing |
True | Enable trailing stop |
trail_activation |
1.5 | Trailing stop activation (ATR) |
config = Config(
# Clustering
cluster_choice="Best", # Use best performing cluster
perf_alpha=10.0, # Performance EMA period
# Volume Filter
volume_ma_period=20, # Volume MA period
volume_multiplier=1.2, # Volume threshold
# Position Management
max_positions=1, # Max positions per symbol
magic_number=123456 # Unique identifier
)ML-SuperTrend-MT5/
│
├── core/
│ ├── supertrend_bot.py # Main bot logic
│ ├── risk_manager.py # Risk management module
│ ├── performance_monitor.py # Analytics and reporting
│ └── news_filter.py # Economic calendar integration
│
├── strategies/
│ ├── supertrend_ml.py # ML-enhanced SuperTrend
│ └── clustering.py # K-means implementation
│
├── utils/
│ ├── mt5_helpers.py # MT5 utility functions
│ ├── indicators.py # Technical indicators
│ └── data_handler.py # Data processing
│
├── config/
│ ├── config.json # Bot configuration
│ └── symbols.json # Symbol-specific settings
│
├── logs/
│ └── supertrend_bot.log # Runtime logs
│
├── reports/
│ └── performance_*.png # Performance charts
│
├── tests/
│ └── test_strategy.py # Unit tests
│
├── backtest_engine.py # Backtesting system
├── run_bot.py # Main entry point
├── requirements.txt # Dependencies
└── README.md # This file
# Terminal 1
ml-supertrend --symbol EURUSD --account demo --interval 30
# Terminal 2
ml-supertrend --symbol GBPUSD --account demo --interval 30
# Terminal 3
ml-supertrend --symbol USDJPY --account demo --interval 30from ml_supertrend_mt5 import SuperTrendBot, Config
import MetaTrader5 as mt5
symbols = ["EURUSD", "GBPUSD", "USDJPY"]
bots = []
for symbol in symbols:
config = Config(
symbol=symbol,
timeframe=mt5.TIMEFRAME_M30,
risk_percent=0.5 # Lower risk for multiple pairs
)
bot = SuperTrendBot(config)
bot.connect(login, password, server)
bots.append(bot)
# Run all bots
import threading
for bot in bots:
thread = threading.Thread(target=bot.run)
thread.start()# Conservative approach
ml-supertrend --symbol EURUSD --account demo --dry-run
# Aggressive approach
ml-supertrend --symbol EURUSD --account demo --interval 15from ml_supertrend_mt5 import SuperTrendBot, Config
# Conservative approach
conservative_config = Config(
cluster_choice="Worst", # Use worst performing cluster
risk_percent=0.5, # Lower risk
sl_multiplier=3.0, # Wider stop loss
tp_multiplier=2.0 # Closer take profit
)
# Aggressive approach
aggressive_config = Config(
cluster_choice="Best", # Use best performing cluster
risk_percent=2.0, # Higher risk
sl_multiplier=1.5, # Tighter stop loss
tp_multiplier=4.0 # Further take profit
)# Run with performance monitoring
ml-supertrend --symbol EURUSD --account demo --monitor
# View performance after running
ml-supertrend --monitorfrom ml_supertrend_mt5 import PerformanceMonitor
# Generate performance report
monitor = PerformanceMonitor('trades.json')
monitor.generate_report(days=30) # Last 30 days
# Get specific metrics
stats = bot.calculate_statistics()
print(f"Win Rate: {stats['win_rate']:.2f}%")
print(f"Profit Factor: {stats['profit_factor']:.2f}")
print(f"Total Trades: {stats['total_trades']}")| Timeframe | Win Rate | Profit Factor | Max Drawdown | Sharpe Ratio |
|---|---|---|---|---|
| M5 | 48-52% | 1.1-1.3 | 15-20% | 0.8-1.0 |
| M15 | 52-57% | 1.2-1.5 | 12-18% | 1.0-1.3 |
| M30 | 55-60% | 1.3-1.7 | 10-15% | 1.2-1.5 |
| H1 | 58-63% | 1.5-2.0 | 8-12% | 1.5-1.8 |
| H4 | 60-65% | 1.7-2.5 | 5-10% | 1.8-2.2 |
- Average Trade Duration: 2-6 hours
- Risk/Reward Ratio: 1:1.5 average
- Monthly Return: 5-15% (varies by market conditions)
- Recovery Factor: 2.5-3.5
# Check MT5 terminal is running
# Verify credentials
# Ensure "Algo Trading" is enabled in MT5# Increase lookback period
# Check volume filter settings
# Verify symbol is active/market is open# Reduce risk_percent
# Use "Average" or "Worst" cluster
# Enable daily loss limits# Run with debug logging
ml-supertrend --symbol EURUSD --account demo --log-level DEBUG
# Dry run mode for testing
ml-supertrend --symbol EURUSD --account demo --dry-run# Enable detailed logging
import logging
logging.basicConfig(level=logging.DEBUG)
# Run bot with debug
bot.run(interval_seconds=30, debug=True)We welcome contributions! Please see our Contributing Guidelines.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- SuperTrend indicator concept by Olivier Seban
- K-means clustering implementation inspired by scikit-learn
- MetaTrader 5 Python API by MetaQuotes
Pourya - @TheRealPourya
Project Link: https://github.com/xPOURY4/ML-SuperTrend-MT5
Made with ❤️ by xPOURY4