Quorum Gold
Two trend engines must agree, nine risk guards must consent, and price must trigger the entry itself. Most days nothing qualifies. That is the design.
- Edge score
- 87/100
- Max drawdown
- 5.9%
- Profit factor
- 3.10
- Sample
- 188
17 of 19 tests pass
9.5% at Monte Carlo P95
71.3% win rate
trades · 3.24 years
1. RiskPercent — sized to your drawdown ceiling, not your ambition.
2. InpPF_DailyResetHour — must match your prop firm's reset, expressed in broker server time.
3. InpPF_ResetState — run once as true on any new account, then switch it off.
Sections 04 and 07 cover all three. If you read nothing else on this page, read those.
What Quorum Gold does.
A quorum is the minimum number of members who must agree before a decision is valid. Nothing in this system happens on one opinion — and that principle governs both how it enters trades and how it protects the account.
Most gold robots are built around activity. They scalp M1 or M5, open dozens of positions a day, and measure their worth by how busy they look. On an instrument as volatile as gold that model has a structural problem: frequency is not edge, it is exposure. Every additional trade is another spread paid, another slippage event, another chance to be caught on the wrong side of a spike.
Quorum Gold inverts this. Two fully independent trend engines must agree before an entry is even considered. Trend strength must then confirm. Momentum must confirm there is room left in the move. Price itself must trigger the entry through a stop order. And then nine independent risk guards each hold a veto.
The result is a system that spends most of its life doing nothing. That is not a defect — that is the entire design. It runs on XAUUSD with a dedicated set file for M15, M30 or H1, places a stop loss on every position, and uses no grid, no martingale and no averaging down.
What it is not
There will be entire weeks where the panel sits there telling you exactly why no trade qualified, and you will be tempted to think something is broken. Nothing will be broken. The engines will simply not have agreed, or a guard will not have consented.
If a quiet week makes you want to override the system, this is not the right tool for you.
Trade frequency.
These figures come from the live trading record, not from a backtest. Read them before you form an opinion about whether the EA is working.
| Measure | Observed |
|---|---|
| Trades per month | About 12 on average |
| Trades per week | Two to three in a typical week |
| Sessions producing a trade | Roughly four in ten. The other six, nothing happens. |
| Trades on an active day | Usually exactly one. Busiest day in the record: four. |
| Longest quiet stretch | Almost two full weeks with no trade at all |
| Monthly range | Low single figures up to seventeen |
| Typical holding time | Four to five hours |
| Positions held past a day | About one in eight |
| Longest hold in the record | Approximately six days |
| Longest losing run | Six consecutive trades |
Six consecutive losses occurred in the live record and the account subsequently recovered. The loss-streak cooldown (InpPF_MaxConsecLosses) is set to 5 by default, which means a run of that length will pause the EA before it completes.
This is deliberate on a prop account, where surviving matters more than recovering quickly. On a personal account you may prefer 7, or to disable the guard entirely. Decide consciously rather than leaving it at a number you never examined.
What this means for evaluation timelines
At two to three trades per week, a ten-day minimum trading requirement is comfortably met over a normal evaluation period. An aggressive minimum-day requirement, however, may not be compatible with a selective system. Check your firm's exact rule before you begin, and note that a quiet fortnight — which has happened — could put a tight deadline at risk.
Broker & account requirements.
What you need for Quorum Gold to run correctly.
- Platform: MetaTrader 5
- Symbol: XAUUSD (Gold) — your broker's exact symbol may vary (e.g.
XAUUSD.i,GOLD) - Timeframe: M15, M30 or H1 — load the matching set file from section 03a. The three are separately tuned and their parameters do not transfer.
- Account type: Hedging
- Leverage: 1:100 minimum, 1:500 recommended
- Minimum deposit: 500 USD. 1,000 USD or higher recommended.
- Brokers: IC Markets or Pepperstone (Raw / ECN). Any low-spread ECN broker works. See our trusted partners.
- VPS: Strongly recommended for uninterrupted 24/5 operation.
Three timeframes, three tunings.
Load the file that matches the chart you are running. The engine periods, band factors and risk geometry are tuned per timeframe — a set file is not a starting point to be mixed with another.
Quorum_Gold_XAUUSD_M15.set
The most active of the three and the configuration behind the report set in section 12. Tighter ADX gate at 20, widest take-profit floor at 5.0 ATR.
Quorum_Gold_XAUUSD_M30.set
The middle ground. Widest volatility bands of the three — factors 11.5 and 13.0 — so it commits to fewer, broader moves. Carries double the per-trade risk of the other two.
Quorum_Gold_XAUUSD_H1.set
The most selective. Loosest ADX gate at 15, tightest structural stop at 0.5, and the shortest take-profit floor at 2.5 ATR.
Loading a set file
Drag the EA onto the chart, then on the Inputs tab click Load and select the .set file. In the Strategy Tester the same button sits under the Inputs tab of the settings panel. Each file already carries its own MagicNumber, so running two timeframes side by side will not corrupt guard state — but see section 11 on dividing your limits between instances.
What differs between them
Both signal engines are re-tuned per timeframe: lookback periods run 54/185 on M15, 35/154 on M30 and 47/165 on H1, with band factors scaling accordingly. M15 and M30 hold the ADX gate at 20; H1 relaxes it to 15. Take-profit floors tighten as the timeframe lengthens — 5.0, 4.0 and 2.5 ATR respectively. Everything else, including the nine guards, is identical across the three.
These files ship at RiskPercent 1.0 on M15 and H1, and 2.0 on M30 — several times the conservative 0.35 discussed in section 07. They are testing configurations, not sizing recommendations for your account.
Set the risk yourself against your own drawdown ceiling using the method in section 07, and re-check it after loading any set file, because loading overwrites whatever you had.
ShowInfoPanel is off in all three, since they were built for tester runs. Switch it on for live trading — on a system this selective the panel is how you know why nothing has traded. UseHeikinAshi is also off, against the parameter default in section 09.
Getting Quorum Gold running.
Step-by-step setup, then the three settings that determine whether the EA works for you.
- In MetaTrader 5, open File → Open Data Folder.
- Navigate to
MQL5 / Expertsand copy the EA file there. (Purchases from MQL5 Market install automatically and appear in the Navigator under Expert Advisors.) - Restart MetaTrader 5, or right-click the Navigator and choose Refresh.
- Open an XAUUSD chart on your chosen timeframe (M15, M30 or H1) and drag the EA onto it.
- On the Common tab, tick Allow Algo Trading. Confirm the global AutoTrading button in the toolbar is green.
The three settings that matter
LotSizingMethod, then set either FixedLotSize or RiskPercent. Risk-based sizing calculates lots from the actual stop distance of each specific trade, so risk stays constant even as volatility changes the stop width. The shipped default of 0.35 is conservative and intended for a 10% drawdown ceiling — a starting point, not a recommendation for your account.InpPF_DailyResetHour defines when the EA considers a new trading day to begin. It is expressed in broker server hours — not GMT, not your local time. Find your firm's stated reset time, convert it to your broker's server hour, and set it here.InpPF_ResetState to true, let the EA initialise once, confirm the journal shows the state cleared, then set it back to false.Prop firms rarely reset the daily loss limit at server midnight. If InpPF_DailyResetHour does not match your firm's actual cutoff, the EA will begin a fresh daily loss allowance while the firm is still counting yesterday's loss — and breach a limit it believes it is safely under.
If InpPF_ResetState is left at true, the guards re-baseline every single time the EA initialises — including after a VPS reboot. Your drawdown protection would effectively reset itself whenever it mattered most. Always switch it back off.
Five stages, four exits.
Every stage must consent before an order is placed, and every position is managed by four independent exit paths.
Stage 1 — Two independent engines
Each engine builds an adaptive volatility band around a custom-weighted price basis, using its own lookback period and its own band factor. One reads the shorter structural swing; the other holds the broader trend. Both run continuously and independently on every bar. By default both must return the same direction — disagreement means no trade. Setting RequireBothEquations to false allows either engine to trigger, which substantially increases frequency and substantially reduces selectivity.
Stage 2 — Trend strength
An ADX gate verifies the market is genuinely trending. Directional signals generated inside dead ranges are discarded before reaching the order stage. Raising ADX_MinLevel makes the EA more selective; lowering it admits weaker trends.
Stage 3 — Momentum room
An optional RSI entry filter rejects buys into overbought conditions and sells into oversold ones, preventing entries at the precise point a move is already spent. Disabled by default.
Stage 4 — Entry, never at market
Quorum Gold places a stop order beyond the confirming candle, offset by TickOffset ticks. Price must prove the move before capital is committed. If the signal invalidates before the order fills, the pending order is cancelled and nothing was risked.
Stage 5 — Everything scales to volatility
Stop loss, take profit, break-even trigger, trailing distance, maximum spread and every exit threshold are expressed as multiples of live ATR rather than fixed pips. Gold in a quiet Asian session and gold during a payrolls release are effectively different instruments; the EA sizes itself to whichever it is currently trading.
The four exits
Every position is managed through four independent exit paths. Whichever triggers first wins.
| Exit | Behaviour |
|---|---|
| Structural SL / TP | Set at entry from the engines' own band levels, then bounded by ATR minimum and maximum limits so a single distorted candle cannot produce an absurd stop. |
| Momentum exhaustion | When RSI reaches an extreme and the position is already in meaningful profit, the move is banked. A minimum-profit gate means this path never closes at a loss. |
| Opposite signal | If the engines flip against an open position, the EA exits rather than hoping. Configurable profit threshold and optional break-even allowance. |
| Time-based | A trade that has gone nowhere after a set number of bars is closed, freeing the account for the next setup. Disabled by default. |
Alongside these: automatic break-even with a configurable offset, and an ATR trailing stop that steps rather than drags.
When it will not trade
Independently of the risk guards, an entry is blocked if any of the following apply: the day or month filter excludes the current period; the session filter is active and the current time falls outside it; the market-open check fails on tick freshness, trade mode or session data; the news blackout window is active; or the spread is wide relative to current ATR.
Nine guards, each with a veto.
The guards run as a separate layer above the strategy, evaluated before the signal logic on every tick. The strategy cannot talk its way past them. Any single guard can veto an entry or flatten everything already open.
| # | Guard | What it does |
|---|---|---|
| 01 | Daily loss limit | Two thresholds, not one. Crossing the soft band scales lot size down progressively as the day deteriorates. Crossing the hard band flattens and halts until the reset hour. |
| 02 | Max drawdown | Trailing or static high-water mark, on equity or balance, with a configurable buffer that stops the EA a set percentage before the firm's actual limit. |
| 03 | Equity circuit breaker | Two triggers: equity falling below its high-water mark by a set percentage, and floating loss exceeding a set percentage of equity. Either flattens immediately. |
| 04 | Trade & position caps | Maximum new trades per day and maximum simultaneous positions. Counted on the executed fill, so cancelled pending orders never consume the daily budget. |
| 05 | Spread & slippage | Hard points cap on entries, plus a clamp on the deviation accepted at fill. |
| 06 | Friday cutoff | Two separate hours: one after which no new trades open, one at which everything is flattened. No weekend gap exposure. |
| 07 | Margin & equity floor | Refuses entries below a true broker margin level (equity divided by used margin), and optionally below a percentage of the equity high-water mark. |
| 08 | Loss streak cooldown | Pauses the EA after a configurable run of consecutive losses. Judged on net realised profit per position, not on individual deals. |
| 09 | Hard equity floor | Permanent capital protection. Below a set percentage of initial equity the EA halts and stays halted, deliberately not auto-recovering by default. |
Engineering details that matter in practice
- State survives restarts. High-water marks, the daily equity and balance snapshot, and the trade count are written to disk and reloaded on initialisation. A VPS reboot at midday does not hand the EA a fresh daily loss allowance.
- Complete flatten semantics. A halt closes positions and deletes every pending order. Because this EA enters via stop orders, a guard that only closed positions would leave live orders that fill after the EA has supposedly stood down.
- Net position accounting. A position closing across multiple deals is judged on its net result, so a trade that banks partial profit then scratches out is not miscounted as a loss.
- Fail-loud validation. The EA refuses to initialise on contradictory risk settings — soft loss above hard loss, buffer larger than the limit, an invalid scale factor. It will not start quietly with protection disabled.
- Halt taxonomy. Daily halts, permanent halts and capital-floor halts are distinct states with distinct recovery rules. The panel always tells you which one you are in.
Presets by firm rules.
The shipped defaults are configured for a firm using a 5% daily loss limit and a 10% maximum overall loss. If your firm differs, adjust using the table below.
| Parameter | 10% / 5% | 8% / 4% | 6% / 3% |
|---|---|---|---|
| InpPF_MaxDD_Pct | 10.0 | 8.0 | 6.0 |
| InpPF_MaxDD_BufferPct | 1.5 | 1.0 | 1.0 |
| InpPF_DailyHardPct | 4.0 | 3.0 | 2.0 |
| InpPF_DailySoftPct | 2.0 | 1.5 | 1.0 |
| InpPF_EquityFloorPct | 91.0 | 93.0 | 95.0 |
How the guards divide the work
The three drawdown-related guards are deliberately configured to measure different things. If two of them measure the same quantity at different thresholds, the looser one becomes unreachable dead code.
| Guard | Measures |
|---|---|
| 02 — Max drawdown | Equity against initial equity, static. This is the firm's overall loss rule. Trips 1.5% before the limit. |
| 03 — Equity breaker | Equity against its running peak, plus floating loss as a share of equity. Catches an intraday collapse from a high point that the static rule would miss. |
| 09 — Equity floor | A non-recovering backstop just under the firm's limit. Does not participate in the daily reset. |
InpPF_DailyDrawdownReset is enabled by default. It clears daily halts, clears permanent halts, and re-baselines the drawdown high-water marks each day. This means a max-drawdown halt at 8.5% down will clear the following morning and the EA will resume with only 1.5% of room remaining. Guard 09 exists precisely for this reason: it does not reset, so at 9% down the EA halts and stays halted.
If you disable the daily reset, guard 02 becomes permanent and guard 09 becomes redundant. Both configurations are valid. Choose one deliberately.
Sizing risk to a drawdown ceiling
The single most important decision is RiskPercent. A drawdown ceiling is not a suggestion; if your risk setting produces historical drawdowns near the limit, you have no margin for an unusual week.
Method: backtest at least twelve months at your intended risk. Read the maximum drawdown from the report. Target a figure around half of your firm's limit. If your firm allows 10% and your backtest shows 9%, reduce risk until it shows 5% or less. Then verify the guards never fired during the run — if they did, your risk is still too high and you are relying on the safety net rather than on position sizing.
An account that regularly triggers its guards is an account sized wrongly. The guards exist to survive the abnormal week, not to manage the normal one.
Your primary diagnostic.
On a selective system the panel is how you know what the EA is thinking. When nothing has traded for a week, it tells you precisely why.
=== ATG EA v32.0 - PROP FIRM EDITION === ATR: 12.4500 (124.5 pips) Signal: NONE | Position: NONE === TIME FILTERS === Day: OFF Month: OFF Session: OFF Market: OPEN === EQUATIONS === Eq1: BUY (P:65, F:7.5) Eq2: SELL (P:133, F:10.5) Logic: BOTH === CONFIRMATION === ADX: 18.4 >= 15 OK RSI Entry: OFF === PROP FIRM === Status: ACTIVE Daily loss: 0.84% / 4.0% [##--------] Max DD: 2.10% / 10.0% [##--------] Trades today: 3/5 | Margin: 1240% Day P/L: +48.20 | W/N: 2/3
In the example above, no trade is open because Eq1 reads BUY while Eq2 reads SELL. The engines disagree, so under Logic: BOTH no signal is produced. Nothing is wrong.
Status values
| Status | Meaning |
|---|---|
| ACTIVE | All guards satisfied. The EA will trade when a signal qualifies. |
| SCALED x0.62 | Daily soft band crossed. Position size reduced to 62% of normal. |
| DAY HALT | Daily hard loss reached. Flattened and halted until the reset hour. |
| PF HALT | Max drawdown or equity breaker tripped. Halted until the daily re-baseline, or until reload if the daily reset is disabled. |
| FLOOR HALT | Hard equity floor breached. Does not auto-recover. |
| COOLDOWN | Loss-streak pause in effect. The panel shows when it expires. |
| PF OFF | The guard suite is disabled. Not recommended on a funded account. |
The panel can be switched off with ShowInfoPanel. Do this during optimisation runs, where redrawing it every bar wastes cycles.
Input parameter reference.
Every input the EA accepts, with defaults and behaviour notes, grouped by function.
| Parameter | Default | Description |
|---|---|---|
| EA configuration | ||
| MagicNumber | 1003 | Unique identifier. Change it for each additional chart. |
| TradeComment | ATG EA | Comment attached to orders. |
| UseHeikinAshi | true | Evaluate signal candles on Heikin Ashi rather than raw price. |
| ShowInfoPanel | true | Draw the on-chart panel. Disable during optimisation. |
| Position sizing | ||
| LotSizingMethod | RISK | Fixed lots, or risk percentage of balance. |
| FixedLotSize | 0.01 | Lot size in fixed mode. |
| RiskPercent | 0.35 | Percentage of balance risked per trade, calculated against that trade's actual stop distance. |
| MaxLotSize | 5.0 | Hard ceiling the EA will never exceed. |
| Risk geometry (ATR-based) | ||
| ATR_Period | 14 | ATR period used for all risk calculations. |
| DynamicSL | 1.5 | Multiplier applied to the structural stop distance. |
| TakeProfitMultiplier | 2.0 | Take profit as a multiple of the final stop distance. |
| MinStopLossATR | 1.0 | Floor on stop distance, in ATR multiples. |
| MaxStopLossATR | 5.0 | Ceiling on stop distance, in ATR multiples. |
| MinTakeProfitATR | 1.5 | Floor on take profit distance. |
| TickOffset | 11 | Ticks beyond the signal candle for the stop entry order. |
| MaxSpreadATR | 0.5 | Block entries when spread exceeds this fraction of ATR. |
| Signal engines | ||
| UseEquation1 | true | Enable the first engine. |
| GoldenPeriod1 | 65 | Volatility lookback for engine 1. |
| NomadFactor1 | 7.5 | Band width factor for engine 1. |
| UseEquation2 | true | Enable the second engine. |
| GoldenPeriod2 | 133 | Volatility lookback for engine 2. |
| NomadFactor2 | 10.5 | Band width factor for engine 2. |
| CustomPriceWeight | 1.6 | Weighting of close within the custom price basis. |
| VolatilityDamping | 0.6 | Smoothing applied to the volatility series. |
| RequireBothEquations | true | Require agreement. Setting false greatly increases frequency. |
| Confirmation filters | ||
| UseADXConfirmation | true | Require a trending market. |
| ADX_Period | 14 | ADX period. |
| ADX_MinLevel | 15.0 | Minimum ADX to permit an entry. Higher is more selective. |
| UseRSIEntryConfirmation | false | Reject entries with no momentum room left. |
| RSI_MaxForBuy | 70.0 | RSI must be below this for a buy. |
| RSI_MinForSell | 30.0 | RSI must be above this for a sell. |
| Exit systems | ||
| UseRSIDynamicExit | true | Bank the move on momentum exhaustion. |
| RSI_BuyExitLevel | 70.0 | Overbought level closing a long. |
| RSI_SellExitLevel | 30.0 | Oversold level closing a short. |
| MinProfitForRSIExitATR | 2.0 | Minimum profit before this exit can fire. |
| UseOppositeSignalExit | true | Exit when the engines flip against the position. |
| MinProfitForSignalExitATR | 0.5 | Minimum profit before this exit can fire. |
| UseTimeBasedExit | false | Close positions that have gone nowhere. |
| MaxHoldingBars | 50 | Bars before the time exit becomes eligible. |
| UseBreakEven | true | Move the stop to break even once in profit. |
| BreakEvenATR | 1.5 | Profit required to trigger break even. |
| BreakEvenOffsetATR | 0.3 | Distance beyond entry the stop is placed. |
| UseTrailingStop | false | Enable the ATR trailing stop. |
| TrailingStartATR | 2.0 | Profit required before trailing begins. |
| TrailingStopATR | 1.0 | Trailing distance behind price. |
| Time and session filters | ||
| UseDayFilter | false | Enable per-weekday control. |
| UseMonthFilter | false | Enable per-month control. |
| UseSessionFilter | false | Restrict trading to defined sessions. |
| SessionTimezone | GMT | Reference clock for session windows. |
| UseLondonSession | false | Preset: 08:00–16:00 GMT. |
| UseNewYorkSession | false | Preset: 13:00–21:00 GMT. |
| UseTokyoSession | false | Preset: 00:00–09:00 GMT. |
| UseLondonNYOverlap | false | Preset: 13:00–16:00 GMT. |
| CheckMarketOpen | true | Verify session data, tick freshness and trade mode before acting. |
| UseNewsFilter | false | Blackout window around listed release times. |
| NewsAvoidMinutes | 30 | Minutes either side of a listed time. |
| Prop firm guards | ||
| InpPF_Enable | true | Master switch for the guard suite. |
| InpPF_DailyDrawdownReset | true | Clear halts and re-baseline drawdown each day. |
| InpPF_DailyResetHour | 0 | Broker server hour at which a new trading day begins. |
| InpPF_ResetState | false | Wipe stored state. Run once on a new account, then switch off. |
| InpPF_DailySoftPct | 2.0 | Daily loss at which lot scaling begins. |
| InpPF_DailyHardPct | 4.0 | Daily loss at which the EA flattens and halts. |
| InpPF_SoftMinScale | 0.25 | Lot multiplier at the hard threshold. |
| InpPF_MaxDD_Pct | 10.0 | Your firm's maximum overall loss. |
| InpPF_MaxDD_BufferPct | 1.5 | Stop this far before the limit. |
| InpPF_MaxDD_Trailing | false | False measures against initial equity; true against the running peak. |
| InpPF_EquityTrailPct | 8.0 | Flatten if equity falls this far below its peak. |
| InpPF_EquityFloatLossPct | 4.0 | Flatten if floating loss exceeds this share of equity. |
| InpPF_MaxTradesPerDay | 5 | New trades permitted per day. 0 disables. |
| InpPF_MaxConcurrent | 1 | Simultaneous positions permitted. |
| InpPF_MaxSpreadPoints | 60.0 | Hard spread cap on entries, in points. |
| InpPF_MaxSlippagePoints | 25 | Maximum deviation accepted at fill. |
| InpPF_FridayCutoffHour | 19 | No new trades after this GMT hour on Friday. |
| InpPF_FridayFlattenHour | 20 | Flatten everything at this GMT hour on Friday. |
| InpPF_MinMarginLevelPct | 300.0 | Refuse entries below this margin level. |
| InpPF_MaxConsecLosses | 5 | Consecutive losses before a cooldown. |
| InpPF_CooldownBars | 8 | Bars paused after a cooldown trip. |
| InpPF_EquityFloorPct | 91.0 | Halt permanently below this share of initial equity. |
| InpPF_FloorAutoRecover | false | Whether the floor halt clears on recovery. |
| InpPF_VerboseLog | false | Detailed guard logging to the journal. |
The two periods and their band factors are tuned as a set. Changing one in isolation usually degrades the pair. If you optimise, optimise them together and validate out of sample.
This filter uses a list of times you supply, not a live economic calendar. It will not adapt to schedule changes or one-off events. If your prop firm enforces a strict news rule, treat this as a convenience rather than as compliance.
How to test this EA.
A selective system needs a long sample. Short tests produce numbers you cannot act on.
| Setting | Use |
|---|---|
| Modelling | Every tick based on real ticks |
| Symbol | XAUUSD |
| Timeframe | M15, M30 or H1 — matching the set file loaded |
| Deposit | 1000 or higher |
| Period | Twelve months minimum |
| Parameters | Load the set file for that timeframe, then adjust lot sizing only |
This EA averages twelve trades per month. A one-month backtest produces a sample of about twelve trades — far too few to distinguish skill from luck. A two-week test may produce three. Test twelve months or more; anything less tells you nothing you can act on.
Set the daily reset for long tests
InpPF_DailyDrawdownReset should be true for extended backtests. With it disabled, a single drawdown breach halts the EA permanently and the remainder of the test produces a flat line that tells you nothing.
Verify the guards did not carry the result
After a run, check the journal for halt messages. A profitable backtest in which the guards fired repeatedly is not a validation of your settings — it is evidence that your risk is too high and the safety net did the work. Reduce RiskPercent and test again until the guards stay silent through a normal period.
Expect broker variation
Results differ between brokers because of spread, execution speed, slippage and tick data quality. This is true of every EA. Test on data from the broker you intend to trade with.
Common situations.
Most reported "faults" on a selective system are the system working as designed. Check the panel first.
It has not traded for days. Is it broken?
Almost certainly not. Check the panel — it will show which engine disagreed, which filter blocked, or which guard vetoed. The longest quiet stretch in the live record was close to two weeks. Confirm the status reads ACTIVE and let it wait.
The EA will not initialise
Check the journal. The EA deliberately refuses to start on contradictory risk settings: a soft daily loss above the hard daily loss, a drawdown buffer larger than the drawdown limit, or a scale factor outside 0 to 1. The message names the offending parameter.
The panel reads PF HALT and nothing trades
A drawdown or equity guard has tripped. The Reason line names which. If InpPF_DailyDrawdownReset is enabled, it clears at the next daily reset. If disabled, remove and re-attach the EA once you have addressed the cause.
Lot sizes are smaller than expected
Check the panel for a SCALED status. The daily soft band reduces size progressively as a day deteriorates. This is intended behaviour and resets with the trading day.
Drawdown figures look wrong on a new account
Stored state from a previous account is being reused. Run once with InpPF_ResetState set to true, confirm the journal reports the state cleared, then set it back to false.
The daily reset is happening at the wrong time
InpPF_DailyResetHour is expressed in broker server hours, not GMT and not local time. Check your broker's server clock in the Market Watch window and convert your firm's stated reset time accordingly.
Trades open on days I disabled
The day filter uses broker server time. The session filter uses whichever clock SessionTimezone specifies. These are separate settings and can disagree. Verify both.
Multiple charts, unexpected behaviour
Each instance must have a unique MagicNumber. Guard state is keyed to symbol and magic, so two instances sharing a magic number will corrupt each other's drawdown tracking. Note also that instances do not see each other's exposure — on a single funded account, divide your limits between them.
The testing, in full.
Five reports generated with Edge Matrix from the MT5 backtest of the M15 set file — 188 closed positions across 3.24 years. Each opens as the complete document, method notes included.
Monte Carlo robustness
Ten thousand bootstrap resamples of the trade sequence. Every path finished profitable; the drawdown widened to 9.5% at the 95th percentile, which is the figure to size against.
Quantitative validation
Nineteen tests. Two score below threshold — edge consistency at 63 and Monte Carlo robustness at 66 — and both are named in the report rather than averaged away.
Performance record
The full trade-by-trade record across 1,184 days: equity curve, month-by-month grid, drawdown episodes and yearly totals.
Equity projection
The next 116 trades resampled a thousand times, spanning roughly 24.5 months at the observed trade frequency. Reported here as a drawdown envelope.
Optimal backtest window
Rolling-variance analysis, literature benchmarks and a Politis-Romano block bootstrap, synthesised into one recommended testing period.
Edge Matrix is our own analysis platform, not a third-party auditor. The reports are generated from the raw MT5 backtest and show their working — every test names its method, and the two tests that score below threshold are printed alongside the ones that pass. Read them as method disclosure rather than as an independent audit.
Including where it is soft.
The headline numbers are in section 12. These are the findings that should change how you size the account.
A Welch t-test on the profit distribution returns t = 5.75 against a 99% two-tailed threshold of 2.576, so the edge is not a sampling artefact at this sample size. All six equal calendar periods were profitable, which argues against the result depending on a single favourable regime.
Size against 9.5%, not 5.9%
Reshuffling the trade order ten thousand times widens the 95th-percentile drawdown to 9.5% — roughly 1.6× the historical 5.9%. The historical sequence sits at the 4th percentile of that distribution, meaning the backtest did not depend on lucky ordering, but it does mean the historical figure is optimistic as a sizing input. Use the Monte Carlo figure when you set RiskPercent against a firm's drawdown ceiling.
Expect to be underwater often
Equity sits below its high-water mark 38% of the time. The episodes are shallow — 2.8% on average, with the longest single episode running 82 days — and recovery is fast, so the issue is the frequency of small drawdowns rather than their depth. If a month spent below the previous peak would make you intervene, size smaller.
The two weakest tests
Edge consistency scores 63/100 on day-of-week variance: no weekday is structurally unprofitable, but edge quality is uneven across sessions. Monte Carlo robustness scores 66/100, reflecting the same drawdown expansion described above. Both are printed in the validation report with their reasoning.
Sample size caveat
188 trades is about 75% of the estimated statistical minimum for this instrument and timeframe. At that sample, a measured 71.3% win rate carries a 95% confidence interval of roughly 64–78%. The direction of the edge is well supported; its precise magnitude is not.
Frequently asked questions.
Can I run Quorum Gold on multiple charts?
Yes, but each instance must be given a unique MagicNumber. Guard state — high-water marks, the daily snapshot, the trade count — is stored per symbol and magic number, so two instances sharing a magic will corrupt each other's drawdown tracking. Instances also do not see each other's exposure, so on a single funded account you must divide your daily loss and drawdown limits between them.
Does Quorum Gold work on prop firm accounts?
It is built for them. Nine risk guards run above the strategy and can veto any entry or flatten everything open: dual-threshold daily loss, max drawdown with a pre-limit buffer, an equity circuit breaker, trade and position caps, spread and slippage limits, a Friday cutoff, a margin floor, a loss-streak cooldown and a non-recovering hard equity floor. Shipped defaults target a firm with a 5% daily loss and 10% overall loss rule; § 07 gives presets for 8%/4% and 6%/3%. The guards enforce loss and drawdown thresholds as you configure them — they cannot enforce consistency rules, minimum trading day requirements, or news-event restrictions.
Which broker do you recommend?
IC Markets or Pepperstone on a Raw / ECN account. Any low-spread ECN broker with a hedging account type works. See our trusted partners page. A VPS is strongly recommended so the EA runs uninterrupted.
Why has it not traded for a week?
Because nothing qualified. The system averages about twelve trades a month, and roughly six sessions in ten produce no trade at all; the longest quiet stretch in the live record was close to two weeks. The on-chart panel names the exact reason — engines disagreeing, ADX below the gate, a filter or a guard blocking. If the status reads ACTIVE, nothing is wrong.
How often should I update the EA?
MQL5 Market notifies you when a new build is published and updates install through the platform. Run the latest version, and after any update confirm your inputs — particularly RiskPercent, InpPF_DailyResetHour and the guard percentages — still match your account and your firm's published rules.
Can I get a refund if it doesn't perform as expected?
Refunds on MQL5 Market are subject to MQL5's official refund policy. Contact MQL5 support directly for refund requests.
Is source code included?
No. Quorum Gold EA is distributed as a compiled MQL5 executable (.ex5). Source code is not included with the standard MQL5 Market license.
Getting help.
Trading gold and contracts for difference carries substantial risk and is not suitable for every investor. You can lose your entire deposit. Past performance, including both backtested results and live trading results, does not indicate future results. Trade frequency figures on this page describe the historical record and will vary with market conditions.
Outcomes differ between brokers because of spread, slippage, execution speed and liquidity. Two accounts running identical settings at different brokers will not produce identical results.
Quorum Gold applies predefined risk controls and places a stop loss on every position. No automated system eliminates risk or guarantees results. The prop firm guard suite enforces loss and drawdown thresholds as configured; it cannot enforce a firm's consistency rules, minimum trading day requirements, or news-event restrictions, and it cannot protect against gaps that exceed your stop distance.
Test on a demonstration account before committing real capital. Configure the guards to your firm's actual published rules and verify their behaviour in the strategy tester before relying on them.