DJCUSD.c, EURUSD, GBPUSD, NACUSD.c, SPCUSD.c, XAUUSD · H4→M15

REGULATOR — Break & Retest Log

Every setup the EA reached a decision on, and why it did or did not take it.

armed, nothing seen
brt-upcomers started 2026-09-28 and has not reached a decision yet. The EA is running; there has been no setup to judge.
built 28 Sep 2026 00:06 UTC

Live book brt-upcomers · Upcomers Thunderbolt 1M real money · since 2026-09-28

The books — every account this rule has run on
epochaccountfromtoclosedmoneystate
brt-ftmo-demoFTMO demo, 100k2026-09-232026-09-2711+1,694.25retired
brt-upcomersUpcomers Thunderbolt 1M · real money2026-09-28———current

A book is its rule and its account together: change either and the epoch is retired and a new one opens. ⛔ Results from two epochs are never pooled — a different account is a different broker, different spreads and a different cost per trade. A retired book’s own journal is kept under journal/archive/.

What is this? — start here if you have not seen it before

The short version

This is a trading program that watches six markets — gold, two currency pairs and the three big US stock indices — and takes a specific kind of trade automatically. This page is its diary: every setup it looked at, and why it did or did not take it.

The trade it looks for

Prices tend to stall at particular levels — places where the market has turned before. The program finds those levels by itself, on the four-hourly chart, with no lines drawn by hand, and then watches the 15-minute chart for the trade.

Then it waits for three things in order. Price has to break through a level and close beyond it. It has to travel away, so a brief poke through does not count. And then it has to come back and touch that level again and hold. That last part is the retest, and it is the whole idea: a level that used to stop price should now support it from the other side.

Why most setups are refused

⭐ This is the part worth understanding, because it is most of what you will see here. A setup can look perfect and still be declined — the spread is too wide that second, the trade would be against the bigger trend, a position is already open, the level simply is not good enough, or the level was broken and never came back to be retested.

Every refusal is written down with its reason. A strategy is defined as much by what it declines as by what it takes, and a filter nobody can see is a filter nobody can improve.

What happens once it is in

It risks half a percent of the account on each trade, and never guesses the size — it is calculated from the distance to the stop-loss.

When the trade is up by the amount it originally risked, it banks a third. The remainder runs for twice the risk. The stop does not move.

⭐ The break-even move is switched off, and that was a finding. On fourteen months of history it lifted the win rate from 34% to 48% and cost about 12R: it turned losers into scratches, which flatters the win rate, while cutting short the few large winners the shape depends on. Win rate is exactly the number a break-even rule is built to improve, and it is the number that fooled us for a day. ⚠ A win rate on this page that looks low is the rule working, not failing — the remainder runs to about 3.1× what it risks, so the break-even point is about 24.5%, not the 33% a 2:1 target would need.

⚠ What this does not claim

It is running on a demo account, not real money. The numbers on this page are from a handful of trades, which is far too few to say whether the strategy makes money.

⛔ Measured properly, it has no demonstrated edge. Over 27 months and 357 trades the edge before costs is zero — and costs are about −0.03R a trade, so the account loses at roughly the price of trading. Seven configurations in a row looked good on the data they were chosen on and reversed on data they had not seen. ⚠ An earlier version of this page said the raw signal was positive on every instrument before costs. That was arithmetic error, not a finding: the tool computing it added the commission back onto a number that never contained it. Corrected, the edge before costs is +0.018R across 481 forex trades, which is indistinguishable from nothing, and it is negative on one of them.

⭐ So this page is not a claim that the strategy works. It is a record of a system whose entry rule has no measured edge, running unchanged so that the question can be answered once, honestly, on data nobody can search afterwards.

The point of all this machinery is not to prove it works. It is to make the thing answerable: when there are enough trades to judge, the answer will come from a record rather than a feeling.

Reading the page

Right now is live state. The record is the totals. The pack breaks it down per instrument. R means multiples of what was risked — a trade that makes 1R made exactly what it stood to lose.

