Arrows and Curves EA
This EA uses a custom indicator called 'arrows_curves' based on a reversal period (SSP) with channel and shift parameters to generate buy/sell signals. It operates on new bar formation, opening positions when no existing positions are present, and closing opposing positions or applying trailing stops when already in a position. The strategy is a reversal-based system with configurable stop loss, take profit, and trailing stop management.
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 | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | Not convertible yet |
| GBPUSD | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | Not convertible yet |
| USDJPY | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | Not convertible yet |
| XAUUSD | 0.00% | 0.00% | 0.00% | 0 | — | — | — | — | — | Not convertible yet |
Why this EA never traded: no entry rule survived the conversion.
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.
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 core strategy of this EA is a mean reversion trading system based on reversal signals, using the custom indicator 'arrows_curves' to detect price reversal points. Entry conditions: open a buy when indicator buffer 0 at index 1 is non-zero, open a sell when indicator buffer 1 at index 1 is non-zero. Exit conditions include fixed stop loss and take profit, a trailing stop mechanism, and closing opposing positions when a reverse signal appears. Position sizing supports either fixed lots or dynamic lot calculation based on a risk percentage using the CMoneyFixedMargin class. Money management uses a risk percentage to calculate position size from free margin, and validates lot size via CheckVolume before order submission. The EA only executes trading logic on new bar formation, avoiding over-trading issues from tick-by-tick execution.
Strengths
- Uses new bar filter to avoid tick-by-tick over-trading and reduce noise
- Complete SL/TP and trailing stop functionality with a reasonably sound risk management system
- Supports both fixed lot and risk-percentage position sizing modes for flexibility
- Validates lot size and margin before order submission, reducing trade failure risk from insufficient funds
- Uses magic number to identify own positions, supporting multiple EAs running simultaneously
Weaknesses
- Depends on external custom indicator 'arrows_curves'; EA completely fails if the indicator file is missing
- Symmetric SL/TP configuration (both 50 pips), not accounting for market volatility asymmetry
- Trailing stop is disabled by default (InpTrailingStop=0), lacking dynamic protection in default config
- When already in a position, only closes on opposite signal; no independent time-based or loss-threshold exit mechanism
- ClosePositions uses Symbol() instead of m_symbol.Name(), inconsistent with other functions, potentially causing issues in multi-symbol operation
Possible improvements
- Fix Symbol() to m_symbol.Name() in ClosePositions for consistency in multi-symbol operation
- Add maximum position duration or max-loss-threshold exit mechanism to prevent prolonged losing positions
- Add spread filter to avoid opening positions when spread is excessively wide, especially important for reversal strategies
Risk assessment
Overall risk: Medium
- Dependency on external custom indicator; missing indicator causes OnInit to return INIT_FAILED, preventing EA startup
- Symmetric SL/TP may not suit all market conditions; stop loss could be too tight in high-volatility environments
- Symbol() vs m_symbol.Name() inconsistency bug in ClosePositions may cause close failures in multi-symbol setups
- No maximum position count limit; CalculateAllPositions only distinguishes 0 vs non-zero, potentially allowing multiple same-direction positions
Evaluation scores
Parameters
| Parameter | Default | Description |
|---|---|---|
InpLots | 0.1 | Fixed lots (if <=0, uses risk percentage) |
InpStopLoss | 50 | stop losspoints (0meansdisable) |
InpTakeProfit | 50 | take profitpoints (0meansdisable) |
InpTrailingStop | 0 | trailing stoppoints (0meansdisable) |
InpTrailingStep | 5 | Trailing step in points (0 disables trailing stop) |
Risk | 5 | Risk percentage per trade of free margin |
SSP | 20 | Reversal period |
Channel | 0 | Channel parameter |
Ch_Stop | 30 | Stop loss channel parameter |
relay | 10 | Offset value |
Similar Mean Reversion EAs
Backtests are historical simulations and do not guarantee future results. Not financial advice.