# Forward test: YM "Sneaky Pivot" SP-STRICT-T2, protocol v1.0

**Frozen 23 October 2026 (draft 1, approved by the owner the same day).** Nothing below may change during the test.

**One-line summary:** a pre-registered forward test of the previous-day high/low reversal that came closest on Dow futures (15-minute bars of the regular session; the first bar reaches yesterday's high or low, a confirming bar, an entry through it, a stop beyond the tested extreme, a target at the other end of yesterday's range). The record is a **paper series**: the frozen rule, computed by the backtest's own code on new 1-minute data as it comes in, month by month, with the backtest's costs. No orders are placed.

**Start:** the regular session of **Monday 26 October 2026 (09:30 New York)**, provided this protocol is published on the site before that time; otherwise the first Monday session after it is published, written here before any forward trade is computed. Nothing before the start counts.

## 1. What this test is, and what it is not

- **A forward evaluation, not a second backtest.** The historical test ([Sneaky Pivot on YM](/posts/previous-day-high-low-strategy-ym/)) gave **Buried, 5 of 6 gates**: it failed only the development t-statistic (1.58 against 2.5). Its verdict does not change; this is a separate record on data that did not exist when the rule was tested.
- **Why this variant:** of the four versions, the one with the highest mean and t-statistic, **chosen after seeing the results**. A positive forward result is therefore modest evidence, and that is stated wherever the test is reported.
- **A paper record, not trading.** Fills are the backtest's assumed fills (stop orders at their level or a minute's open beyond it) and costs are the backtest's ($15.76 per round trip per contract). It says nothing about real queue position or slippage beyond one tick per fill.
- **Historical figures** (2020-01 to 2026-09-25, one YM contract, after costs): 536 trades, about 80 a year, mean **+$89 a trade**, standard deviation $1,019, win rate 44%, longest losing streak 7 trades, worst trade -$3,451, best +$5,194.
- **It cannot confirm the edge quickly:**

| Closed trades | About (years) | 95% interval half-width on the mean | Chance of t of 2 or more if the true mean is +$89 | If the true mean is half of that |
|---|---|---|---|---|
| 100 | 1.3 | $200 | 13% | 6% |
| 200 | 2.5 | $141 | 22% | 8% |
| 300 | 3.8 | $115 | 31% | 11% |

## 2. The rule (frozen; nothing here may change during the test)

- **Market:** YM (E-mini Dow futures, $5 a point, tick 1 point), NinjaTrader 1-minute history exported by the owner with `FuturesDataExporter.cs` (front contract, global merge policy "Merge back adjusted", Last, instrument trading hours), New York clock, bars stamped at their close; the exchange calendar of `rb_lib.sessionClose`.
- **Day:** the regular session (09:30 to 16:00, or the early close); usable if it has its 09:31 bar and at least 300 in-session minutes (150 on an early-close day). **15-minute bars** 1 to 4 = 09:30-09:45 ... 10:15-10:30.
- **Levels:** range high / low = the previous usable day's session high / low (at most 7 calendar days earlier; 20 usable days of history required).
- **Setup:** long if bar 1's low is at or below the range low, short if bar 1's high is at or above the range high; both or neither: no trade (strict reading, tolerance 0).
- **Sneaky bar:** the first of bars 2 and 3 that closes above its open (long) or below it (short). **Entry:** one tick beyond its high (long) or low (short), from the next minute to the end of bar 4 (10:30); a minute opening beyond fills at its open. **Stop:** one tick beyond the extreme of bars 1 to the sneaky bar; a minute reaching the stop before the entry cancels the setup.
- **Target (T2):** the range high for a long, the range low for a short; no trade if the entry is already at or beyond it. **Exits:** in the entry minute the stop only; then stop first, then target, on every minute; otherwise at the close of the last in-session minute. One trade a day.
- **Costs and units:** $15.76 per round trip per contract; results in dollars per contract and in R (entry to stop).

## 3. How the series is computed

- **Code:** the backtest's engine, unchanged: `snp_lib.js` (SHA-256 485450563997eae98d5c1a65a24ba1e4d4aa55e1f31793341735a0c135157617), with `rb_lib.js` (20b1be79cb731804ef1a924d57da311bbd3ad0e8d0e0489d5aa2f520ebb44b12), `em_lib.js` (467a245ebb2bef9f17ae34893f1aefe512fc7cdd47a85694f4f2fa16c74821bf), `gh_lib.js` (7b5dcb7710893735485ae9614d90cef7533e43cf35680ff4ba1914c8160c6597), `control_audit_lib.js` (726e8a9bdd73a2401cafb90724753c841d541479114ae850b3832ebd7d9a5d38). The data are read **without the cut of the historical study** (that cut only fixed the end of the backtest), by a small forward script that only loads the minutes and calls the engine's `buildDays` and `tradeOn`. Any change to the engine makes a new test.
- **Data:** each month, in the first week, the owner exports YM (as for NQ); the file is kept with its date, its SHA-256 and last bar are recorded, and **the whole forward window is recomputed**. **Check:** every earlier forward trade must reproduce in entry and exit time and in dollar result. A back-adjusted export shifts all earlier prices by the roll offsets after each quarterly roll, so prices may differ by a constant while times and dollar results must not; any other difference is published and explained.
- **Holes:** the rules of `find_holes_ym.js` applied to the forward window; never filled; trades on a day touching a hole are counted, and every result is also reported without them.

## 4. Records and reporting

- **Per trade:** date, direction, sneaky bar, entry, stop, target, exit time and price, reason, result in dollars and in R, whether the day touched a hole.
- **Monthly update** (the first in the first week of November 2026, with the October data): the trades of the month and of the whole window, mean per trade, profit factor, win rate, drawdown on closed trades, the file's hash, last bar and holes, and the reproduction check. Months with no trades are reported too. The site's forward-test page shows the record.

## 5. Evaluation (fixed now)

- **Formal evaluations at 100, 200 and 300 closed trades** (about 1.3, 2.5 and 3.8 years). Updates before them are descriptive only.
- **Primary measure:** mean net dollars per trade with its standard error and 95% interval (t critical value, n - 1 degrees of freedom), profit factor, win rate, drawdown.
- **Verdict at an evaluation point:** **Contradicted** if the mean is zero or negative or the profit factor is below 1.0; **Not contradicted** if the mean is positive, the profit factor at least 1.0 and the interval includes zero ("keep going", not "confirmed"); **Supported** only if the lower end of the interval is above zero. The verdict is also reported without the trades on days touching holes; if that changes it, the verdict is reported as inconclusive for that reason.
- **Control:** the historical test's moved-trade control on the forward window (every trade moved by one random offset of whole trading days, at least 5% of the window, entered at the open of the same minute, same direction, stop and target distances; 500 runs, seeds 1000 + run), reported as a percentile beside the verdict, not as a gate.
- Criteria are not changed after results are seen. No edge is declared from a few good months.

## 6. Modifications

Any change to the rule, the settings, the timeframe, the symbol, the data source, the costs, the engine or these criteria is a separate test with its own protocol and start date. Results are never merged across tests.
