# POC bounce (volume profile) on NQ futures - specification (RIP Backtest protocol v1.0 plus the 8 Oct 2026 rules)

Specification written and **frozen 2026-11-09 (approved by the owner the same day, "Da, îngheață și rulează"; draft 1 unchanged)**, before any profile, signal or trade was computed. Once frozen, any change of a rule is documented and treated as a separate test; bugs may be fixed.

## Why this test, and what was looked at before
- **Chosen by the owner** on 2026-11-09 from a pasted description of the "POC bounce" on NQ:
  - fade the prior session's Point of Control (the price with the most volume) after price pierces it and closes back;
  - treat it as a zone, not a line;
  - stop beyond the overshoot;
  - avoid the first 30 minutes and major releases;
  - optionally require confluence with VWAP or the overnight high/low.
- **Not testable with our data:** the order-flow filters (footprint absorption, cumulative delta divergence) need tick bid/ask data. They are left out and said so.
- **Earlier work on this file:**
  - many NQ tests (opening range, noise area, IBS, ChoCh, initial balance and others);
  - the owner's unpublished SweepNQ indicator (a sweep of a level and a close back), on paper watch since 28 Oct 2026.
  - With these, the development bar is **t >= 2.5**.
  - No volume profile has been computed on this site.

## Data
- **NQ** 1-minute bars with volume, the NinjaTrader export used by all NQ tests (`NQ_1min.csv`). New York time, stamps are close times. The data is cut where the published NQ tests cut it.
- **Periods (by entry date), as in the other NQ tests:**
  - development 2020 to 2023;
  - validation 2024-01 to 2025-03;
  - holdout 2025-04 to the end of the data, **already used**.
- **Costs:** $15.76 per round trip per contract, as in all NQ tests ($20 a point). Results are in dollars per contract and in R.

## The level: the prior session's POC
- **Session:** the regular session, 09:30 to 16:00 New York (minutes stamped 09:31 to 16:00).
- **Volume profile of the previous regular session:** each minute's volume is spread evenly over the 0.25 ticks from its low to its high, both included. This is an approximation of a tick profile, and it is said so.
- **POC:** the tick with the most volume. Ties go to the tick nearest that session's VWAP, then to the lower tick.
- No trade on a day without a previous regular session in the data.

## Signals (one trade a day per variant, long or short)
- **5-minute bars on the clock** (bar E holds the minutes stamped E-4 to E), regular session.
- **The window:** signal bars ending from 10:05 to 15:30. That leaves out the first 30 minutes, as the description advises. No signal on FOMC announcement days, using the dates of our pre-FOMC test.
- **Long:** the previous 5-minute bar closed above the POC (price came from above); this bar's low is below the POC by at least 0.25 and at most 15 points (the overshoot zone); it closes above the POC.
- **Short:** the mirror image (from below; the high above the POC by 0.25 to 15 points; the close back below it).
- Only the first signal of the day counts for each variant. Its trade is entered at the open of the first minute after the bar.
- **Stop:** 1 tick beyond the signal bar's low (long) or high (short). R = the distance from the entry to the stop, in points. No trade if the entry is already at or beyond the stop.

## Variants
1. **POC-2R:** target 2R; otherwise out at the stop or at 16:00.
2. **POC-CL:** no target; out at the stop or at 16:00.
3. **POC-2R-CF:** POC-2R, taken only with confluence. At the signal bar, the session VWAP from 09:30, the overnight high or the overnight low (18:00 to 09:30) lies within 10 points of the POC.

- Exits are checked on 1-minute bars. A level that a minute opens beyond fills at that open. If the stop and the target are touched in one minute, the stop is taken.
- The exit at 16:00 is the close of the last minute stamped at or before 16:00.

## Gates and control
- **Six gates per variant:**
  1. validation profit factor >= 1.2;
  2. at least 50 trades in each period;
  3. development **t >= 2.5**;
  4. above the 95th percentile of the control;
  5. positive without the 10 best trades;
  6. holdout net positive (flagged as used).

  A variant with fewer than 30 trades is Inconclusive.
- **Control (moved entries):**
  - every trade keeps its entry time of day, direction, stop distance and exit rule (the 2R target distance, or none);
  - all trades move together to other trading days by one random circular offset of at least 5% of the days;
  - on the new day each trade enters at the market at the same time, with the same costs.
  - 500 runs, seeds 1000 + run. Statistic: the average net dollars per trade.
  - It asks whether the POC picks better moments than the same trades on other days.
- **Also reported (descriptive):**
  - how often price touched the prior POC at all;
  - the pierce depth;
  - longs and shorts; by year;
  - the result by entry hour;
  - the cost in R.
- **Rule 3:** trades open across a suspect gap in the data are reported, and the gates are recomputed without them.

## Engine and self-test (before the run)
- An engine, `poc_lib.js`.
- An **independent re-implementation**, written by a separate AI agent from this specification and stated implementation facts, without the engine's code. The agent reports trade counts only.
- A self-test:
  1. the profile and the POC by hand on built minutes;
  2. hand-built days for each signal, the stop, the target, the 16:00 exit and the confluence filter;
  3. engine against reference, trade by trade;
  4. the control at offset 0.

## Before the article
Results go to the owner first. One article, only with the owner's agreement, after the queued posts.

## Reading the result
"Buried" or "Inconclusive" mean a convincing edge was not demonstrated, not proof that none exists. One market, an approximated volume profile from 1-minute bars, no order flow, and one reading of a loosely described method.

### Run log
- 2026-11-09: frozen. sha256 of this file above the "### Run log" heading: c5e6f57796626d56eaeb1a7045128d26ad8ae6ece227adbb19fa8e9fafaaad6c.
- 2026-11-09, before the run: the reference (poc_ref.js) was written by a separate agent from this specification, the FOMC dates file and stated implementation facts (the readings in poc_lib.js's header); it reported trade counts only (691, 691, 218). The self-test then compared engine and reference trade by trade. Noted by the agent: holiday and half-day sessions (59, ending 13:00, 13:15 or once 14:03 on a data gap) count as regular sessions, their exit being their last minute, as the reading 'the last minute stamped at or before 16:00' implies.
- 2026-11-09, after the run: poc_run.js did not print how often price touched the prior POC, which this specification lists as also reported. Added as poc_describe.js (descriptive only; no gate or verdict depends on it), with the stop sizes by exit that explain why POC-2R was flat in R and negative in dollars before costs.
- 2026-11-09, at the article review: the self-test's item 2 (hand-built days for each signal, the stop, the target, the 16:00 exit and the confluence filter) had been covered only by rule checks on every real trade, the exit walk on built minutes and the trade-by-trade agreement with the reference. 19 hand-built day checks were added to poc_selftest.js (both directions, the 0.25 and 15 point limits, the previous-bar condition, the 10:05 and 15:30 window edges, FOMC days, an untradable first signal, the first signal only, and for POC-2R-CF the overnight levels and a later signal that has confluence when the first has not); all passed, and the run's results are unchanged (no rerun needed).
- 2026-11-09: published as /posts/poc-trading-strategy-nq/ (the owner asked for the article on 2026-11-09: "Da, scrie-l", and to publish it the same day, ahead of the queued posts: "pune-l acum").
