101 live names; signal = XS reversal of the [start,end] close return; entry at the 15:59 close (MOC proxy); exit next session. K=20, ~252 rebalances/yr.
| Signal window | exit | turn/day | gross SR | b/e bps | net@1bp |
|---|---|---|---|---|---|
| 14:59-15:59 | 09:59 | 3.10 | +1.90 | 3.08 | +1.28 |
| 14:59-15:59 | 09:30 | 3.10 | +1.44 | 1.88 | +0.67 |
| 14:00-15:59 | 09:59 | 3.09 | +0.95 | 1.60 | +0.36 |
| 14:00-15:59 | 09:30 | 3.09 | +0.47 | 0.65 | -0.25 |
| 15:00-15:59 | 09:59 | 3.11 | +1.86 | 3.00 | +1.24 |
| 15:00-15:59 | 09:30 | 3.11 | +1.46 | 1.92 | +0.70 |
| 15:00-15:55 | 09:59 | 3.10 | +1.24 | 2.01 | +0.62 |
| 15:00-15:55 | 09:30 | 3.10 | +1.06 | 1.38 | +0.29 |
| 15:00-15:50 | 09:59 | 3.12 | +1.05 | 1.76 | +0.45 |
| 15:00-15:50 | 09:30 | 3.12 | +1.04 | 1.44 | +0.32 |
| 15:00-15:45 | 09:59 | 3.10 | +0.94 | 1.56 | +0.34 |
| 15:00-15:45 | 09:30 | 3.10 | +0.78 | 1.07 | +0.05 |
| 14:00-15:55 | 09:59 | 3.09 | +0.61 | 1.04 | +0.02 |
| 14:00-15:55 | 09:30 | 3.09 | +0.33 | 0.45 | -0.40 |
| 14:00-15:50 | 09:59 | 3.10 | +0.36 | 0.58 | -0.26 |
| 14:00-15:50 | 09:30 | 3.10 | +0.10 | 0.12 | -0.69 |
Best tradeable cell: 14:59-15:59 -> exit 09:59 net@1bp +1.28, b/e 3.08 bps, turn 3.10/day (gross SR +1.90).
Read: the bot must compute the signal from a window that ends before the MOC cutoff (<=~15:50) yet still captures the final-hour move; a 14:59 start (stale completed hour) is the failure mode.