TuyulGAP
This EA implements a weekend gap trading strategy by placing Buy Stop and Sell Stop pending orders at the highest high and lowest low of the last N bars on Friday evening. It targets the Monday opening gap breakout and closes positions when a fixed USD profit target is reached, resetting all pending orders on Monday.
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 strategy concept is based on the Weekend Gap phenomenon, placing Buy Stop and Sell Stop pending orders before Friday close at the highest high and lowest low of the last LookbackBars bars, expecting a Monday opening breakout. Entry conditions trigger on Friday at the specified time (default 23:00-23:15), finding the highest high plus one point as the Buy Stop price and the lowest low minus one point as the Sell Stop price. Exit conditions close positions when profit reaches the SecureProfitTarget (default $5 USD), with a fixed stop loss (default 60 points) and no take profit set. Position sizing uses a fixed lot size (LotSize=0.1), allowing only one order per direction, though MaxOpenTrade parameter is declared but never actually enforced in code. Money management only includes a margin check, lacking drawdown control or proportional position sizing, and the stop loss is fixed without any dynamic adjustment mechanism.
Strengths
- Clear strategy logic based on the weekend gap phenomenon which has statistical backing in forex markets
- Uses pending orders (Buy Stop/Sell Stop) instead of market orders, avoiding slippage and only filling on breakout
- Includes margin check and stop loss, providing basic risk control
- Session flag prevents duplicate order placement, and Monday auto-cleanup removes stale pending orders
- Lot size normalization properly handles minimum lot, lot step, and maximum lot constraints
Weaknesses
- MaxOpenTrade parameter is declared but never enforced in code, failing to limit concurrent positions
- Sell Stop orders have no stop loss set (SL=0 for SELL), creating a critical one-sided risk exposure
- Fixed 60-point stop loss ignores market volatility (ATR), making it poorly adaptive across pairs and timeframes
- No take profit set (TP=0), relying solely on the USD profit target which may let large gains reverse
- No spread filter - Friday close and Monday open spreads can be extremely wide causing unfavorable fills
- Hardcoded lowest_low initial value of 999999.9 is inelegant and could theoretically fail in extreme scenarios
Possible improvements
- Implement actual MaxOpenTrade enforcement logic and check current position count before placing orders
- Add stop loss calculation for Sell Stop orders, ensuring symmetric risk management with Buy Stop
- Introduce ATR-based dynamic stop loss instead of fixed points, and add spread filter conditions
- Add maximum drawdown limit and balance-proportional dynamic position sizing
- Add a timeout mechanism for Monday gap orders to cancel unfilled pending orders after a set period
Risk assessment
Overall risk: Caution
- Sell Stop orders have no stop loss, potentially causing unlimited losses if Monday gaps in the opposite direction
- Friday close and Monday open spreads can be extremely wide, causing fills at unfavorable prices
- No maximum drawdown protection or dynamic position sizing, making consecutive losses uncontrolled
- MaxOpenTrade parameter is not enforced, potentially leading to more positions than expected
- Fixed stop loss may be too tight (triggered by noise) or too wide (excessive loss) across different volatility environments
Evaluation scores
Parameters
| Parameter | Default | Description |
|---|---|---|
MagicNumber | 6062 | Order magic number to identify this EA's orders |
LotSize | 0.1 | Lot size per trade |
StopLoss | 60 | Stop loss in pips per order |
MaxOpenTrade | 1 | Maximum positions |
LookbackBars | 12 | Number of bars to look back for high/low search |
DayOfWeek | 5 | Order placement day (5=Friday) |
Hours | 23 | Order placement hour |
Minutes | 15 | Order placement minute window |
SecureProfitTarget | 5.0 | Profit target in USD, auto-close on reach |
Similar Breakout EAs
Backtests are historical simulations and do not guarantee future results. Not financial advice.