Pipsgrowth EX18012 TrendFollow
MT5 Expert Advisor (Open Source) · XAUUSD · M5, H1
Pipsgrowth.com EX18012 GenFiltered_XAUUSD_5M — regime-gated multi-filter consensus, full 12-layer stack.
Overview
Pipsgrowth EX18012 TrendFollow is a closed-bar consensus EA for XAUUSD and FX majors that opens a position only when three independent trend components agree on direction and an ATR(14)-based regime says the market is actually moving. The header bills it as a 'regime-gated multi-filter consensus' EA and the code is laid out as 12 explicit layers (REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester), with each layer wrapped in its own function. The signal layer is intentionally simpler than the 4-vote stack used in EX18011: it is a 3-vote consensus that can be turned into a 1-vote or 2-vote consensus by toggling the InpUseEMA, InpUseRSI, and InpUseATRRise booleans in the Signal Filters group.
The vote tally is collected in ComputeSignal(). With all three filters enabled, a long requires the close of the previous bar to sit above EMA(21) on the working timeframe, RSI(14) to read above 50, and the current bar's ATR(14) to be at least 1.05 times the prior bar's ATR(14). A short is the mirror: close below EMA(21), EMA(21) below EMA(50), RSI(14) below 50, and a rising ATR. Any single filter can be disabled, in which case the remaining two filters must still agree and the vote count adjusts (votesBuy / votes). If no filter produces a clear direction the function returns 0 and OnTick() exits without sending an order. The ATR-rise vote is a distinctive EX18012 feature — it filters out signals that appear during volatility compression, which is precisely when mean-reversion traps cost the most money.
Regime is computed in ComputeRegime() using three indicator inputs: ADX(14) main plus DI+ and DI-, the last 50 ATR(14) values (the ATR_PCT_LOOKBACK rank), and a Bollinger Bands (period 20, deviation 2.0) width read as (bbU - bbL) / bbM. The classifier returns one of seven states: REG_STRONG_TREND when ADX is at or above 25, REG_WEAK_TREND when ADX is at or above 20, REG_EXPAND when the ATR percentile exceeds 80, REG_COMPRESS when the ATR percentile is below 30, REG_BREAKOUT when BB width is meaningful and the ATR percentile is above 50, REG_CHOPPY when ADX is below 15, and REG_RANGE otherwise. The state is written to g_regime and consulted by both CanTrade() (which blocks entries in CHOPPY and COMPRESS) and ManagePositions() (which closes open positions when the regime flips to CHOPPY or RANGE, when InpRegimeExit is true). This is the EX18012 anti-chop gate: the consensus signal may agree, but a quiet market will still block the entry.
Confirmation runs in Confirm() after the no-trade gate has passed. With InpUseHTF = true the EA pulls the H1 EMA(50) from the hHTFEMA handle and demands that the working-timeframe bid (for longs) or ask (for shorts) sit on the correct side of that EMA. With InpUseCandleClose = true it pulls the previous bar's open and close arrays and requires a bullish close for a long (close above open) or a bearish close for a short. The function returns false with a reason string such as 'HTF EMA opposes BUY' or 'last bar not bullish' so the journal always shows why an entry was skipped. There is no RSI band confirmation in EX18012 — that is a deliberate simplification relative to EX18011, traded for the ATR-rise vote.
Stop loss and take profit are ATR-multiples derived from the same ATR(14) the regime uses, so the stop distance scales with current volatility. SL = SL_ATR_MULT * ATR = 2.0 * ATR(14) and TP = TP_ATR_MULT * ATR = 3.0 * ATR(14). The fixed ratio is 1:1.5, which is the EX18012 signature. A MIN_RR_RATIO = 1.2 guard in OpenMarket() re-checks the projected reward-to-risk at the moment of execution and drops the order if the live spread has eaten into the TP so far that the ratio collapses. Both distances are also floored by StopsLevelPrice(), which reads the broker's SYMBOL_TRADE_STOPS_LEVEL and SYMBOL_TRADE_FREEZE_LEVEL and clamps the stops to the larger of the two so the order is never rejected by the trade server.
Lot sizing is fixed-fractional off g_effectiveCap, the EA's notion of capital. EffectiveCapital() returns min(InpCapAmount, equity) when InpCapAmount > 0, otherwise the full account equity. CalcLotByRisk() then takes 0.5% of that capital by default (InpRiskPercent = 0.5), divides by the per-lot loss at the projected SL distance, and passes the result through NormLot() which snaps it to the broker's LotsStep, clamps it to LotsMin and LotsMax, and rounds to 2 decimals. A InpFixedLot = 0.01 fallback fires when risk is set to zero, when the SL distance is zero, or when the per-lot math is degenerate. The capital cap is also guarded by InpCapFloor = 50 — CanTrade() returns false with the reason 'CAPITAL BELOW FLOOR' if effective capital is below that level.
The no-trade gate in CanTrade() is a checklist of nine checks: kill switch, broker trade mode (must be FULL, LONGONLY, or SHORTONLY), spread cap (live spread must be at or below InpMaxSpreadPts = 250 points), session window (server hours 7 through 20 inclusive, weekdays only), regime (CHOPPY and COMPRESS block), capital floor, daily loss (3% of effective capital, computed via TodayRealizedPnL() which sums profit + swap + commission for this magic and this symbol since midnight server time), max concurrent (InpMaxConcurrent = 3), max symbol exposure (InpMaxSymbolExp = 3), and cooldown (TrackLossCooldown() raises g_cooldownUntil to now + 12 bars after 3 consecutive losing closes). Note that EX18012 uses a fixed 250-point spread cap rather than a rolling-average spread filter, and there is no news-window block in this EA — the 12:30±30 minute pause that EX18011 enforces is not present here. There is also no weekly loss cap, only a daily one.
Open positions are managed every tick by ManagePositions(), which walks the position list backwards and applies four protections in sequence. First, when profit reaches 1R (one ATR-distance), the break-even function moves the stop to entry + spread for a long or to entry for a short, but only on a one-shot basis and only if the new stop is still strictly improving the existing one. Second, at the same 1R profit mark, a 50% partial close (PARTIAL_PCT = 50) fires once per ticket, with the partial volume computed as vol * 0.50 and snapped to the broker's volume step — PartialAlreadyTaken() is a static array that remembers which tickets have already taken their partial. Third, once profit clears 1R, an ATR trailing stop activates: it places the new stop at 2.5 * ATR(14) behind the current bid (or ahead of the ask for shorts), and only ever ratchets in the profitable direction. Fourth, two time-based and regime-based safety nets run: a MAX_BARS_IN_TRADE = 240 bar time exit (which corresponds to 20 hours on M5) closes positions that have not moved, and a regime-flip exit closes positions when g_regime becomes CHOPPY or RANGE, if InpRegimeExit is true. A fifth, an opposite-signal exit closes the position when ComputeSignal() returns the opposite direction — this is the only time ComputeSignal() runs in the management loop, and it runs on every tick.
Pyramiding is wired into CanPyramid() and OpenMarket() but is disabled by default (InpEnablePyramid = false). When enabled, the EA may add up to PYRAMID_MAX = 5 same-direction positions on the same symbol-magic, with each new entry spaced at PYRAMID_ATR_SP = 2.0 * ATR(14) from the most recent same-direction entry, and only when that most recent position is already in profit by the same distance. This is a more permissive pyramiding policy than EX18011's 3-level/1.5xATR setup, but it is opt-in. The InpDryRun = true default means the EA prints DRYRUN BUY/SELL/MODIFY/CLOSE/PARTIAL lines to the journal in place of any real order sends, which is the safest way to validate the configuration on a new broker. Lot sizing, regime classification, and signal logic all run identically in dry-run; only the order sends are stubbed.
Order sends are wrapped in a 2-attempt retry loop in OpenMarket(). The first attempt fires via trade.Buy() or trade.Sell(); if the retcode is REQUOTE, TIMEOUT, or PRICE_OFF, the EA refreshes the symbol and retries once with the new bid/ask. Closer and modifier operations have their own 3-attempt retry wrappers (TryClose_EX18012, TryClosePartial_EX18012, TryModify_EX18012) with 200ms or 100ms sleeps between attempts depending on the retcode. The filling mode is auto-detected from SYMBOL_TRADE_EXEMODE and SYMBOL_FILLING_MODE in OnInit() so the EA works on both FOK and IOC brokers without manual configuration.
OnTester() returns (netProfit * profitFactor) / (1 + balanceDDpct), with a 30-trade floor and a 0.01 drawdown clamp to prevent division by zero or by tiny-drawdown blowups. The fitness function favours strategies that earn high net profit with high profit factor per unit of balance drawdown, which is the standard PipsGrowth TrendFollow metric.
The expected behaviour on a 5-minute XAUUSD chart with the default inputs: a quiet Asia session is read as CHOPPY (ADX below 15) or COMPRESS (ATR percentile below 30), and entries are blocked; once London opens and ADX clears 20, the EA will start considering the 3-vote consensus; the ATR-rise filter then cuts the entry rate further by demanding that volatility is currently expanding. The 240-bar time exit forces a close after 20 hours regardless of profit, which is the EA's release valve against positions that sit through entire regime transitions. The minimum recommended balance is $100, the risk-per-trade default of 0.5% is sized to that floor, and InpDryRun = true should remain on for the first 24-48 hours of any new symbol. The signature combination for EX18012 — 3-vote consensus with an ATR-rise filter, 6-state regime with 240-bar time exit, 2xATR SL/3xATR TP at 1:1.5, and 250-point fixed spread cap — is what distinguishes this EA from EX18011's 4-vote + 1:2 stack and from EX18010's dual-Hull consensus.
Strategy Deep Dive
Each tick the EA refreshes the symbol, updates g_effectiveCap from EffectiveCapital(), and walks the position list backwards via ManagePositions() to apply the break-even, 50% partial, ATR trail, 240-bar time exit, regime-flip exit, and opposite-signal exit. TrackLossCooldown() inspects the deal history since the last tick to bump the consecutive-loss counter and raise g_cooldownUntil after three losses. On a new bar of the configured timeframe, ComputeRegime() classifies the market into one of seven states, ComputeSignal() collects the 3 trend votes, CanTrade() runs the nine-check no-trade gate (kill switch, broker mode, spread ≤250pts, server hours 7–20, weekday, non-CHOPPY/non-COMPRESS, capital ≥$50, daily loss <3%, max 3 concurrent, cooldown), and Confirm() adds the H1-EMA50 and candle-close filters. OpenMarket() then sizes the lot off g_effectiveCap at 0.5% risk, applies the 1.2 R/R check, and sends the order through a 2-attempt retry loop on requote/timeout/price-off retcodes. The full flow is logged on every block so journal lines show the regime state, vote tallies, no-trade rejections, and confirm failures in real time.
EX18012 fires a long or short when a 3-vote closed-bar consensus agrees on direction: EMA(21) vs EMA(50) trend side, RSI(14) vs the 50 threshold, and ATR(14) currently rising (≥1.05× the prior bar's ATR). Confirmation requires the H1 EMA(50) agreement, a bullish/bearish candle close, the projected R/R to clear 1.2, and a regime that is not CHOPPY or COMPRESS. The signal and confirmation layers can each be partially disabled via the InpUseEMA, InpUseRSI, InpUseATRRise, InpUseHTF, and InpUseCandleClose toggles.
Exit is layered: take profit sits at 3.0×ATR(14) from entry (1:1.5 R:R) and is never moved. At 1R profit, break-even moves the stop to entry+spread (long) or entry (short) on a one-shot basis, and a 50% partial close fires once per ticket. After that an ATR trailing stop at 2.5×ATR(14) takes over, plus a 240-bar time exit, a regime-flip exit (CHOPPY/RANGE), and an opposite-signal exit. Pyramiding (default off) can add up to 5 positions spaced at 2.0×ATR(14) when the most recent same-direction position is in profit by the same distance.
Initial stop is 2.0×ATR(14) on the signal timeframe, with a StopsLevelPrice floor to satisfy the broker's minimum stop distance. The break-even function then moves the stop to entry+spread (long) or entry (short) once profit reaches 1R on a one-shot basis, and the ATR trail (2.5×ATR(14)) ratchets the stop forward for the remainder of the trade.
Take profit is set at 3.0×ATR(14) (1:1.5 R:R) and never moved, with a minimum R/R of 1.2 enforced before the order is sent. The 50% partial close fires at 1R profit to secure half the position before the trailing stop takes over the runner.
Best deployed on XAUUSD on a 5-minute chart (the EA also runs M15 and H1), on a broker that supports FOK or IOC filling and where the 250-point spread cap is honoured during the London–New York overlap. Minimum recommended balance is $100, with a $50 effective-capital floor baked into the EA; the 0.5% risk-per-trade default works for prop-firm allocations up to $5,000 (set InpCapAmount to enforce the cap). Run it on a weekday between 07:00 and 20:00 server time, and keep InpDryRun = true for the first 24–48 hours of any new symbol.
Strategy Logic
Pipsgrowth EX18012 TrendFollow — Strategy Logic Analysis (from .mq5 source)
Family: TrendFollow
Magic: 22218012
Version: 2.00
BRIEF:
ADX + ATR-percentile + Bollinger-width regime gate; closed-bar consensus of EMA(21>50) + RSI(50 side) + ATR-rise signal; HTF(H1) EMA(50) + candle-close + min R/R confirmation; full NO-TRADE filter; CAPITAL cap; ATR SL/TP; BE + partial + ATR trail + opposite/regime exits; pyramid OFF default. 12 layers: REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester
INDICATOR STACK:
- Standard
MT5indicators
KEY FUNCTIONS:
NormPrice()NormLot()StopsLevelPrice()SafeCopyBuffer()SafeCopyClose()SafeCopyTime()SafeCopyOpen()SafeCopyHigh()SafeCopyLow()ComputeRegime()ComputeSignal()Confirm()- ...and 14 more
INTERNAL CONSTANTS (27 total):
HTF_PERIOD=PERIOD_H1// higher-timeframe confirmation TFHTF_EMA_PERIOD= 50 //HTFEMAperiodADX_PERIOD= 14 //ADXperiodADX_STRONG_TREND=25.0//ADX>= this -> strong trendADX_WEAK_TREND=20.0//ADX>= this -> weak trendBB_PERIOD= 20 // Bollinger periodBB_DEV=2.0// Bollinger deviationATR_PCT_LOOKBACK= 50 //ATR-percentile lookbackATR_PCT_COMPRESS= 30 // percentile < this -> compressATR_PCT_EXPAND= 80 // percentile > this -> expandSL_ATR_MULT=2.0// SL =SL_ATR_MULT*ATRTP_ATR_MULT=3.0// TP =TP_ATR_MULT*ATR(R:R1.5)BE_TRIGGER_R=1.0// break-even trigger (multiples of R)PARTIAL_PCT= 50 // partial close % atTP1(=1R)TRAIL_ATR_MULT=2.5//ATRtrailing distance- ...and 12 more
INPUT PARAMETERS (23 total across 7 groups):
- [=== Identity ===]
InpMagic=22218012// Magic number - [=== Identity ===]
InpComment= "Psgrowth.com Expert_18012" // Trade comment - [=== Identity ===]
InpDryRun=true// Dry-run (no live sends) - [=== Identity ===]
InpKillSwitch=false// Kill switch (disable all) - [=== Risk & Sizing ===]
InpRiskPercent=0.5// Risk % per trade (ofeffective_capital) - [=== Risk & Sizing ===]
InpFixedLot=0.01// Fallback lot if risk=0 / guard fail - [=== Risk & Sizing ===]
InpDailyLossPct=3.0// Daily loss limit % (ofeffective_capital) - [=== Risk & Sizing ===]
InpMaxConcurrent= 3 // Max concurrent trades (thisEA, this symbol) - [=== Risk & Sizing ===]
InpMaxSymbolExp= 3 // Max positions on one symbol - [=== Risk & Sizing ===]
InpMaxSpreadPts= 250 // Max spread (points) - [=== Capital Allocation Cap ===]
InpCapAmount=0.0// Capital cap (USDequity, real money) - [=== Capital Allocation Cap ===]
InpCapFloor=50.0// Capital floor (USD) -> block entries below - [=== Signal Filters ===]
InpUseEMA=true// UseEMA(21/50) trend filter - [=== Signal Filters ===]
InpUseRSI=true// UseRSI(14) momentum filter - [=== Signal Filters ===]
InpUseATRRise=true// RequireATRrising - [=== Confirmation ===]
InpUseHTF=true// RequireHTF(H1)EMA(50) agreement - [=== Confirmation ===]
InpUseCandleClose=true// Require candle-close direction agreement - [=== Exits / Management ===]
InpEnableTrail=true// EnableATRtrailing - [=== Exits / Management ===]
InpEnableBE=true// Enable break-even at 1R - [=== Exits / Management ===]
InpEnablePartial=true// Enable partial close atTP1 - [=== Exits / Management ===]
InpOppositeExit=true// Exit on opposite signal - [=== Exits / Management ===]
InpRegimeExit=true// Exit on regime change - [=== Scaling ===]
InpEnablePyramid=false// Enable pyramiding (defaultOFF)
// Pipsgrowth EX18012 TrendFollow — Execution Flow (from source analysis)
// Family: TrendFollow
// ADX + ATR-percentile + Bollinger-width regime gate; closed-bar consensus of EMA(21>50) + RSI(50 side) + ATR-rise signal; HTF(H1) EMA(50) + candle-close + min R/R confirmation; full NO-TRADE filter; CAPITAL cap; ATR SL/TP; BE + partial + ATR trail + opposite/regime exits; pyramid OFF default. 12 layers: REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester
ON_INIT:
Create indicator handles: standard set
Initialize state variables
Detect broker GMT offset
ON_TICK:
1. Refresh indicator buffers (closed-bar shift=1)
2. Manage existing positions:
- Break-even check
- ATR trailing stop
- Profit lock ratchet
- Time-based exit
- Opposite-signal exit
3. If new bar:
a. ClassifyRegime() — ADX/ATR/BB regime detection
b. NoTradeGate() checks:
- Market open + session filter
- Spread limit
- Cooldown after loss
- Consecutive loss limit
- Kill switch
- Max drawdown
- Max concurrent positions
- Daily/weekly loss limits
c. GenerateSignal() — strategy-specific entry logic
d. CheckConfirm() — HTF alignment + R:R + ADX minimum
e. Calculate position size from risk %
f. Execute with retry logic
g. Mark bar to prevent duplicates
ON_TESTER:
Custom fitness = weighted(RecoveryFactor, ROI, ProfitFactor, TradeCount, Sharpe, Drawdown)Optimization Profile
How to Install This EA on MT5
- 1Download the .mq5 file using the button above
- 2Open MetaTrader 5 on your computer
- 3Click File → Open Data Folder in the top menu
- 4Navigate to MQL5 → Experts and paste the .mq5 file there
- 5In MT5, right-click Expert Advisors in the Navigator panel → Refresh
- 6Drag the EA onto an H4 or Daily chart for best results
- 7Configure EMA periods, ADX threshold, and lot size in the dialog
- 8Enable Allow Algo Trading and click OK
EA Parameters
| Parameter | Default | Description |
|---|---|---|
| InpMagic | 22218012 | Magic number |
| InpComment | "Psgrowth.com Expert_18012" | Trade comment |
| InpDryRun | true | Dry-run (no live sends) |
| InpKillSwitch | false | Kill switch (disable all) |
| InpRiskPercent | 0.5 | Risk % per trade (of effective_capital) |
| InpFixedLot | 0.01 | Fallback lot if risk=0 / guard fail |
| InpDailyLossPct | 3.0 | Daily loss limit % (of effective_capital) |
| InpMaxConcurrent | 3 | Max concurrent trades (this EA, this symbol) |
| InpMaxSymbolExp | 3 | Max positions on one symbol |
| InpMaxSpreadPts | 250 | Max spread (points) |
| InpCapAmount | 0.0 | Capital cap (USD equity, real money) |
| InpCapFloor | 50.0 | Capital floor (USD) -> block entries below |
| InpUseEMA | true | Use EMA(21/50) trend filter |
| InpUseRSI | true | Use RSI(14) momentum filter |
| InpUseATRRise | true | Require ATR rising |
| InpUseHTF | true | Require HTF(H1) EMA(50) agreement |
| InpUseCandleClose | true | Require candle-close direction agreement |
| InpEnableTrail | true | Enable ATR trailing |
| InpEnableBE | true | Enable break-even at 1R |
| InpEnablePartial | true | Enable partial close at TP1 |
| InpOppositeExit | true | Exit on opposite signal |
| InpRegimeExit | true | Exit on regime change |
| InpEnablePyramid | false | Enable pyramiding (default OFF) |
#property copyright "Pipsgrowth.com"
#property link "https://pipsgrowth.com"
#property version "2.00"
#property strict
#property description "Pipsgrowth.com EX18012 GenFiltered_XAUUSD_5M — regime-gated multi-filter consensus, full 12-layer stack."
#include <Trade\Trade.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
#include <Trade\AccountInfo.mqh>
//==================== TUNABLE CONSTANTS (NOT inputs) ====================
#define HTF_PERIOD PERIOD_H1 // higher-timeframe confirmation TF
#define HTF_EMA_PERIOD 50 // HTF EMA period
#define ADX_PERIOD 14 // ADX period
#define ADX_STRONG_TREND 25.0 // ADX >= this -> strong trend
#define ADX_WEAK_TREND 20.0 // ADX >= this -> weak trend
#define BB_PERIOD 20 // Bollinger period
#define BB_DEV 2.0 // Bollinger deviation
#define ATR_PCT_LOOKBACK 50 // ATR-percentile lookback
#define ATR_PCT_COMPRESS 30 // percentile < this -> compress
#define ATR_PCT_EXPAND 80 // percentile > this -> expand
#define SL_ATR_MULT 2.0 // SL = SL_ATR_MULT * ATR
#define TP_ATR_MULT 3.0 // TP = TP_ATR_MULT * ATR (R:R 1.5)
#define BE_TRIGGER_R 1.0 // break-even trigger (multiples of R)
#define PARTIAL_PCT 50 // partial close % at TP1 (=1R)
#define TRAIL_ATR_MULT 2.5 // ATR trailing distance
#define TRAIL_START_R 1.0 // start trailing at R multiple
#define MAX_BARS_IN_TRADE 240 // max bars in trade (time exit)
#define SESSION_START_HR 7 // London/NY window start (server)
#define SESSION_END_HR 21 // London/NY window end (server)
#define PYRAMID_MAX 5 // hard cap on pyramid levels
#define PYRAMID_ATR_SP 2.0 // pyramid spacing (ATR multiples)
#define COOLDOWN_LOSSES 3 // losses before cooldown
#define COOLDOWN_BARS 12 // cooldown length (bars)
#define ATR_RISE_RATIO 1.05 // ATR rising if cur/prev > this
#define RSI_BULL_LEVEL 50 // RSI above = bull
#define RSI_BEAR_LEVEL 50 // RSI below = bear
#define MIN_RR_RATIO 1.2 // minimum reward:risk
//==================== INPUTS (12-22 total) ====================
input group "=== Identity ==="
input long InpMagic = 22218012; // Magic number
input string InpComment = "Psgrowth.com Expert_18012"; // Trade comment
input bool InpDryRun = true; // Dry-run (no live sends)
input bool InpKillSwitch = false; // Kill switch (disable all)
input group "=== Risk & Sizing ==="
input double InpRiskPercent = 0.5; // Risk % per trade (of effective_capital)
input double InpFixedLot = 0.01; // Fallback lot if risk=0 / guard fail
input double InpDailyLossPct = 3.0; // Daily loss limit % (of effective_capital)
input int InpMaxConcurrent = 3; // Max concurrent trades (this EA, this symbol)
input int InpMaxSymbolExp = 3; // Max positions on one symbol
input double InpMaxSpreadPts = 250; // Max spread (points)
input group "=== Capital Allocation Cap ==="
// InpCapEnabled removed — use InpCapAmount=0 to disable // Capital cap enabled
input double InpCapAmount = 0.0; // Capital cap (USD equity, real money)
input double InpCapFloor = 50.0; // Capital floor (USD) -> block entries below
Full source code available on download
Educational purposes only. Do NOT use with real money. Test on demo accounts only.
Clear Warning: Educational Purposes Only
Clear Warning: This Expert Advisor is for educational and testing purposes only. Do NOT use it with real money. Test only on demo accounts. Trading with real money involves substantial risk of capital loss. This does not constitute investment advice.
Recommended Brokers for This EA
These EAs run on MT5 — use a regulated broker with fast execution and tight spreads
Markets.com
Exness
IC Markets
Similar Expert Advisors
View All Expert AdvisorsMore Trend Following strategy EAs from our library
Pipsgrowth EX16080 Trend
Pipsgrowth.com EX16080 EURUSDTrendFollower — triple-EMA H4 trend follower, full 12-layer stack.
Pipsgrowth EX16081 Trend
Pipsgrowth.com EX16081 GoldTrendEA — XAUUSD H4 EMA cross with Fib targets, full 12-layer stack.
Pipsgrowth EX16033 Trend
Pipsgrowth.com EX16033 EA_Price_Action — price-action grid scalper, full 12-layer stack.
Community
Educational purposes only. Do NOT use with real money. Test on demo accounts only.