RingSystemEA v4.0
A multi-currency ring hedging EA that creates triangular currency pair groups from 3-8 currencies, generating up to 56 ring combinations. It opens simultaneous buy/sell positions across each ring's three pairs (Plus and Minus suites) to exploit temporary pricing imbalances, with configurable step progression, lot progression, and basket/single close logic.
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: High
- Opens a grid of orders at fixed price steps
- Has no stop loss or trailing stop
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 is triangular arbitrage/ring hedging: from user-specified currencies it generates all 3-currency combinations (rings), each containing 3 currency pairs. For each ring it simultaneously opens a 'Plus suite' (Buy/Sell/Buy) and a 'Minus suite' (Sell/Buy/Sell), essentially hedging exchange rate relationship deviations across the three pairs. Entry involves initial positions, then adding positions when floating loss reaches a configured step threshold (supporting static, geometric, and exponential step progression). Exit supports both single-ticket and basket-ticket profit closing, with optional loss closing. Position sizing supports manual lot, auto lot (based on risk factor), fair lot distribution, and static/geometric/exponential/decreasing lot progression. Money management includes maximum lot limits, maximum order limits, spread filtering, trading session control, and slippage control.
Strengths
- Multi-currency ring hedging design theoretically hedges directional risk of individual pairs, reducing unilateral exposure
- Supports flexible 3-8 currency configuration with up to 56 ring groups for broad combination coverage
- Rich position sizing and money management options (step progression, lot progression, auto lot, fair lot sizing)
- Multi-layer risk protection including order limit, spread filter, session control, and slippage control
- Plus/Minus dual suite design allows users to choose one-directional or bi-directional hedging flexibly
Weaknesses
- Loss-adding mechanism (step-based position increase) is essentially a grid/martingale strategy that can blow accounts in extreme markets
- Default no stop-loss (TypeCloseInLoss=Not_Close_In_Loss) allows unlimited floating loss expansion
- Operating up to 56 groups × 3 pairs × 2 directions = 336 positions simultaneously demands extremely high margin and spread costs
- Massive global variables and hardcoded arrays (MaxGroups=57) make code poorly maintainable and error-prone
- Lacks true arbitrage logic—no indicator detecting pricing deviation among three pairs; entry timing relies entirely on step-based adding rather than market signals
Possible improvements
- Introduce triangular arbitrage pricing deviation indicator (e.g., synthetic vs actual rate difference) as entry signal instead of pure loss-based adding
- Enforce mandatory stop-loss or maximum floating loss limit to prevent account blow-up in extreme markets
- Refactor global variables into structs/classes to reduce naming collision risk and improve readability/maintainability
Risk assessment
Overall risk: Dangerous
- Loss-adding (grid/martingale style) can cause exponential position growth and account blow-up in trending markets
- Default no stop-loss means unlimited floating loss exposure with no cap protection
- Simultaneously managing up to 336 positions consumes enormous margin and may trigger margin calls
- Ring hedging fails when extreme correlation breakdowns (e.g., flash crashes) cause all three pairs to lose simultaneously
Evaluation scores
Parameters
| Parameter | Default | Description |
|---|---|---|
TypeOfOperation | Normal_Operation | Operation mode: Standby/Normal/Stop after profit close/Close all immediately |
TimerInMillisecond | 1000 | Timer event interval (milliseconds) |
CurrenciesTrade | EUR/GBP/USD | Currency list for pair construction (3-8, separated by /) |
NoOfGroupToSkip | 57,58,59,60 | Ring group numbers to skip (comma-separated) |
SideOpenOrders | Open_Plus_And_Minus | Open direction: Long only/Short only/Both |
OpenOrdersInLoss | Open_With_Manual_Step | Loss add-on mode: No add/Manual step/Auto step |
StepOpenNextOrders | 200.0 | Next add-on step value (amount or lots) |
StepOrdersProgress | Statical_Step | Step progression type: Static/Geometric/Exponential |
MinutesForNextOrder | 60 | Minimum interval between add-on orders (minutes) |
MaximumGroups | 0 | Max simultaneous open ring groups (0=unlimited) |
TypeCloseInProfit | Single_Ticket | Profit close type: Per-order/Basket |
TargetCloseProfit | 200.0 | Profit close target value |
DelayCloseProfit | 1 | Profit close delay (ticks) |
TypeCloseInLoss | Not_Close_In_Loss | Loss close type: Full/Partial/No loss close |
TargetCloseLoss | 1000.0 | Loss close target value |
DelayCloseLoss | 1 | Loss close delay (ticks) |
AutoLotSize | false | Enable auto lot size |
RiskFactor | 1.0 | Auto lot risk factor |
ManualLotSize | 0.01 | Manual lot size |
LotOrdersProgress | Statical_Lot | Lot progression type: Static/Geometric/Exponential/Decreasing |
UseFairLotSize | false | Use fair lot size per pair |
MaximumLotSize | 0.0 | Maximum lot size limit (0=unlimited) |
ControlSession | false | Enable trading session control |
WaitAfterOpen | 60 | Wait time after Monday open (minutes) |
StopBeforeClose | 60 | Stop time before Friday close (minutes) |
MaxSpread | 0.0 | Maximum acceptable spread (0=no check) |
MaximumOrders | 0 | Maximum total open orders (0=unlimited) |
MaxSlippage | 3 | Maximum acceptable slippage |
SymbolPrefix | NONE | Symbol name prefix |
SymbolSuffix | AUTO | Symbol name suffix (AUTO=auto-detect) |
MagicNumber | 0 | Magic number to filter orders, 0 for all |
CheckOrders | true | Check all orders |
PrintLogReport | false | Print log report |
Similar Hedging EAs
Backtests are historical simulations and do not guarantee future results. Not financial advice.