1,000,744.58
Balance · USD
+0.00
Today, realised
0.00%
Open risk · cap 0.2%
2.00%
Daily headroom · halt at 2%
read 5m ago from the EA · the broker's own figures
⚠ 0 closed trades. These are risk figures, not a track record — judging the edge needs about 1,159 trades.
Right now
Trading
—
no rows yet — ask the EA's log
Instruments
6
0 have decided · DJCUSD.c, EURUSD, GBPUSD, NACUSD.c, SPCUSD.c, XAUUSD
Last decision
—
no decisions yet
Journal
0
no rows
Equity
1,000,745
USD · today +0.00 · as of 5m ago
Live configuration — reported by the EA itself, not read from a file: bias=ON retest=32 score=55 brkpos=0.00 deep=0.00 minstop=0.00 maxspr=0.00R tighten=0.65 session=OFF news=OFF risk=0.10% tp=2.0R be=OFF@1.0R partial=ON@1.0R/33% trail=OFF dd=3.0% maxopen=0.2%/1
The record
Setups seen
0
0 passed every gate, 0 refused
Taken
0
orders actually sent
Refused
0
nothing refused yet
Net R
—
no closed trades yet
Net USD
—
no closed trades yet
The trades

Every closed trade, one row each

Aggregates hide the shape. Five trades averaging a third of an R could be five small winners or four losses and a windfall, and only the second of those tells you anything about what to expect next.

No closed trades yet. Each one will appear here with its own row and the running total above it.
The picture

Every closed trade, drawn from the broker's own bars

The shaded band is the holding period, the gold dashes mark the entry and the white dashes the exit. Both take-profits are drawn: tp1 is where a third is banked at +1R, tp2 the target the remainder runs to — about 3R of the stop actually sent, because the target is priced off the untightened zone. Dots are the real fills, so a partial and a runner show as two. ⭐⭐ An amber ring marks a target we were NOT paid at, that price reached after we were out — a level the partial or the runner already filled is not a target we missed. On a scale-out strategy that is the single most informative mark here, and it is the whole reason these are drawn after the fact.

XAUUSDshortTP1+2.44R+1,217.39
tp2 3.1R 4,273.99tp1 1.0R · 33% 4,292.55stop 4,310.41entry 4,301.4825 Sep 06:4510:3014:3018:15UTC · M15
Price continued to 5.3R after the target filled.
EURUSDshortSL-1.01R−571.20
tp2 3.1R 1.13667tp1 1.0R · 33% 1.13816stop 1.13958entry 1.1388725 Sep 03:4508:3013:3018:15UTC · M15
⭐ Price went the other way after the exit. Leaving was right.
EURUSDshortclosed_other-0.39R−258.40
tp2 3.1R 1.13588tp1 1.0R · 33% 1.13708stop 1.13824entry 1.1376624 Sep 20:4525 Sep 03:4510:4517:30UTC · M15
⭐ Price went the other way after the exit. Leaving was right.
US500.cashlongTP1+2.43R+1,206.57
tp2 3.1R 7,723.02tp1 1.0R · 33% 7,708.70stop 7,694.90entry 7,701.8024 Sep 20:0025 Sep 03:4510:3017:00UTC · M15
Price continued to 5.5R after the target filled.
GBPUSDshortSL-1.03R−551.04
tp2 3.1R 1.31875tp1 1.0R · 33% 1.32036stop 1.32190entry 1.3211324 Sep 18:4525 Sep 01:4508:4515:45UTC · M15
Price did little after the exit.
US500.cashlongSL-1.05R−529.16
tp2 3.1R 7,727.03tp1 1.0R · 33% 7,710.91stop 7,695.39entry 7,703.15tp1 reached without us24 Sep 11:3018:1525 Sep 02:0008:30UTC · M15
⛔ Stopped out, and price then reached +1R — the partial would have paid. It went on to 1.4R.
EURUSDshortclosed_other-0.40R−248.73
tp2 3.1R 1.13488tp1 1.0R · 33% 1.13655stop 1.13815entry 1.1373524 Sep 09:0016:0023:0025 Sep 06:00UTC · M15
Price recovered to 1.8R after the exit without reaching the target.
US30.cashshortTP1+1.68R+839.03
tp2 2.0R 51,371.50tp1 1.0R · 33% 51,410.43stop 51,488.29entry 51,449.3623 Sep 19:3024 Sep 03:0009:4516:15UTC · M15
Price continued to 5.5R after the target filled.
XAUUSDshortTP1+1.35R+843.68
tp2 2.0R 4,275.34tp1 1.0R · 33% 4,284.88stop 4,303.96entry 4,294.4223 Sep 09:0015:4522:3024 Sep 06:00UTC · M15
Price stalled after the target filled.
XAUUSDshortclosed_other+1.02R—
tp2 2.0R 4,300.79tp1 1.0R · 33% 4,309.83stop 4,327.91entry 4,318.87tp2 reached without us23 Sep 02:3009:3016:3023:30UTC · M15
⛔ Price reached the target after we were out. The exit cost this trade the move — it went on to 4.9R.
The pack

