EMA 5/8/13 ribbon self-test. Run 2026-10-08T18:32:21.828Z PASS an alignment that starts before 09:30 gives no entry while it lasts; a new start at 10:05 enters at the 10:06 open and the break at the 10:30 close exits at the 10:31 open - 2026-01-05 10:06 -> 2026-01-05 10:31 alignment PASS a start at the 15:55 bar enters at 15:56 and is closed at the close of the 16:00 bar (no overnight position) - 2026-01-05 15:56 -> 2026-01-05 16:00 session PASS a start at the 16:00 bar gives no entry (last signal bar on M5 closes at 15:55) PASS a bear start opens a short only in the long-and-short version PASS M15: a start at the 15:45 bar enters at 15:46 and exits at 16:00; a start at the 16:00 bar gives no entry PASS early close from the exchange calendar (Thanksgiving 2026, 13:00): a position opened at 12:31 is closed at the close of the 13:00 bar PASS a data hole is not a session close: with data missing from 15:30 to 18:01 on a normal day, a position opened at 15:01 is held to the scheduled 16:00 close and leaves at the first price after it (18:01 open) - 2026-01-12 18:01 session PASS a stop and a target touched in the same minute: the stop is taken (long from 100, stop 99, target 102) PASS the stop can be hit in the entry minute itself PASS a stop gapped through fills at the open of that minute (97, not 99) PASS costs: $15.76 a trade on NQ (commission 5.76 + one 0.25-point tick of $20 on each of two fills) PASS the four variants per timeframe: L-N, L-T2, LS-N, LS-T2 (8 in all) Real data (no results printed): PASS NQ data: cut at 2026-09-25 17:00 New York, from 2020-01-01 18:01 - 2373779 one-minute bars PASS exchange calendar: in ES and NQ, the last US-session bar of every day sits at the calendar close (16:00, 13:00, 13:15), the only exception being the known NQ hole of 2023-04-05 PASS the forced-exit bar of every sampled minute is at or after the scheduled close of its day, never before it PASS M5: bars equal a naive aggregation - 475280 bars PASS M5: EMA 5, 8 and 13 match a naive recomputation to 1e-9 - max diff 2.5e-11 PASS M5: the alignment series equals the naive one bar by bar - 38193 alignment starts in all sessions PASS M5 RB-L-N: engine = independent minute-by-minute reference, trade by trade PASS M5 RB-L-T2: engine = independent minute-by-minute reference, trade by trade PASS M5 RB-LS-N: engine = independent minute-by-minute reference, trade by trade PASS M5 RB-LS-T2: engine = independent minute-by-minute reference, trade by trade PASS M5: no trade is held past the scheduled close, except at the first price after a data hole that covers the close - 4 trade(s) across all variants left after a hole PASS M5: the shifted control with shift 0 reproduces the real trades PASS M5: the control machinery runs (2 smoke runs) PASS M15: bars equal a naive aggregation - 158502 bars PASS M15: EMA 5, 8 and 13 match a naive recomputation to 1e-9 - max diff 2.5e-11 PASS M15: the alignment series equals the naive one bar by bar - 12314 alignment starts in all sessions PASS M15 RB-L-N: engine = independent minute-by-minute reference, trade by trade PASS M15 RB-L-T2: engine = independent minute-by-minute reference, trade by trade PASS M15 RB-LS-N: engine = independent minute-by-minute reference, trade by trade PASS M15 RB-LS-T2: engine = independent minute-by-minute reference, trade by trade PASS M15: no trade is held past the scheduled close, except at the first price after a data hole that covers the close - 0 trade(s) across all variants left after a hole PASS M15: the shifted control with shift 0 reproduces the real trades PASS M15: the control machinery runs (2 smoke runs) SELF-TEST PASSED: every check passed (12 s). rb_run.js may now be pointed at the data. PASSED 2026-10-08T18:32:34.002Z