| Bot | Strategy | Verdict |
|---|---|---|
| Mansour / MansourV2 / MansourTest / EA / EAa | ADX +DI/-DI cross on H4 + H1, "Buy/Sell Double" | Signal plus a martingale hedge. It opens DoubleFactor × net exposure against losing positions |
| EACandel (+ copies) | Same ADX core on M1/M30, price "squares" grid, $2 basket TP | Grid + hedge, StopLoss = 0, M1 signals are mostly noise |
| EAStoc / stoc | D1 + H4 Stochastic cross | Best idea in the folder, but it still uses the double/hedge exits |
| amro / AmroEA | Daily Fibonacci levels, buy/sell on touch | Grid with a TP at the next level and no SL |
| hedge.mq4 | Decompiled third-party "SoloFx" | 3× martingale, 0.01 → 196.83 lots over 10 levels. One trend day wipes the account. Don't run it (licensing issue too) |
Main problem: almost every bot has no stop loss and adds size against losing trades. These systems show a smooth equity curve right up to the day the account is margin-called. Backtests tend to hide this.
- Close loops go forward (
for(i=0;i<OrdersTotal();i++)+OrderClose). Closing shifts the indices, so every second order is skipped and_Close_all()leaves positions open. Loop backwards. - The spread filter removes protection. When spread >
Max_Spread,_Update(OP_BUY,true)removes SL and TP from every order. That happens during news, when you need stops most. - Mixed units in
_Update:(OrderOpenPrice()-Ask) >= TakeProfitcompares a price difference (0.0012) with points (60), so it's never true.(Bid+OrderOpenPrice()) >= TakeProfitis also meaningless. - Break-even math assumes $1 per point per lot (
RealPoint * profit / lots). It's wrong for JPY pairs, gold, indices, and non-USD accounts. UseMODE_TICKVALUE/MODE_TICKSIZE. RealPipPoint()returns a point, not a pip. It's also wrong for 2-digit symbols.TakeProfit=60= 6 pips on a 5-digit broker.- Lots are normalized with
Digits(price digits) instead of lot step. There's no min/max lot or margin check beforeOrderSend. EACandel copy.mq4:intersect_H1_*is overwritten with H4 values (copy-paste),BarH4usesPERIOD_H2, andBarDis never set.order_check2()/Ordering()are never called, so the stochastic logic is dead code.max_q/min_qareboolbut get assigned times.EAStoc:_Buys >= LotSizecompares an order count with a lot size.stoc.mq4reads stochastic at shift 0, which repaints (signals appear and disappear within the bar).hedge.mq4f0_7(): operator precedence means it sums every SELL order on the account, from any symbol or EA.- All EAs share
MagicNumber = 224455. Two EAs on the same symbol manage each other's orders. - No retries on requote/busy, and
OrderSenderrors are logged but never recovered from. FileOpen(FILE_READ|FILE_WRITE)withoutFileSeek(...,SEEK_END)overwrites the old log from the start.SendNotificationfires on every bar, which spams your phone.
A trend-following pullback system. It trades only in the direction of the higher timeframe:
- Trend (H4): close vs EMA200 + EMA slope + DI direction.
- Strength (H1): ADX ≥ 20. It skips chop, which is where your DI-cross bots lost most.
- Entry (H1, closed bar): Stochastic 8-3-3 crosses up out of oversold in an uptrend (mirror for shorts). This keeps your Stochastic idea but only uses it with the trend.
DI_CROSSmode keeps your ADX idea. - Exits: SL 1.5×ATR, TP 3×ATR (1:2), break-even at 1×ATR, ATR trailing stop, close on trend flip.
- Risk: 1% of balance per trade (sized by tick value, so it works on any symbol). It skips the trade if min lot would over-risk. 3% daily loss pause, 15% max-DD kill-switch that survives terminal restarts.
- Hygiene: reverse close loops, 3× retries on requote/busy, stop-level checks, ECN mode, a unique magic per symbol, and a chart panel.
- Data: download M1 history for the pair (Tools → History Center, or Tick Data Suite for real-tick quality). Test on EURUSD, GBPUSD, USDJPY, XAUUSD, H1 chart.
- Tester: "Every tick" model, real spread (not "current"), 2015–2022 = in-sample.
- Judge on: profit factor > 1.3, max DD < 20%, ≥ 150 trades, and a smooth curve without martingale. Ignore net profit alone.
- Optimize little: only
SL_ATR(1–2.5),TP_ATR(2–4),ADXMin(15–30),EntryMode. Pick a plateau of good results, not the single best peak. - Out-of-sample: run the chosen settings unchanged on 2023–2026. If PF drops below ~1.1, the edge isn't real.
- Demo forward test: 2–3 months, then live at 0.25–0.5% risk.
- Retire the martingale/double logic (Mansour*, EACandel, hedge.mq4). If you want to keep a recovery feature, cap it at 2 additions with a hard basket stop in money.
- Always trade with a stop loss. Hedging a loser is still a loss, and you also pay swap and spread on both legs.
- Size by risk %, not fixed lots. 0.5–1% per trade and ≤ 3 correlated positions (EURUSD + GBPUSD long is roughly one trade).
- Stay on H1/H4. On M1/M5, spread and commission eat most retail edges.
- Add a news filter (avoid ±30 min around high-impact events), for example via a calendar CSV or a news indicator.
- Put the code under version control properly. Delete the
copy/copy 2files, keep onehelpers.mqhas an include (.mqh, not.mq4), and commit each strategy change with its backtest report. - Journal every change against a backtest report (save the tester HTML). The existing logs don't tell you why a version was better.
- Consider MQL5/MT5 for new work. It has multi-currency testing, real ticks, and faster optimization. The logic ports directly.
- Possible next strategies to build on the same risk framework:
- Donchian 20/55 breakout (Turtle-style) on H4/D1: robust and simple.
- London-open breakout of the Asian range (EURUSD/GBPUSD).
- RSI(2) mean reversion in a D1 trend (works on indices/gold).