Leapfrog — User Manual
Instrument: XAUUSD (gold) · Timeframe: any (it works from hourly and daily series internally; M15 is used for validation) Magic: 89770 (the five ladders use 89770–89774) · Version: 1.30 Account type: Hedging
What it does
Five independent "ladders" each watch a different rolling range of gold: the last day (ladder D), about 30 hours (E), about 56 hours (A), about three days (C) and four trading weeks (B). Each ladder rests a stop order at the edge of its range so that a genuine break of that range fills it in the direction of the break. Every order carries a hard stop from the moment it is placed, set as a percentage of the gold price (about 0.3 % for A, C, D and E, about 1 % for B). Once a position is in profit, the exit engine closes half of it at 0.71 R, half of the rest at 0.89 R and half again at 1.01 R (R = the position's own stop distance), and trails the stop 0.71 R behind the best price. There is no averaging down, no grid, no martingale: each ladder holds at most one position per side, and a losing position is closed at its stop.
The ranges often end at the same high or low, so on a clean break several ladders fill at once: most breaks are traded by two to four ladders together. Treat the five ladders as one strategy traded at up to five times the lot per ladder, not as five unrelated systems (chapter "Deposit and position sizing").
What changed in version 1.30
- Trades identical to the previous version (proved deal for deal). It no longer sends a new stop order into a closed market (the broker's daily break, a holiday): the request the broker would have refused is skipped, so the trades are unchanged and the journal no longer fills with 'Market closed' errors.
What changed in version 1.29 - panel, chart labels, restart-safe
- Trades identical to 1.28 (proved deal for deal; see the MANIFEST).
- Faster backtests and less VPS load. Unchanged in practice - Leapfrog was already fast (about 2 minutes for 269 M BlackBull ticks); its per-tick work fell further (the daily ATR read once a day).
- A restart no longer re-places an order on a level that already traded. Each ladder's last levels, its side, its cooldown after a stop, and the hour of its last order check are saved on the account and re-read.
- No refused fills on a small account. A new stop order is placed only when the free margin covers it; when it does not, the panel and a daily journal line say so. At the tested sizes this never binds.
- Clearer journal. The start lines say when the account type's size overrides your lot inputs, and when edited [Custom] inputs are not in force under Settings = Recommended.
- A control panel and chart labels (below).
The panel and the chart (since 1.29)
A small panel in the top-left corner shows what the EA is doing, and the chart labels every level it waits at, every open trade's exit and every closed trade's result. Nothing is drawn in a plain Strategy Tester run; on a live chart and in the visual tester it refreshes every second. Inputs: InpPanel, InpDrawTrades, InpCleanChart (hides the grid while the EA runs and puts it back when it is removed), InpTextSize.
| Line | What it tells you |
|---|---|
LEAPFROG 1.29 XAUUSD lot 0.04 per ladder |
what runs on this chart |
Ladders on: A B C D E - stop orders at their range high and low |
which ladders trade |
Exits: half off at 0.71 / 0.89 / 1.01 R, trail 0.71 R |
the exit rules in one line |
Trading - orders checked every hour |
why it trades now - or Weekend ..., Volatility extreme ..., Very quiet market ... |
Resting orders: 6 (nearest first) / D buy 4210.50, ... |
the orders waiting at the ladders' range edges |
A BUY 0.04 @ 4185.20 +12.40 USD / next half off at 4198.30, stop 4176.00 |
each open trade, its next part-close mark and its stop |
Waiting for margin: next order needs 152.40 (red) |
your broker's margin holds orders back - shown only while the free margin is short |
Closed today: 3 trades +12.40 USD / Last 7 days: ... |
this EA's own closed result (its magic number only, costs included) |
4 buttons. Every action is sent by the EA itself and written to the Experts tab; a panel close carries the comment "... panel close". The second-click buttons need the same button again within 5 seconds.
| Button | What the EA does | Clicks |
|---|---|---|
| Pause entries / Resume entries | Pause: removes the resting orders and places no new ones; open trades keep their exits. The pause is saved on the account and survives a restart. Resume: orders return at the next check. | one |
| Refresh orders | removes the resting orders; fresh ones are placed at the next check with the current settings. No trade is opened or closed. | two |
| Lock profit | moves each winning trade's broker stop to the trail's own price (current price minus the trail giveback in R) when that is above the entry, else to the entry. A losing trade is left alone and a stop is never loosened. | two |
| Close all | closes every trade of this EA at market, removes its orders and pauses entries (press Resume to trade again). | two |
On the chart: each resting order as a dotted line at its ladder's range edge, labelled at the right edge with the ladders on it (buys above their line, sells below); each open trade's next part-close mark. A closed trade shows as a dotted line from its entry to its exit, labelled with why it closed and its net result.
What is new in version 1.21 — two volatility-regime controls
Version 1.21 had one weakness, and it was documented honestly: the engine earns when gold's daily ranges expand and pays a slow cost while they do not. Version 1.21 addresses that directly, with two controls that read the market's own volatility against its own recent history. Both are on by default.
1. Daily volatility stand-down. The engine measures the previous day's average true range as a percentile of its own last 250 days, and does not arm new orders when that percentile is in the top 2% or the bottom 10%. A range-breakout system is run over when volatility explodes and noise-baited when it collapses; it earns in the middle of the distribution. Measured over eight years, the days in the top 2% of daily volatility cost more than every other day combined.
2. Hourly channel-width position sizing. The width of the hourly 20-bar channel, again as a percentile of its own recent history, scales the position size — smaller when the channel is narrow, larger when it is wide, on a curve rather than a switch. Nothing is skipped: a narrow-channel trade is taken at reduced size rather than discarded, because those trades still earn in a trending market even though they earn less. The tenth ladder-like exception is ladder B, whose ten-day range measures a different thing entirely; it is exempt from the sizing and trades at full size.
Both controls are self-calibrating. They compare gold to its own recent behaviour, so they need no retuning when gold's price level or typical range changes.
Getting started
- Attach to an XAUUSD (gold) chart. No set file is needed; the defaults are the validated ones.
- Confirm the journal banner reads
Leapfrog v1.28 | settings Recommended | account Personal | Symbol=XAUUSD | ...and the next lineLeapfrog sizing: base lot per ladder ... | spread limit off. - Leave it running on a VPS. It maintains resting orders around the clock and manages stops on every tick.
Settings: start at the top (since 1.28)
The Inputs tab is ordered by how often you should touch it. With the default Settings: Recommended everything below section 5 is ignored and the validated values are used, whatever those inputs say — so a stray edit in an engine section cannot change how the EA trades.
| Section | What is in it | Touch it? |
|---|---|---|
| 1. Start here | Account type · Settings (Recommended / Custom) · Lot per 10,000 of equity, per ladder (0.04) · Fixed lot per ladder (0 = off) · Virtual balance (0 = off: size as if the account held at most this) · Maximum spread in USD (0 = off) | Yes |
| 2. Ladders on or off | Ladder A (56 h), B (20 trading days), C (64/82 h), D (24 h), E (30/32 h) | Rarely — all five on is the validated setup |
| 3. Prop-firm rules | Your firm's daily / maximum loss, target, best-day cap, Friday close (0 = rule off) | Prop accounts only |
| 4. When not to trade | Weekend protection: no new entries from Friday 19:00, pendings deleted 21:00, positions closed 23:00, resume Monday 01:00 (server time) | Only if your broker's week differs |
| 5. Safety | Hard equity-drawdown flatten % (0 = off) · Magic number | Optional |
| 6–11 [Custom] | Ladder windows · arming distance · stops and targets · exit marks and trail · volatility controls · order handling | Only with Settings: Custom |
Virtual balance. Leapfrog sizes from equity. Set a virtual balance to trade a larger account as if it held only that amount (the EA uses the smaller of equity and the virtual balance). Maximum spread skips order upkeep while the spread is wider than the value you type (in USD, the same on every broker).
What the validation says
All figures are Strategy Tester backtests on real live-broker tick data at 100% history quality, 10,000 USD, the shipped defaults with no set file, leverage as the broker grants it. One binary was compiled once and copied byte-identical to all five terminals. Backtests describe the past and are not a forecast.
Matched window — 1 July 2025 to 7 September 2026, the period for which all five brokers hold real tick data:
| Live feed | Trades | Net | Profit factor | Equity drawdown |
|---|---|---|---|---|
| Vantage Markets | 1,959 | +9,749 (+97%) | 1.74 | 5.9% |
| Pepperstone EU | 2,022 | +9,241 (+92%) | 1.65 | 7.9% |
| OANDA | 2,230 | +9,300 (+93%) | - | 9.9% |
| BlackBull Markets | 1,911 | +8,449 (+84%) | 1.67 | 5.1% |
| Fusion Markets | 1,980 | +8,260 (+83%) | 1.58 | 6.7% |
These five rows were measured on version 1.20. Versions 1.21 through 1.28 changed inputs, code paths and the Inputs-tab layout, and each one is proved to place the same deals as the version before it under the shipped defaults (parity tables in "What changed in version 1.21" onward) - the chain runs unbroken to 1.28, the version this build ships. A direct Strategy Tester check on the current 1.28 binary: BlackBull, 1 April 2025 to 19 September 2026, 2,388 trades, net +12,261.24, profit factor 1.77, equity drawdown 5.29%.
Full market cycle — OANDA is the only feed carrying tick data back to 2018:
| Window | Trades | Net | Profit factor | Equity drawdown |
|---|---|---|---|---|
| 2018-07 to 2026-09 (8.2 years) | 10,233 | +20,388 (+204%) | - | 9.9% |
(Profit factor is not printed for a row below 1.5; net and equity drawdown are the figures reported there.)
Backtest, MetaTrader 5 Strategy Tester, real ticks, Vantage / Pepperstone / OANDA / BlackBull / Fusion, 2025-07-01 to 2026-09-07.
Read the spread between brokers, not the top row. The low end to the high end is 8,260 to 9,749, a factor of 1.18 across five different brokers running the same binary. That matters more than any single number: it means the result is a property of the strategy rather than of one broker's costs. Every feed is positive and every feed stays under 10% equity drawdown.
The honest headline is the worst feed, not the strongest: +83% over fourteen months at 6.7% drawdown.
What changed in version 1.21
Backtest, MetaTrader 5 Strategy Tester, real ticks, OANDA GOLD.pro, 2018-07-01 to 2026-09-07 (the 8.2-year full-cycle window).
Version 1.21 shipped a day-expansion filter. Its input read "only arm when the day is expanding", but the code did something else: it let the order fill and then closed the position, paying a full spread on every rejection. It fired on 24-40% of all fills and it cut winners — across the full cycle the position-level win rate is 50.4% with it and 68.1% without.
Switching it off takes the eight-year record from +10,317 to +20,388 and reduces equity drawdown from 15.1% to 9.9%. Better return at lower risk, on all five brokers.
Rebuilding the filter properly — checking the condition before placing the order, which is what the
label always promised — was tested and is better than the old behaviour but still worse than removing
it. Both forms remain available (Expansion gate: 0=off 1=after fill 2=on arm) and both ship off.
What changed in version 1.22
Version 1.22 adds one optional input and changes nothing else. Size by the last closed event's outcome
(off by default) scales each new order up after the engine's last completed break won and down after it
lost, by the percentage in Tilt. It was built because an earlier version of the engine showed its profits
arriving in runs. On the current engine that pattern is gone: the two volatility controls of version 1.21
already remove the days that produced the runs, and with the option switched on the engine earned 4–15 %
less over fourteen months of real broker ticks on three brokers. It therefore ships off. With the option off,
version 1.22 places exactly the same orders as version 1.21.
What changed in versions 1.23–1.28
- 1.24 — trade requests are no longer sent while the market is closed (they could only fail, and the old version repeated them on every tick of a closed session, which filled the tester's journal and slowed backtests). Proved to place the same deals: 107 trades, +309.21, identical deal for deal (Pepperstone, 28 August – 19 September 2026).
- 1.25 — a new first input, Account type (below). With the default Personal it trades exactly like 1.24 (proved deal for deal on the same window).
- 1.26 — a new input group, Prop-firm rules (chapter "Prop-firm rules: your firm's own numbers"): daily and maximum loss, profit target, best-day cap, Friday close. With every rule off it trades exactly like 1.25 (107 trades, +309.21, deal for deal); the prop account types switch the loss limits on for you.
- 1.27 — research build only (a switch that makes the engine's constants tunable in the project's research binary). The shipped behaviour is unchanged.
- 1.28 — one screen of settings (chapter "Settings: start at the top"). The inputs are ordered Start here / Ladders / Prop-firm rules / When not to trade / Safety, and the engine sits behind Settings: Recommended (the validated values) or Custom. New in Start here: Virtual balance and Maximum spread in USD (both off by default). The ladder labels now state the windows the code actually uses (A 56 h, B 20 trading days, C 64/82 h, D 24 h, E 30/32 h; earlier labels said 48 h / 10 days / 72 h / 24 h). 78 inputs that never acted in the validated configuration were removed from the Inputs tab: the older partial-close marks, break-even and time-based loss cuts (the exit engine replaces all of them and they never ran), the ATR-based stop and arm alternatives (the percent-of-price mode is always on), and switches measured as no improvement (day-expansion gate, trend tilt, record and streak sizing, self-tuning, the second ladder B). Proved to trade exactly like 1.26: 671 trades, +2,267.45, identical deal for deal (IC Markets real ticks, 1 May - 5 September 2026); with Settings: Recommended, wrong values in the engine sections change nothing.
Prop-firm accounts: one choice (since 1.25)
The first input, Account type (InpAccountMode), is all a prop-firm account needs:
| Account type | What it does |
|---|---|
| Personal (default) | the lot inputs below apply (0.04 lot per 10,000 of equity per ladder) |
| Prop firm 2-step — challenges with a 5 % daily and 10 % maximum loss | 0.03 lot per 10,000 per ladder; weekend protection always on; fixed lot ignored |
| Prop firm 1-step — challenges with a 3 % daily and 6 % maximum loss | 0.02 lot per 10,000 per ladder; weekend protection always on; fixed lot ignored |
The first Journal line names the choice (Leapfrog v1.26 | account Prop firm 2-step ...). Proof that the prop size is
exactly what it says: Prop firm 2-step on 1.25 placed the same 87 deals, to the cent, as 1.24 with 0.03 lot per 10,000.
What the measurements say — a simulation that replays the backtest's own days in random blocks (10,000 paths, the challenge rules applied at every trade close); a statement about the tested history, not a prediction:
| history | account type | passes per attempt | daily-loss breaches | median trading days to funded |
|---|---|---|---|---|
| BlackBull / Vantage, Jul 2025 – Sep 2026 | Prop firm 2-step | 100 % | none | 95–101 |
| OANDA, Jul 2018 – Sep 2026 (quiet years included) | Prop firm 2-step | 67 % | none | 386 — the rest simply took longer than a year |
| BlackBull / Vantage, Jul 2025 – Sep 2026 | Prop firm 1-step | 100 % | none | 89–96 |
| OANDA, 2018–2026 | Prop firm 1-step | 51 % | none | 362 |
| OANDA, 2018–2026 | Personal (shipped size) on a 2-step | 72 % | about 1 attempt in 10 | 289 |
Read it as: the prop sizes never broke a daily-loss rule in eight years of simulated attempts; what they cannot do is make a quiet market pay. Leapfrog earns when gold's daily ranges expand. A challenge without a time limit is the right kind. Since 1.26 the EA also keeps its own count of the daily and maximum loss (next chapter); it does not read the firm's news calendar — check the firm's news and weekend rules before you start.
Prop-firm rules: your firm's own numbers (since 1.26)
The Account type (chapter "Prop-firm accounts: one choice") chooses the size. The group right under it, Prop-firm rules, enforces your firm's limits. Choosing Prop firm 2-step or Prop firm 1-step already fills in the two loss limits for you (5 % daily and 10 % maximum, or 3 % and 6 %; both fixed, and the EA acts 0.5 % before each); type your firm's own numbers to override them. With Personal every rule is off until you type a number.
When a limit is about to be reached, the EA closes its own trades, deletes its own orders and stops opening new ones: until the firm's next day for the daily rules, for good for the maximum loss and the profit target. The Journal says which rule acted and at what equity:
LEAPFROG prop-firm rule: daily loss limit (equity 95512.40, day start 100020.00, firm limit 95020.00) - trades closed, orders deleted, paused until the firm's next day
and the start line lists what is on:
LEAPFROG prop-firm rules: account size 100000.00 | daily loss 5.00% of account size from the higher of day-start balance and equity - the EA acts at 4.50% of account size | maximum loss 10.00% (fixed) - the EA acts at 9.50% | ...
The inputs (group "3. Prop-firm rules (0 = rule off)")
| Input | What to enter | Default |
|---|---|---|
Account size (InpPropAccountSize) |
the challenge's account size, e.g. 100000 (0 = the balance when the EA first starts) | 0 |
Daily loss limit % (InpPropDailyLossPct) |
the firm's daily loss, e.g. 5 | 0 = off; a prop account type fills in 5 or 3 |
Daily loss limit is a % of (InpPropDailyPctOf) |
Account size (the same amount every day - most firms) or the day-start value | Account size |
Daily loss is counted from (InpPropDailyFrom) |
the value at the start of the firm's day: the higher of balance and equity (strictest, safe for every firm), balance or equity | the higher of the two |
Maximum loss limit % (InpPropMaxLossPct) |
the firm's maximum loss, e.g. 10 | 0 = off; a prop account type fills in 10 or 6 |
Maximum loss limit type (InpPropMaxRule) |
Fixed (account size minus the limit - most two-step challenges), Trailing: highest day-start balance, Trailing: highest equity, live | Fixed |
A trailing limit stops rising at the account size (InpPropTrailLock) |
most trailing firms stop moving the limit once it reaches the starting balance | yes |
Act this many % before each loss limit (InpPropSafetyPct) |
the safety margin: 0.5 means the EA acts at 4.5 % when the firm's limit is 5 % | 0.5 |
Profit target % (InpPropTargetPct) |
close everything and stop when equity reaches the target (0 = keep trading) | 0 = off |
Best-day cap % (InpPropDayGainPct) |
close everything and pause for the day once the day's gain reaches this (for firms with a consistency rule) | 0 = off |
Hour the firm's day starts (InpPropDayStartHour) |
the hour on your platform's clock (the Market Watch time) at which the firm restarts its daily loss | 0 |
Friday: close all at this hour (InpPropFridayCloseHour) |
for firms that do not allow holding over the weekend; trading resumes on Monday | 0 = off |
New challenge on the same login (InpPropResetState) |
set to true for ONE start when you begin a new challenge on the same login, then back to false | false |
Examples - what to type
From the LuxAlgo prop-firm directory on 23 September 2026 (the daily-loss wording is inferred by that directory; your firm's own rules page is always the authority, and firms change their rules):
| Challenge (100,000 account) | Daily loss % | Maximum loss % and type | Profit target % |
|---|---|---|---|
| FTMO Normal, 2-step | 5 | 10, Fixed | 10, then 5 |
| FTMO Normal, 1-step | 3 | 10, Fixed | 10 |
| FundingPips, 2-step | 5 | 10, Fixed | 8, then 5 |
| FundingPips, 1-step | 3 | 6, Fixed | 10 |
| The 5%ers High Stakes, 2-step | 5 | 10, Fixed | 8, then 5 |
| Blue Guardian Pro, 1-step | 3 | 6, Fixed | 10 |
All six count the daily loss as a share of the account size from the previous day's closing balance, open trades included. Leave counted from at the higher of balance and equity - it is never later than the firm's own meter.
Profit target: set it for the challenge phases only. When the target is reached the EA stops for good on that login; on the funded account set it back to 0.
The firm's day. Most firms restart the daily loss at midnight of the platform's own clock: leave 0. If your firm names another time, convert it to the Market Watch clock. Gold is closed for about an hour around the broker's midnight on most platforms, so for gold an hour's difference rarely matters; a market that trades through midnight (Bitcoin) needs the exact hour.
Restarts. The EA remembers the account size, the day's starting value, the highest balance and whether a rule
stopped it, across restarts of the platform (terminal global variables named PR<login>_<magic>_...). A restart in
the middle of the day does not give it a fresh daily allowance.
What these rules do not do
- They close this EA's trades only. The limits are measured on the whole account's equity, so trades from another EA or by hand count toward them; give every EA on the account the same numbers.
- The EA acts on the first price tick past its limit. A gap or a very fast market can carry the loss a little further before the closing trades fill - that is what the safety margin is for; do not set it to 0 on a real challenge.
- No news filter. Some funded accounts forbid opening or closing trades a few minutes around high-impact releases. The platform's economic calendar cannot be replayed in the Strategy Tester, so a news rule could not be proved the way every rule above was; pause the EA by hand around those releases if your firm requires it.
- No minimum trade duration and no minimum number of trading days.
Proof. With every rule off, this version placed the same deals as the version before it, deal for deal (107 trades, net +309.21, Pepperstone real ticks, 28 August - 19 September 2026). Each rule was then switched on at a level the same weeks reach; at all 11 triggers the EA closed its trades, opened nothing until the pause ended, and placed exactly the same deals as with the rules off up to the first trigger.
Reproduce the tests yourself
In the Strategy Tester: expert LEAPFROG, XAUUSD, M15, 2026.08.28 to 2026.09.19, Every tick based on real ticks,
deposit 10,000, inputs right-click → Defaults. Pepperstone gives 107 trades, net +309.21, profit factor 1.53, equity
drawdown 4.16 %. Full-window rows (BlackBull, Vantage, OANDA 2018–2026) are being measured on 1.25.
Deposit and position sizing
The default sizes 0.04 lot per ladder per 10,000 USD of equity and rounds down to the broker's minimum lot. Below roughly 2,500 USD every ladder trades the 0.01 minimum, so the strategy behaves like a fixed-lot system and its drawdown becomes a larger share of the balance. The hourly sizing control is also blunted on small accounts: it cannot size below the broker minimum, so the reduction it applies in narrow-channel conditions is partly lost. Recommended minimum: 5,000 USD; 10,000 USD for the figures above to apply as printed.
Most breaks are traded by two to four ladders at the same second (measured: 81-84 % of positions sit in such events), so the exposure on one break is up to five times the lot per ladder. Switching ladders off lowers that exposure but costs more in the worst weeks than it saves over a full cycle (measured over 8 years: every two- or three-ladder subset had a 20-75 % deeper worst week for the same profit), which is why the minimum stays at 5,000 USD rather than 'run fewer ladders'.
Requirements and limits
- Gold (XAUUSD or your broker's spelling). On another instrument it loads, prints that it will not trade, and stays flat.
- Hedging account. The five ladders can hold positions on both sides at once.
- A raw-spread or ECN account is preferred: the partial-profit marks are small fractions of the daily range, and a wide spread takes a visible share of them.
- The volatility controls need history to calibrate: 250 daily bars and 200 hourly bars. On a fresh symbol with little history they return "unknown" and the engine trades ungated rather than standing down on missing data.
- Backtested on real broker tick data. Backtest results only — not a promise or a forecast. Test on a demo account first.
Is it waiting, or is it broken? — the regime monitor
This product earns in a particular market state and goes quiet outside it. That is disclosed above, but a disclosure without a number is not usable: meeting a flat stretch, you cannot tell whether the machine is waiting for its conditions or whether its edge has changed. This section gives you the one measurement that separates those, taken from this product's own record.
The state to watch is the daily Average True Range of the traded instrument, expressed as a percentile of its own trailing 250 days — not a fixed number of dollars or pips, which goes stale as the instrument reprices. Most charting packages will plot ATR; the percentile is simply where today's ATR sits within the last year of its own values.
Measured in the Strategy Tester on 8.2 years of OANDA GOLD.pro real ticks, 2018 to 2026 (92 months). Monthly net by that month's volatility band:
| band | months | mean per month |
|---|---|---|
| below 0.35 | 18 | +$16 |
| 0.35 – 0.50 | 16 | below breakeven |
| 0.50 – 0.65 | 18 | +$72 |
| 0.65 – 0.80 | 15 | +$320 |
| above 0.80 | 25 | +$251 |
Backtest, MetaTrader 5 Strategy Tester, real ticks, OANDA GOLD.pro, 2018 to 2026.
These are MONTHS, not the EA's own gate — do not read them as a gap in it. The stand-down reads each day's percentile, and by that daily measure the only two losing bands over 8.2 years are the bottom 10% and the top 2% — which are exactly the two the EA already stands down in. Every band between them is positive or flat by day. Raising the lower bound to 0.35 or 0.50 was tested and costs net (+$3,347 shipped against +$3,019 and +$2,799).
Backtest, MetaTrader 5 Strategy Tester, real ticks, OANDA GOLD.pro, 2018 to 2026.
Why a month can lose while its days do not: inside those sub-0.50 months the damage is done by their more active days — days at the 50–65 percentile underperform inside a quiet month, while the same percentile earns $5 a day across the record as a whole. What hurts is volatility that is high against its own recent neighbourhood, not volatility that is low in absolute terms. An acceleration filter for exactly that was tested and rejected: it added cost without improving drawdown, so it is not part of the shipped engine.
Backtest, MetaTrader 5 Strategy Tester, real ticks, OANDA GOLD.pro, 2018 to 2026.
Good state: volatility percentile at or above 0.50 (63% of the record). In that state it earned in 60% of months, median +$80, and its deepest three-month dip stayed within about 10% of a 10,000 USD account — the tripwire below.
Tripwire — while volatility is at or above 0.50, a three-month dip deeper than about 10% of the account is outside anything the record contains. Below 0.50, a flat or mildly negative stretch is documented behaviour and is not evidence of decay.
Backtest, MetaTrader 5 Strategy Tester, real ticks, OANDA GOLD.pro, 2018 to 2026.
Read this alongside the concentration. The top 3 months of 99 carry 78% of all profit; the top 6 carry more than 100% of it, meaning the remaining 93 do not add further profit in aggregate. This engine waits and then earns in bursts. Any three-month window is close to uninformative about it, in either direction.
What this cannot tell you. While the market is outside the good state, a temporary quiet period and a permanent change in behaviour look identical. The tripwire is the earliest point at which they separate, not an early warning. Nothing here is a guarantee; it is the historical extreme of a backtested record, and being beyond it is evidence rather than proof.
Support
Report issues with the journal banner line and the broker name.
Complete reference — every input, its set-file key and default
Generated from the compiled source; enum defaults are the source names — the Inputs tab shows their plain labels. Sections 6-11 act only with Settings: Custom; with Recommended the validated values in this table are used whatever the inputs say.
| Group | Input | Type | Default | Meaning |
|---|---|---|---|---|
| 1. Start here | InpAccountMode |
AccountMode | ACCOUNT_PERSONAL | Account type (prop mode sets the size itself) |
| 1. Start here | InpProfile |
StrategyProfile | PROFILE_RECOMMENDED | Settings (Custom unlocks the [Custom] sections) |
| 1. Start here | InpLotPer10k |
double | 0.04 | Lot per 10,000 of equity, per ladder |
| 1. Start here | InpFixedLot |
double | 0.0 | Fixed lot per ladder (0 = size from equity) |
| 1. Start here | InpVirtualBalance |
double | 0 | Size as if the account held at most this (0 = off) |
| 1. Start here | InpMaxSpreadUsd |
double | 0 | Skip order upkeep above this spread, USD (0 = off) |
| 2. Ladders on or off | InpRunA |
bool | true | Run ladder A (56-hour range) |
| 2. Ladders on or off | InpRunB |
bool | true | Run ladder B (20-day range) |
| 2. Ladders on or off | InpRunC |
bool | true | Run ladder C (64/82-hour range) |
| 2. Ladders on or off | InpRunD |
bool | true | Run ladder D (24-hour range) |
| 2. Ladders on or off | InpRunE |
bool | true | Run ladder E (30/32-hour range) |
| 3. Prop-firm rules (0 = rule off) | InpPropAccountSize |
double | 0 | Account size (0 = balance when the EA first starts) |
| 3. Prop-firm rules (0 = rule off) | InpPropDailyLossPct |
double | 0 | Daily loss limit % (0 = off) |
| 3. Prop-firm rules (0 = rule off) | InpPropDailyPctOf |
PropPctOf | PROP_PCT_OF_SIZE | Daily loss limit is a % of |
| 3. Prop-firm rules (0 = rule off) | InpPropDailyFrom |
PropDayFrom | PROP_DAY_HIGHER | Daily loss is counted from |
| 3. Prop-firm rules (0 = rule off) | InpPropMaxLossPct |
double | 0 | Maximum loss limit % (0 = off) |
| 3. Prop-firm rules (0 = rule off) | InpPropMaxRule |
PropMaxRule | PROP_MAX_FIXED | Maximum loss limit type |
| 3. Prop-firm rules (0 = rule off) | InpPropTrailLock |
bool | true | A trailing limit stops rising at the account size |
| 3. Prop-firm rules (0 = rule off) | InpPropSafetyPct |
double | 0.5 | Act this many % of account size BEFORE each loss limit |
| 3. Prop-firm rules (0 = rule off) | InpPropTargetPct |
double | 0 | Profit target %: close all and stop for good (0 = off) |
| 3. Prop-firm rules (0 = rule off) | InpPropDayGainPct |
double | 0 | Best-day cap %: close all and pause for the day (0 = off) |
| 3. Prop-firm rules (0 = rule off) | InpPropDayStartHour |
int | 0 | Hour the firm's day starts, broker server time (0-23) |
| 3. Prop-firm rules (0 = rule off) | InpPropFridayCloseHour |
int | 0 | Friday: close all at this hour (0 = off) |
| 3. Prop-firm rules (0 = rule off) | InpPropResetState |
bool | false | New challenge, same login: true once |
| 4. When not to trade | InpUseWeekend |
bool | true | Weekend protection (Friday close, Monday resume) |
| 4. When not to trade | InpFriNoEntryHr |
int | 19 | Friday: no new entries from this hour (server) |
| 4. When not to trade | InpFriDelPendHr |
int | 21 | Friday: delete pending orders at this hour |
| 4. When not to trade | InpFriClosePosHr |
int | 23 | Friday: close positions at this hour |
| 4. When not to trade | InpMonResumeHr |
int | 1 | Monday: resume at this hour |
| 5. Safety | InpEqStopPct |
double | 0.0 | Flatten and stop at this equity drawdown, % (0 = off) |
| 5. Safety | InpMagic |
long | 89770 | Magic number (the ladders use it and +1..+5) |
| 6. Ladder windows [Custom] | InpKAbuy |
int | 112 | Ladder A buy window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKAsell |
int | 112 | Ladder A sell window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKBbuy |
int | 640 | Ladder B buy window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKBsell |
int | 592 | Ladder B sell window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKCbuy |
int | 128 | Ladder C buy window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKCsell |
int | 164 | Ladder C sell window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKDbuy |
int | 48 | Ladder D buy window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKDsell |
int | 48 | Ladder D sell window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKEbuy |
int | 60 | Ladder E buy window, 30-minute bars |
| 6. Ladder windows [Custom] | InpKEsell |
int | 64 | Ladder E sell window, 30-minute bars |
| 6. Ladder windows [Custom] | InpBCalendar |
bool | true | Ladder B uses calendar-day extremes |
| 6. Ladder windows [Custom] | InpBCalDays |
int | 20 | Ladder B calendar days |
| 6. Ladder windows [Custom] | InpInsetBuyPct |
double | 0.0284 | Buy order inset from the level, % of price |
| 6. Ladder windows [Custom] | InpInsetSellPct |
double | 0.0521 | Sell order inset from the level, % of price |
| 7. Arming distance [Custom] | InpArmPctA |
double | 0.285 | Ladder A arm distance, % of price |
| 7. Arming distance [Custom] | InpArmPctB |
double | 0.989 | Ladder B arm distance, % of price |
| 7. Arming distance [Custom] | InpArmPctC |
double | 0.284 | Ladder C arm distance, % of price |
| 7. Arming distance [Custom] | InpArmPctD |
double | 0.259 | Ladder D arm distance, % of price |
| 7. Arming distance [Custom] | InpArmPctE |
double | 0.189 | Ladder E arm distance, % of price |
| 7. Arming distance [Custom] | InpUseRegimeArm |
bool | true | Adapt arm distance to trend strength |
| 7. Arming distance [Custom] | InpErDays |
int | 20 | Trend-strength lookback, days |
| 7. Arming distance [Custom] | InpErRankDays |
int | 252 | Trend-strength ranking window, days |
| 7. Arming distance [Custom] | InpArmTrendMultB |
double | 0.33 | Ladder B arm multiplier in trends |
| 7. Arming distance [Custom] | InpArmTrendMultD |
double | 0.40 | Ladder D arm multiplier in trends |
| 7. Arming distance [Custom] | InpArmTrendMultACE |
double | 1.00 | Ladders A/C/E arm multiplier in trends |
| 8. Stops and targets [Custom] | InpPctA |
double | 0.3001 | Ladder A stop, % of price |
| 8. Stops and targets [Custom] | InpPctB |
double | 0.9925 | Ladder B stop, % of price |
| 8. Stops and targets [Custom] | InpPctC |
double | 0.2998 | Ladder C stop, % of price |
| 8. Stops and targets [Custom] | InpPctD |
double | 0.3000 | Ladder D stop, % of price |
| 8. Stops and targets [Custom] | InpPctE |
double | 0.2800 | Ladder E stop, % of price |
| 8. Stops and targets [Custom] | InpSlPctMult |
double | 1.00 | Global stop multiplier |
| 8. Stops and targets [Custom] | InpTpRatioA |
double | 7.667 | Ladder A target as a multiple of the stop |
| 8. Stops and targets [Custom] | InpTpRatioB |
double | 2.100 | Ladder B target as a multiple of the stop |
| 8. Stops and targets [Custom] | InpTpRatioC |
double | 5.000 | Ladder C target as a multiple of the stop |
| 8. Stops and targets [Custom] | InpTpRatioD |
double | 8.333 | Ladder D target as a multiple of the stop |
| 8. Stops and targets [Custom] | InpTpRatioE |
double | 8.214 | Ladder E target as a multiple of the stop |
| 9. Exit [Custom] | InpEP1R |
double | 0.71 | Close half at this profit (1st mark), R |
| 9. Exit [Custom] | InpEP2R |
double | 0.89 | Close half again at this profit (2nd mark), R |
| 9. Exit [Custom] | InpEP3R |
double | 1.01 | Close half again at this profit (3rd mark), R |
| 9. Exit [Custom] | InpTrail0R |
double | 0.71 | Trail giveback before the 1st mark, R |
| 9. Exit [Custom] | InpTrail1R |
double | 0.71 | Trail giveback after the 1st mark, R |
| 9. Exit [Custom] | InpTrail2R |
double | 0.71 | Trail giveback after the 2nd mark, R |
| 10. Volatility controls [Custom] | InpMaxD1AtrPct |
double | 0.98 | Stand down: yesterday's D1 ATR percentile at or above |
| 10. Volatility controls [Custom] | InpMinD1AtrPct |
double | 0.10 | Stand down: yesterday's D1 ATR percentile below |
| 10. Volatility controls [Custom] | InpD1AtrPeriod |
int | 14 | D1 ATR period |
| 10. Volatility controls [Custom] | InpD1AtrRank |
int | 250 | Percentile ranking window, D1 bars |
| 10. Volatility controls [Custom] | InpH1SizeBase |
double | 0.25 | H1-channel sizing: base (0 = off) |
| 10. Volatility controls [Custom] | InpH1SizeK |
double | 1.5 | H1-channel sizing: slope k |
| 10. Volatility controls [Custom] | InpH1SizePow |
double | 2.0 | H1-channel sizing: curvature |
| 10. Volatility controls [Custom] | InpH1WidthBars |
int | 20 | H1 channel lookback, bars |
| 10. Volatility controls [Custom] | InpH1WidthRank |
int | 200 | Percentile ranking window, H1 bars |
| 10. Volatility controls [Custom] | InpH1GateExemptB |
bool | true | Ladder B is exempt from the H1-channel sizing |
| 11. Order handling [Custom] | InpRependEpsPct |
double | 0.02 | Re-aim orders when level moves, % of price |
| 11. Order handling [Custom] | InpUseSparseClock |
bool | true | Place new orders only at clock slots |
| 11. Order handling [Custom] | InpArmEveryH |
int | 4 | Clock slot spacing, hours |
| 11. Order handling [Custom] | InpUseSideState |
bool | true | One side per ladder at a time |
| 11. Order handling [Custom] | InpSideHyst |
double | 0.15 | Side flip threshold, window fraction |
| 11. Order handling [Custom] | InpPendTtlH |
int | 36 | Pending order lifetime, hours (fallback) |
| 11. Order handling [Custom] | InpTtlSqrtC |
double | 5.0 | Lifetime scale: c x sqrt(window) |
| 11. Order handling [Custom] | InpSlCooldownMin |
int | 15 | Pause after a stop, minutes |
| 12. Panel and chart | InpPanel |
bool | true | Show the control panel (Pause, Refresh orders, Lock profit, Close all) |
| 12. Panel and chart | InpDrawTrades |
bool | true | Describe the levels, orders and trades on the chart |
| 12. Panel and chart | InpCleanChart |
bool | true | Clean chart: hide the grid (put back when the EA is removed) |
| 12. Panel and chart | InpTextSize |
int | 10 | Text size of the panel and the chart labels (8-16) |