Backtest EURUSD 01/03/2025 - 20/01/2026 Timeframe M5 (ONNX AI training specifically for M5-M15)
Backtest GBPUSD 01/03/2025 - 20/01/2026 Timeframe M5 (ONNX AI training specifically for M5-M15)
1. General Overview
SidewaysMartingale is an Expert Advisor designed to trade sideways (range-bound) markets using a martingale recovery strategy, enhanced with an AI-based trend detector implemented via an ONNX model.
The EA combines:
AI trend classification (Sideway / Bullish / Bearish)
Envelopes indicator for range-based entries
Controlled martingale position scaling
Profit-based basket closing
Margin-based emergency stop
The core idea is:
Trade only when the market is statistically classified as sideways, and avoid adding martingale positions when a strong trend is detected.
2. AI Trend Detector (ONNX Integration)
ONNX Model Output
The ONNX model returns:
A predicted label (not directly used)
A probability vector with three probabilities:
Variable
Meaning
prob_side
Probability that the market is sideways / ranging
prob_bull
Probability that the market is bullish (uptrend)
prob_bear
Probability that the market is bearish (downtrend)
These probabilities are extracted as:
float prob_side = prob_data[0].values[0]; float prob_bull = prob_data[0].values[1]; float prob_bear = prob_data[0].values[2];
3. Feature Engineering (AI Inputs)
The EA feeds 9 engineered features into the ONNX model:
Feature Index
Description
f[0]
EMA200 slope (trend direction & strength)
f[1]
Price distance from EMA200
f[2]
ATR value (volatility)
f[3]
Candle range normalized by ATR
f[4]
Breakout pressure vs previous high
f[5]
Candle body dominance
f[6]
Day of week
f[7]
Hour of day
f[8]
Previous candle direction
These features allow the AI model to detect:
Market volatility
Trend strength
Time-based behavioral patterns
Price structure behavior
4. Sideways Market Detection Logic
A market is considered sideways when:
bool is_sideway = (prob_side >= InpAISidewayThreshold);
Example:
If InpAISidewayThreshold = 0.70
Then at least 70% confidence is required to classify the market as sideways
👉 No new trades are opened unless this condition is met
5. Entry Logic (Scalping in Range)
The EA uses Envelopes to detect range extremes.
Buy Entry
if(price_close <= lower[0] && is_sideway)
Price touches or breaks the lower envelope
AI confirms a sideways market
Opens a BUY position
Sell Entry
else if(price_close >= upper[0] && is_sideway)
Price touches or breaks the upper envelope
AI confirms a sideways market
Opens a SELL position
💡 This ensures trades are taken only at range extremes during non-trending conditions.
6. Martingale Recovery Logic
When positions already exist, the EA applies a distance-based martingale:
New position is opened only if price moves away by a defined pip distance
Lot size increases using a multiplier ( LotMultiplier )
Maximum number of trades is limited ( MaxTradesInSeries )
Distance Check
if(dist >= reqDist)
7. AI Safety Filter for Martingale
This is a critical risk control mechanism.
Before adding a new martingale position, the EA checks:
If current series is BUY
if(s_seriesType == POSITION_TYPE_BUY && prob_bear >= InpAISafetyThreshold) return;
If current series is SELL
if(s_seriesType == POSITION_TYPE_SELL && prob_bull >= InpAISafetyThreshold) return;
🔒 Meaning:
If AI detects a strong opposite trend
And confidence exceeds InpAISafetyThreshold
Martingale expansion is stopped
This prevents:
Martingale during strong breakouts
Deep drawdowns caused by trend continuation
8. Profit Target & Basket Closing
The EA monitors total floating profit across all positions:
if(totalProfitUSD >= TakeProfitTargetUSD)
Once reached:
All positions are closed
Martingale series is reset
EA waits for a new sideways setup
This approach treats all positions as one basket trade.
9. Risk Management
Margin-Based Emergency Stop
if(((bal - eq)/bal)*100.0 >= StopLossByMarginPercent)
If equity drawdown exceeds a defined percentage:
All positions are immediately closed
Prevents margin call scenarios
10. Strategy Summary
Component
Purpose
AI Trend Detector
Classifies market regime
prob_side
Allows trading only in ranges
prob_bull / prob_bear
Blocks martingale during strong trends
Envelopes
Defines range extremes
Martingale
Recovery in sideways markets
Basket TP
Fast exit after mean reversion
Margin SL
Account-level protection