How We Measure the Edge
The Signal Analyzer's backtest is instrumented — per-trade, per-tick, with the full intrabar path captured for honest re-tally. No idealized numbers. No cherry-picked windows. Here's the math you can audit.
"The integrity of the upright shall guide them." — Proverbs 11:3
Why this page exists
Most signal services quote a single win-rate number with no methodology. We don't. After a self-audit in May 2026 found that our earlier headline number measured a configuration we didn't actually teach (a runner target nobody trades), we rebuilt the measurement layer from scratch and re-ran the backtest with per-trade tick-level data captured. What's published here is what the data says — including the parts that aren't flattering.
What configuration is measured
Everything below is the 10-point stop / 20-point target (2:1 risk:reward) scalper — the configuration that matches our prop-firm playbook and the ATM templates we publish. It is not a "best window," and it is not a runner-target setup with an artificially large reward. It's the trade we actually teach.
- Instrument:
NQ(E-mini Nasdaq-100 futures) - Period: 2026-03-05 → 2026-04-30 (8 weeks)
- Chart: 5-minute, Tick Replay ON (delta + intrabar path captured)
- Stop: 10 points (~$200/contract; matches PBF ATM defaults)
- Primary target: 20 points (~$400/contract; 2:1 R:R)
- Build: V6.1 instrumented (SHA 7DFEC96B…) with per-trade MFE/MAE capture
Win rate by target choice
Holding the 10-pt stop constant, we can simulate any target offline using the captured Max Favorable Excursion (MFE) per trade. The 72.1% floor is structural — it equals the HIT count of the as-recorded run. The ceiling moves with the target because tighter targets pick up more ambiguous cases as potential wins.
| Target | WR floor | WR ceiling | $/signal floor | $/signal ceiling | Ambiguous* |
|---|---|---|---|---|---|
| 12 pt | 72.12% | 95.76% | $117 | $221 | 39 |
| 15 pt | 72.12% | 93.94% | $160 | $269 | 36 |
| 20 pt (brand) | 72.12% | 90.91% | $231 | $344 | 31 |
| 25 pt | 72.12% | 87.27% | $301 | $407 | 25 |
| 30 pt | 72.12% | 85.45% | $371 | $477 | 22 |
| 40 pt | 72.12% | 79.39% | $506 | $579 | 12 |
* "Ambiguous" = trades where the stop and the target were both touched on the same bar. Without sub-tick path data, we can't determine which fired first. The floor counts these as losses, the ceiling counts them as wins. Reality is between, typically closer to the floor on tight-stop systems because the stop sits closer to entry than the target.
The actual edge — how far trades run
The indicator's edge is in selectivity, not extrapolation. It finds setups that almost always travel a meaningful distance in their favor before resolving. From the same 165 decided trades:
| Reached at least | % of trades |
|---|---|
| +10 pts in favor | 96.4% |
| +12 pts | 95.8% |
| +15 pts | 93.9% |
| +20 pts (brand target) | 90.3% |
| +25 pts | 85.5% |
| +40 pts | 75.2% |
| +50 pts | 65.5% |
So when the question is "will the trade reach +20 points at some point?" the answer is yes 9 times out of 10. The win-rate question reduces almost entirely to "did the stop fire first?" — which is where execution discipline (waiting for APPROACHING, not chasing, honoring the 10-pt risk) earns its keep.
How the measurement works
1. Market Replay (not vanilla backtest)
The replay runs in NinjaTrader's Market Replay mode with Tick Replay enabled, which means every historical tick is fed through the indicator in real-time order. Order Flow CumulativeDelta is real (not a proxy). The historical-mode optimization that would otherwise sample only at bar-close is bypassed because Market Replay runs in State.Realtime — every intrabar tick is evaluated for HIT/STOP.
2. Per-trade Max Favorable / Adverse Excursion
For every active trade, the indicator tracks two scalar fields per tick:
mfePts— maximum points the trade ran in favor before resolvingmaePts— maximum points the trade ran against before resolving
These are emitted on every updateOutcome record. With MFE/MAE captured per trade, we can re-simulate any stop/target combination offline from a single replay — without re-running NinjaTrader.
3. Ambiguity bands instead of one number
The only thing MFE/MAE scalars can't tell us is the order within a bar that touched both the stop and the target. We could fabricate an answer; we don't. Instead the headline is a band with a documented floor and ceiling, and the count of ambiguous trades is published in every table. If you want a single number, take the floor — it's the WR you get if the stop won every coin-flip.
4. EXPIRED trades are mark-to-close, not zero
If a trade is still open at session close, it's recorded as EXPIRED with the actual close-vs-entry P&L — not as zero. Earlier methodology dropped expired trades from the decided count entirely, which flattered the win rate; the current build folds honest P&L back in.
5. Resolution diagnostics, every trade
At every HIT / STOPPED / EXPIRED, the indicator writes a diagnostic record containing the current bar, the resolving bar's high/low, the previous bar's high/low, and the branch taken. That file is the audit log for the measurement itself.
What this measurement does not claim
Honesty matters more than headlines. Here's what's still imperfect:
- Frictionless fills. The backtest assumes orders fill exactly at the target/stop price with no slippage. Real fills are noisier; assume a 1-2 tick haircut per trade in live conditions.
- Optimistic entry assumption. A retest-style setup is recorded as "filled" at the retest price even if real-world price didn't return all the way. This concentrates the effect in retest setups (POC-RETEST, VAH-RETEST). A future indicator patch will add a price-touched-entry check.
- Single instrument. All numbers are NQ futures. Results on other instruments may differ.
- One window. 8 weeks is enough sample to be statistically meaningful but not enough to span every market regime. Results in a sustained bear or a volatility-compressed chop period may differ.
- Past performance does not guarantee future results. Trading futures involves substantial risk and is not suitable for every investor.
Reproducing this yourself
If you're a customer and you want to re-run the math, the raw outputs are stored at:
- Per-trade JSONL with
mfePts/maePts:signal-trades-v6-YYYYMMDD.jsonl - Resolution diagnostics:
replay-diagnostics-YYYYMMDD.jsonl
The re-tally script is a 40-line Python program (no dependencies beyond json and statistics). The full methodology, scripts, and validation report are linked from the Signal Analyzer support guide.