Before we list an EA's source, we read it. Last time — Quantum Queen X — we found three hardcoded historical date tables buried in it, the kind that only ever move backtest results.
This time, reading Quantum King 3.1 (AUDCAD M5), the finding runs the other way: across 1,590 lines there is no licence check, no trial timer, no phone-home, and no hardcoded date table of any kind. We grepped the whole file for licen, trial, expire, activat, ExpertRemove and for date literals shaped like D'2025.xx.xx'. Every one returned zero hits.
In this corner of the market that isn't a given, so it's worth saying first.
How it actually trades
The strategy is simpler than you'd expect — four sentences cover it.
Signal: one Envelopes, on H1
The entire system uses a single indicator: Envelopes(14, 0.2) on H1, read from the last closed bar rather than the forming one — done properly, so there's no repainting issue.
// SELL when Bid breaks above the upper band;
// BUY when Ask breaks below the lower band
Bid above the upper band arms a SELL; Ask below the lower band arms a BUY. This is mean reversion, not breakout.
Critically, the two sides are evaluated independently, so it can hold a long basket and a short basket simultaneously — which is why a hedging account is mandatory.
Adding: wider steps, larger lots, but a hard ceiling
This is the part to read carefully:
- Grid step: 200 points base, multiplied by 1.2 for every extra position on that side, floored at 10 points. The deeper it goes, the further away the next entry sits — it is deliberately slowing itself down.
- Lot progression: each addition is the previous lot plus one initial lot. Note that's addition, not doubling: 0.01 → 0.02 → 0.03 → 0.04… far gentler than a classic martingale's 0.01 → 0.02 → 0.04 → 0.08.
- A 10-hour freeze window: within 10 hours of the last entry the lot is held flat instead of increased. We haven't seen this design elsewhere — it's a brake on rapid consecutive adds.
- Hard lot cap:
QK_MAX_CONFIG_LOT = 0.10. The normaliser clamps any requested volume into 0.01–0.10, and it is a constant — no input can raise it.
const double high = MathMin(broker_max, QK_MAX_CONFIG_LOT); // 0.10
return NormalizeDouble(QKClamp(low + units*step, low, high), 8);
That 0.10 ceiling is the most concrete guard in its risk structure — but note it bounds per-position size, not position count.
Exit: basket target, close newest plus part of oldest
A basket target is computed from the volume-weighted entry price. On target it closes the newest position and partially closes the oldest by one initial lot. Trimming from both ends shrinks the basket gradually rather than flattening it at once.
Filters: weekday switches plus NFP Friday
Every weekday has its own switch, all on by default. Disable_NFP_Friday defaults to true and is implemented as "the first Friday of the month":
if(allowed && Disable_NFP_Friday && now.day_of_week==5 && now.day<=7)
allowed = false;
That's correct — NFP does land on the first Friday. There's also a 30-minute cooldown between entries, gated against the opposite side's last open/close as well.
Three boundaries that have to be stated plainly
1. No stop loss by default
There is break-even logic that modifies a position's SL. But its trigger, Inp_BreakEven, defaults to 0 — disabled. Neither of the two entry OrderSend calls attaches a stop.
Put plainly: install it and run the defaults, and your positions carry no stop loss.
2. The account-level guards also ship disabled
It offers a set of account-level loss limits (Inp_Prejuizo_Saldo_Atual by amount, Inp_Prejuizo_Porcentagem_Atual by percent, Parar_Prejuizo_Atual to halt once hit). The code is sound — but the three defaults are 0, 0 and false, so the whole group is inert out of the box.
Together those two points mean: default configuration equals no protection at any level. If you want an account stop, you have to set it yourself.
3. Automatic lot sizing has a threshold that's easy to miss
The auto-risk block reads:
double lot = 0.01;
if(Risco_Preset > 2 && balance > 0.0)
lot = 0.01 * MathMax(1.0, MathFloor(balance/10000.0));
Note the Risco_Preset > 2 condition — and Risco_Preset defaults to exactly 2. So under defaults, automatic sizing always returns 0.01 no matter how large the balance grows. That isn't a bug, but if you assumed "automatic risk" scales position size with the account, it won't.
So where does the risk actually sit
Not in per-trade size — the 0.10 cap handles that. It sits in count: a side can keep adding, and the only exit is price returning to the basket target. In a one-way market floating loss accumulates with each addition, and not one line of code cuts it at any threshold unless you enabled that account-level group yourself.
That is the tail risk inherent to a grid, and no parameter tuning removes it. This one is gentler than a classic martingale — additive rather than doubling, widening steps, a 10-hour freeze, a capped lot — but it is the same family. For how these strategies fail, see are grid and martingale EAs dangerous.
What we changed, and what we didn't
Readability only: all comments and UI strings translated to English, a header block added, our store details included. All 31 functional inputs keep their exact names and default values — your existing .set files still load. Only six purely decorative section labels had their display text translated; those six variables are declared and never referenced anywhere in the code.
The cleaned file was compiled in MetaEditor to verify: Result: 0 errors, 0 warnings. The resulting .ex5 ships in the package so you can check that this source really does build a working program.
We changed no trading logic whatsoever. Every claim above is something you can verify line by line in the source — which is the entire point of buying source.
The source is here: Quantum King Source Code v3.1; the compiled EA it corresponds to is Quantum King MT5.
Risk note: this is a code audit, not investment advice. Every conclusion here comes from actually reading and compiling the source. Grid strategies carry extreme tail risk and can lose an entire account in adverse conditions. Only trade money you can afford to lose.