Strategies
3MAF by geraked (faithful port): Triple-EMA 60/350/600 Stack + Williams-Fractal Pullback Entry, Breakeven-Activated 50% Trailing Stop, 1.5x Martingale Grid (20 levels) with Basket TP and 40% Basket Trail, No Hard Stop, Long-Short (ETHUSDT.BYBIT 15m)
Outcome: Abandoned
ThreeMAFGridEthBybit
Outcome Summary
ThreeMAFGridEthBybit ported the 3MAF expert advisor (triple-EMA trend stack, fractal pullback entries, trailing stop and a 1.5x martingale grid with no hard stop) from USDCAD 15M to Bybit ETH perpetuals. It went through 3 iterations; according to the code header, iteration 2 shipped a placeholder string instead of code, and iteration 3 resubmitted the full source. That version then ran past the 300s Layer 3 sandbox backtest limit on a 208-day, ~20,000-bar window, and the pipeline abandoned it as a verification loop. No backtest, optimization, analyst or risk review ever ran, so the strategy's edge is still untested.
Hypothesis
Iteration 3 fixes the Layer-1 'invalid decimal literal at line 1' error. The previous submission's code field held a placeholder string pointing at the outbox file, not Python source. This submission carries the same strategy logic in full (it parses cleanly), so nothing else changed. Translation notes: the MT5 60s timer runs once per closed 15m bar. Trail and grid levels rest as venue stop/MIT orders so intrabar touches fill. MinSL of 100 points on USDCAD is mapped to 0.074% of price. The MA method is EMA seeded on the first close. News, spread and equity-DD filters are off in the source and are omitted. All basket state is scalar attributes on self. Caveat: a no-hard-stop 1.5x martingale can take very large drawdowns; the backtest decides.
verification_loop: sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (208 days of ETHUSDT.BYBIT-15-MINUTE-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Implementation
Faithful port of geraked's 3MAF v1.5 on ETHUSDT.BYBIT 15m. The entry needs an EMA 60/350/600 stack plus a Williams-fractal pullback into the MA1-MA3 zone. There is no hard stop or TP on the first lot. Once past breakeven, the first lot trails at 50% of the initial SL distance d. A 1.5x martingale grid adds a lot every d against the position, up to 20 lots. The basket TP is the price where basket profit equals V0*d plus fees, and a basket trail activates at 40% of that target. Total basket notional is capped at equity*0.95*leverage.
Verification Results
sandbox_timeout: Verification failed (Layer 3 — sandbox backtest): smoke test exceeded the 300s wall-clock limit on a ~20000-bar window (208 days of ETHUSDT.BYBIT-15-MINUTE-LAST-EXTERNAL). This almost always means per-bar work that scales with history — e.g. rescanning the full funding/supplementary series, or rebuilding a list and calling min()/sorted() inside calculate_signal()/on_bar() on every bar. Precompute sorted timestamp arrays ONCE in __init__ and use bisect, or cache lookups keyed by timestamp, so per-bar cost is O(log n) not O(n).
Iteration History
Verification failed (leverage_set_but_unused): config sets leverage=10.0 but the strategy never references leverage in sizing. Size positions on it — notional = equity * fraction * leverage / price (read self.config.leverage) — or set leverage=1.0. As written the leverage is inert and the backtest is identical to 1x.
Verification failed (Layer 1 — static analysis): - Syntax error: invalid decimal literal (<unknown>, line 1) (line 1)
Outcome Summary
A grid or martingale port that manages resting stop and limit orders on every bar must keep its per-bar work bounded and fast enough to clear the 300s sandbox on ~20k bars. A code submission also needs to be checked so it contains real source, since iteration 2 shipped a placeholder string.
The run was abandoned in a verification loop. Its Layer 3 sandbox smoke test ran past the 300s wall-clock limit on a ~20,000-bar window (208 days of ETHUSDT.BYBIT 15m), so it never reached backtest review, the analyst or the risk officer.
A faithful port of geraked's MIT-licensed MQL5 EA '3MAF' v1.5 to ETHUSDT.BYBIT 15m perps: it enters long or short on Williams-fractal pullbacks inside a stacked EMA 60/350/600 trend, has no hard stop, and manages the position with a breakeven-activated 50% trailing stop plus a 1.5x martingale grid of up to 20 levels with a basket take-profit and a 40% basket trail, capped by 10x leverage.
No performance figures exist: the backtest report is empty and optimization never ran, so there are no return, Sharpe or trade-count numbers.
Analysis
3MAF
Backtest and paper results are hypothetical. Trading involves risk of loss.