Each instrument, on its own

The four run the same logic with one thing changed per instrument — the spread cap, which is measured rather than carried across. ⛔ They also share a single Magic, which is what lets the account-wide risk cap see all of them at once: separate magics would make each instance blind to the others.

Nothing yet from any instrument. Each one writes its own journal, so this table fills in per symbol as they reach decisions.
Refusals

Why setups did not become trades

⭐ This is the point of the journal. A strategy is defined as much by what it declines as by what it takes, and a gate nobody can see is a gate nobody can tune. Every code below was written by the EA at the moment of the decision, before any order existed.

Nothing has been refused yet — which at this sample size means the gates are untested, not that they work.

Were we right to refuse?

Every declined setup is kept running on the same rule, through the same code, to find out what it would have done. Nothing here was traded — and a shadow long pays the spread, so it is not flattered against the trades that were.

No refusal has resolved yet. Each one is tracked for up to 400 bars after it is declined, so the first answers take days — and a setup that never retests at all is itself an answer.
Stops

Three recipes, one of them live

Every candidate records where all three stops would have sat. Only the zone-based one is ever sent to the broker. The other two cost nothing to record and are the only honest way to compare them later — on the same setups, not on a different backtest.

Nothing closed yet. Every candidate already records all three stop prices, so this comparison fills itself in as trades close — no re-run, no re-instrumentation.
Structure

Does the zone score mean anything

Zones are scored 0–100 on touches, age, width and last reaction, and anything under MinScore is refused as WEAK. That threshold is a guess until this table disagrees with it.

The score exists to be argued with. This table is the argument — once there are rows in it.
Latency

Where the time goes

⛔ The bar is the latency. Confirming on a closed M15 bar means the entry can be up to fifteen minutes after the retest actually touched — a mean of about seven and a half. Nothing in this table comes close to that, and no amount of tuning here will. It exists so the claim can be checked rather than assumed. Working: docs/LATENCY.md.

No timed decisions yet. Every row carries tick_lag_s, decide_us and send_us from the first one, because a latency question cannot be asked retroactively.
The record

Every decision

Straight from the EA's own journal. Nothing here is derived, reconstructed or inferred — the row was written at the moment the decision was made, on the closed bar that produced it.

No decisions yet. The EA writes a row the moment a setup reaches a decision — including the ones it refuses. Until then this page has nothing to show, and says so rather than inventing a figure.
Read this before you trust a number

What this page cannot tell you

Paper rows are not trades. A row with enable_trading=false passed every gate and was never sent. It says the EA would have acted; it does not say the fill would have been there, at that price, with that spread.

R is price-based. It measures the distance travelled against the distance risked. It does not carry commission, swap or slippage on the exit.

Sample size beats cleverness. Every cut on this page — by refusal code, by stop recipe, by zone score — is arithmetic on whatever rows exist. At small counts that arithmetic is a shape, not a finding.

Ages come from time_utc, not the broker's clock. Three clocks run in this estate and the broker's is nobody's idea of UTC. The server time is kept in its own column for exactly that reason.