ExpPricePosition
This Expert Advisor trades based on a multi-indicator confluence system combining PricePosition and StepUpDown indicators across multiple timeframes. It uses SMMA/SMA moving average crossovers and price position relative to signal lines to generate buy/sell signals, with dynamic lot sizing, trailing stops, and opposite-signal closing capabilities.
Open the interactive view (equity curve, symbol switch)Key facts
Backtest results (H1, about 1 year)
| Symbol | P&L | Annual | Max DD | Trades | Win rate | Sharpe | Recovery | Losing streak | Per trade | Status |
|---|---|---|---|---|---|---|---|---|---|---|
| EURUSD | -4.34% | -3.79% | 5.35% | 144 | 47.60% | -0.84 | -0.81 | 4 | −$3.27 | Reliable |
| GBPUSD | -5.61% | -4.89% | 8.36% | 144 | 46.20% | -0.88 | -0.67 | 7 | −$4.09 | Reliable |
| USDJPY | -7.28% | -6.36% | 10.22% | 144 | 46.90% | -1.34 | -0.71 | 7 | −$4.98 | Reliable |
| XAUUSD | -17.25% | -14.48% | 65.05% | 152 | 47.70% | -0.15 | -0.27 | 5 | −$9.78 | Reliable |
Profitable on 0 of 4 markets with reliable results.
Converted from MQL5 to Python and run with the same rules for every EA. Positions use MT5 lot sizes (100,000 units per FX lot, 100 oz per gold lot) with 1:100 leverage, one order at a time, and a stop-out below 10% of the starting balance. Sharpe is computed from the equity curve. Results marked as unreliable are shown for completeness only.
Against the other Multi-Timeframe EAs with a reliable result on the same market: EURUSD: better than 0% of 11 · GBPUSD: better than 8% of 12 · USDJPY: better than 0% of 12 · XAUUSD: better than 33% of 12
Month by month
| Market | Months with a gain | Best month | Worst month |
|---|---|---|---|
| EURUSD | 38% | +1.03% 2026-07 | -1.47% 2026-08 |
| GBPUSD | 15% | +2.02% 2026-07 | -1.82% 2026-08 |
| USDJPY | 46% | +2.18% 2026-09 | -3.52% 2025-12 |
| XAUUSD | 54% | +35.92% 2026-01 | -23.24% 2026-06 |
From the backtest equity curve, sampled about every two days; only reliable results.
Blow-up risk: No blow-up pattern found
None of the usual blow-up patterns were found in the code, and the account was not stopped out in our backtests. That is not a guarantee: any EA can lose money.
High: stopped out in our backtest, or martingale/grid sizing without a stop loss. Elevated: martingale or grid sizing with a stop loss, or several positions at once without a stop loss. What the label means and what we found →
Strategy analysis
The strategy concept is based on a dual-confirmation mechanism using the PricePosition indicator for price direction and the StepUpDown indicator for trend direction. Entry conditions require multiple confluences: PricePosition direction alignment (1 or -1), StepUpDown trend agreement, current candle being bullish (for buy) or bearish (for sell), price pulling back to the fast SMMA line, fast MA direction confirmation, and multi-timeframe momentum comparison (pwr0 > pwr1). Exit conditions include: trailing stop activation, closing on opposite signal (CloseByOppositeSignal), and profitable closing when StepUpDown direction reverses. Position sizing supports both fixed lot and dynamic lot modes, where the dynamic mode calculates lot size based on account balance and risk percentage, distributed across open positions. Money management calculates stop loss based on risk percentage and tick value, with take profit set as a multiple (TPvsSLRatio, default 3x) of the stop loss, and a minimum 38-pip stop loss distance as protection.
Strengths
- Multi-indicator multi-timeframe confluence entry provides strong false signal filtering with strict entry conditions
- Supports dynamic position sizing based on account balance and risk percentage, keeping risk controlled
- Dual exit mechanism with trailing stop and opposite signal closing provides solid profit protection
Weaknesses
- Severe memory leak: CTrade, CSymbolInfo, CPositionInfo, CAccountInfo objects are created with 'new' in OnTimer every minute but never deleted
- Uses timer-driven trading (OnTimer) instead of tick-driven (OnTick), potentially missing fast market opportunities
- The pwr calculation compares daily close with hourly close but doesn't account for gaps or cross-session discontinuities
- CheckOpenPosition calls PositionSelect before iterating PositionsTotal, which may cause logical inconsistency
Possible improvements
- Fix memory leak: move CTrade and other object creation to OnInit or add proper delete calls; best to use global objects initialized once
- Migrate trading logic from OnTimer to OnTick with new bar detection to ensure timely response to market changes
- Add spread filter to avoid opening positions during high spread periods; add maximum position limit to prevent over-concentration on a single symbol
Risk assessment
Overall risk: Medium
- Memory leak may cause EA crash or platform slowdown during extended runtime
- Timer-driven trading (checking every minute) is slow to respond in volatile markets, potentially increasing slippage
- Default trailing stop of only 10 pips may be too tight for volatile instruments, causing premature stops
- Hardcoded minimum 38-pip stop loss in CalculatePips may not suit all trading instruments
Evaluation scores
Parameters
| Parameter | Default | Description |
|---|---|---|
TimeFrames | PERIOD_H1 | EA operating timeframe |
RiskPercentage | 3.0 | Risk percentage per trade |
TPvsSLRatio | 3.0 | Take-profit to stop-loss multiplier ratio |
MoneyManagementType | DynamicLotSize | Money management type: fixed or dynamic lots |
TradeLotSize | 0.1 | Lot size in fixed lot mode |
CloseByOppositeSignal | Yes | Close position on opposite signal |
UseTrailingStop | Yes | Enable trailing stop |
Trailing_FixedPipsSL | 10 | Trailing stop value in points |
Magic | 1234 | EA magic number (max 8 digits) |
Similar Multi-Timeframe EAs
Backtests are historical simulations and do not guarantee future results. Not financial advice.