Markets › Futures · NQ futures (5-minute signals on 1-minute data)

POC Trading Strategy on NQ: the Volume Profile Bounce Backtested

Fading a pierce of the prior session's Point of Control, the price with the most volume, on Nasdaq-100 futures from 2020 to 2026, with costs and a control.

NQ futures · 5-minute signals on 1-minute data · Protocol v1.0 plus the 8 Oct 2026 rules

Buried · No proven edge

It faded a pierce of yesterday's busiest price. It never stood out from the same trades on other days.

BornRules, variants, costs and gates frozen 9 Nov 2026 (poc_spec.md), before any profile was computed
Died9 Nov 2026

Variants tried: 3 · Passed every gate: 0 · Holdout opened: yes (already used)

Short answer: not in our test. Fading a pierce of the previous session's Point of Control on NQ 5-minute bars from 2020 to 2026 lost money with a 2R target (-$29.44 a trade after costs over 691 trades). Held to the close it made +$21.36 a trade, but only through its 10 best trades, and it stayed within the range of the same trades on other days. All three versions were buried.

00The verdict in three lines

  • The POC bounce: when NQ pierces the prior regular session's Point of Control by up to 15 points and a 5-minute bar closes back on the side it came from, trade the bounce, with the stop beyond the pierce. We tested it from 2020 to September 2026, after the first 30 minutes of the session and not on scheduled FOMC announcement days, in three versions, with $15.76 of costs a trade and rules, gates and a control fixed before the run.
  • None of the three versions passed. With a 2R target the bounce lost money even before costs (-$13.68 a trade), and the confluence version did not help (-$16.65). Held to the close it ended +$14,760 after costs, but without its 10 best trades it lost $45,173.
  • The level was not shown to pick better moments. Against the same trades placed on other days at the same time, the versions ranked at the 34th, 74th and 36th percentile (95 needed).

01The rule

The level: the Point of Control (POC) of the previous regular session (09:30 to 16:00 New York), the price at which the most contracts traded. We build the volume profile from 1-minute bars, spreading each minute's volume evenly over the 0.25-point ticks of its range; this approximates a tick-by-tick profile. Ties go to the price nearest that session's VWAP.

The signal, on 5-minute bars ending 10:05 to 15:30 (the first 30 minutes are left out, as the method advises), not on scheduled FOMC announcement days: a long when the previous bar closed above the POC and this bar pierces it by 0.25 to 15 points and closes back above it; a short is the mirror image. The trade starts at the next minute's open, with the stop one tick beyond the bar's low (long) or high (short); R is the distance from the entry to the stop. One signal a day counts for each version: the first one for POC-2R and POC-CL, the first one with confluence for POC-2R-CF. If that signal cannot be traded (the next open already at or beyond the stop), there is no trade that day.

  • POC-2R: a target of 2R; otherwise out at the stop or at the session close.
  • POC-CL: no target; out at the stop or at the session close.
  • POC-2R-CF: the day's first signal that also has confluence, with a 2R target. Confluence: the session VWAP from 09:30 through the signal bar, the overnight high or the overnight low (18:00 to 09:30) within 10 points of the POC. It can be a later signal than POC-2R's; on 57 of its 218 days it was.

Not tested: the order-flow confirmation the method also suggests (footprint absorption, a cumulative delta divergence), which needs tick bid/ask data that we do not have. News: the method advises avoiding major releases; we skipped only the scheduled FOMC announcement days. Unscheduled ones, such as the emergency rate cut of 3 March 2020, were traded, and 345 of the 691 entries came in the 10:00 hour, when several regular US reports come out. Many NQ strategies have been tested on this file before, so the development t-statistic needed is 2.5.

02Data and costs

Data: NQ 1-minute bars with volume from 2020 to 25 September 2026, the NinjaTrader export of all our NQ tests; prices are not republished. Costs: $15.76 a round trip per contract ($20 a point), as in every NQ test. Engine check: the trades were computed twice. Our engine (poc_lib.js) and an independent re-implementation (poc_ref.js), written by a separate AI agent from the frozen specification and a list of implementation facts we gave it, without our engine's code, agree on every trade; the agent reported only trade counts before the self-test. poc_selftest.js also checks the profile and the POC by hand, the exits on built minutes and every signal rule on hand-built days (those day checks were added at the article review, after the run; see the run log) (poc_selftest_result.txt).

03Results

Results in dollars per contract. The 95% range is the Wilson interval for the win rate. The drawdown is on closed trades; every trade is closed the same day.

VariantVersionTradesNet after costsNet per tradeGross per tradeWinners (95% range)Profit factorDrawdown on closed tradesVerdict
POC-2Rtarget 2R691-$20,345-$29.44-$13.6834.0% (31% to 38%)0.89-$38,256Buried
POC-CLheld to 16:00, no target691+$14,760+$21.36+$37.1215.5% (13% to 18%)1.07-$38,745Buried
POC-2R-CFtarget 2R, only with confluence218-$7,066-$32.41-$16.6532.6% (27% to 39%)0.86-$13,722Buried
-$20,000$0$20,000$40,000202120222023202420252026validationholdout*POC-2RPOC-CLPOC-2R-CF

Cumulative net result by month, dollars per contract.

By period

VariantDevelopment 2020-2023 (trades)Validation 2024 to Mar 2025 (trades)Holdout* Apr 2025 to Sep 2026 (trades)Development tValidation PF
POC-2R+$2,455 (415)-$17,065 (132)-$5,734 (144)0.200.58
POC-CL+$17,540 (415)-$5,210 (132)+$2,431 (144)0.850.89
POC-2R-CF-$3,025 (138)-$3,898 (43)-$143 (37)-0.410.62

* The holdout was already used: these months had been seen in our earlier NQ tests, so its result cannot count as clean out-of-sample evidence.

04How the trades ended

VariantTargetStoppedClosed at the session closeMedian R, pointsBefore costs, per tradeCosts, per trade
POC-2R33.4%66.0%0.6%14.25+0.014 R0.078 R
POC-CL–84.2%15.8%14.25+0.552 R0.078 R
POC-2R-CF31.7%67.0%1.4%13.25-0.034 R0.087 R

The median pierce was 4 points and the median stop 14.25 points, most of it the distance from the POC back to the entry (a median of 8.75 points). With a 2R target the break-even before costs is the target on one trade in three; POC-2R reached it on 33.4%, so in R it was flat before costs (+0.014 R a trade). In dollars it lost before costs (-$13.68 a trade) because the trades that reached the target had smaller stops, 17.48 points on average, than the trades that were stopped, 18.99 points. Held to the close, 84.2% of the trades were stopped, and the 15.8% still open at the close made 8.84 R each before costs on average. No stop was filled beyond its price.

How often the level came into play: of the 1,681 sessions with a prior POC that were not FOMC days, the market traded through the prior POC on 925 (55.0%), on 779 (46.3%) within the signal window, and the rule gave a trade on 691 (poc_describe.txt).

05By year and by hour

YearPOC-2R tradesPOC-2R netPOC-CL tradesPOC-CL netPOC-2R-CF tradesPOC-2R-CF net
2020112+$2,235112+$4,91545+$1,721
202199+$5,54599+$24,04033-$440
2022102+$1,717102-$41825+$941
2023102-$7,043102-$10,99835-$5,247
2024109-$8,663109+$1,19739-$760
2025110-$18,864110-$13,27426-$4,535
202657+$4,72757+$9,29715+$1,254

2026 runs to 25 September. By the hour of entry (New York):

HourPOC-2R tradesPOC-2R netPOC-CL tradesPOC-CL netPOC-2R-CF tradesPOC-2R-CF net
10:00345-$15,367345-$15,642113-$6,051
11:00149+$3,067149+$17,08244+$3,472
12:0083-$14,26883-$3,66823-$3,817
13:0050+$2,15250+$2,55216-$477
14:0039-$2,68039+$2,30015-$1,956
15:0025+$6,75125+$12,1367+$1,765

06Longs, shorts and the best trades

VariantLongs: trades / netShorts: trades / net10 best tradesNet without them
POC-2R362 / -$8,670329 / -$11,675+$25,682-$46,028
POC-CL362 / -$1,365329 / +$16,125+$59,932-$45,173
POC-2R-CF115 / -$3,052103 / -$4,013+$15,942-$23,008

07Is it the level or the clock?

The benchmark is a moved-entry control: every trade keeps its entry time of day, direction, stop distance and exit rule, and all trades move together to other trading days by one random offset of at least 5% of the days; on the new day each trade enters at the market at the same time. 500 runs with fixed seeds; the bar is the 95th percentile of the average net result per trade. It asks whether the POC picks better moments than the same trades on other days.

VariantTradesReal average per tradeControl medianControl 5th to 95thPercentile (95 needed)
POC-2R691-$29.44-$21.31-$57.30 to +$20.3934.2
POC-CL691+$21.36-$6.14-$67.72 to +$64.0573.8
POC-2R-CF218-$32.41-$18.42-$79.90 to +$45.5436.4

08The gates

VariantTrades1. PF ≥ 1.2 in validation2. ≥ 50 trades in each period3. t ≥ 2.5 on development4. Above the 95th percentile of the control5. Positive without the 10 best trades6. Holdout net positive (already used)
POC-2R691failpassfailfailfailfail
POC-CL691failpassfailfailfailpass
POC-2R-CF218failfailfailfailfailfail

09Verdict by variant

VariantCauseGates failedVerdict
POC-2RNo proven edge1, 3, 4, 5, 6Buried
POC-CLFragile1, 3, 4, 5Buried
POC-2R-CFNo proven edge1, 2, 3, 4, 5, 6Buried

The causes follow the protocol's definitions. No proven edge marks the two versions with a target: they did not beat the same trades on other days (the 34th and 36th percentile) and lost money even before costs, so the cause is not Costs. Fragile marks the version held to the close: positive overall, but negative without its 10 best trades. The headline cause is No proven edge. Buried means that a convincing edge was not shown here; it does not prove that none exists.

TWhat this shows, and what to take into your own tests

What the results show

  • Fading a pierce of the prior session's POC with a 2R target lost $13.68 a trade before costs (about flat in R); the confluence version lost $16.65, no better.
  • Held to the close it made +$21.36 a trade after costs, but only through a few large trades: without its 10 best it lost $45,173.
  • Against the same trades moved to other days at the same time, the versions ranked at the 34th, 74th and 36th percentile; 95 was needed.

What remains unknown

  • The order-flow filters (footprint absorption, cumulative delta): they need tick bid/ask data that we do not have.
  • A tick-exact volume profile, the weekly POC, or the value-area edges.
  • Other markets, such as ES.

Why it failed

The session traded through the prior POC on 925 of 1,681 sessions, and the rule gave a trade on 691, with a median pierce of 4 points. With a 2R target the bounce reached the target on 33.4% of the trades, the one in three at which a 2R trade breaks even in R; in dollars it lost $13.68 a trade even before costs, because the winners had smaller stops, and $15.76 of costs more than doubled the loss. Held to the close, a few long runs paid for many small stops, but the result stayed within the range of the same trades on other days (74th percentile; 95 needed).

What you can apply to your own tests

  • Test the level against the same trades on other days: here the POC did not show that it picked better moments.
  • A filter that sounds sensible (confluence) did not help here; test it as its own version.
  • A positive total that rests on ten trades is not a proven edge.

A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.

FAQCommon questions

What is the POC in a volume profile?

The Point of Control is the price at which the most volume traded over a period; here, the previous regular session (09:30 to 16:00 New York). Traders watch it as a level where price may stall or turn, because it marks where the most business was done.

Does the POC bounce strategy work?

Not in our test on NQ futures. With a 2R target the bounce reached the target on 33.4% of 691 trades, the one in three at which a 2R trade breaks even in R; in dollars it lost $9,455 per contract before costs and $20,345 after costs. Held to the close it ended +$14,760 in total, but lost $45,173 without its 10 best trades.

Does confluence with VWAP or the overnight high or low help?

Not here: requiring the session VWAP, the overnight high or the overnight low within 10 points of the POC and taking the first signal of the day that had it gave 218 trades. They lost $16.65 a trade before costs, against $13.68 without the filter, a difference well within chance.

What about footprint and cumulative delta?

We could not test them: footprint absorption and a cumulative delta divergence need tick data with bid and ask volume, which we do not have. They are the part of the method this test leaves open.

How was the POC strategy tested?

On NQ 1-minute bars with volume from 2020 to 2026: the previous session's profile built from 1-minute bars, signals on 5-minute bars after the first 30 minutes and not on scheduled FOMC announcement days, $15.76 of costs a trade, rules written and dated before the data was run, results split into development, validation and holdout periods (the holdout already used by earlier NQ tests), a control that moves the same trades to other days at the same time, and every variant reported. Read the protocol.

10Check our arithmetic

Frozen specificationRules, variants, costs, periods, gates and control, dated before any profile was computed, with the run log.
poc_spec.md
CodeThe engine, the independent re-implementation written by a separate AI agent, the self-test, the run and the descriptive numbers (added after the run; no gate depends on them).
poc_lib.js · poc_ref.js · poc_selftest.js · poc_run.js · poc_describe.js
Shared code and data filesStatistics and control helpers, the futures roll dates that the shared loader reads, the FOMC dates and the record of suspect gaps.
control_audit_lib.js · em_lib.js · gh_lib.js · hourly_lib.js · ma_lib.js · rb_lib.js · rsi2_protocol.js · gc_rolls.json · data_holes.json · fomc_scheduled.csv
ResultsSelf-test result, the console output of the run, all numbers as one file and the descriptive numbers.
poc_selftest_result.txt · poc_results.txt · poc_summary.json · poc_describe.txt
Trade logs (CSV)Every trade: date, direction, entry and exit times, the POC, the pierce, prices, stop, target, R, the result before and after costs and the exit reason.
POC-2R · POC-CL · POC-2R-CF

To rerun it: place NQ_1min.csv (New York time, close stamps, with volume) one folder above and fomc_scheduled.csv in a subfolder named data_fomc, then run node poc_ref.js, node poc_selftest.js, node poc_run.js and node poc_describe.js, in that order. Code provenance: our own code; the re-implementation was written for this test by an AI agent working from the specification and stated facts.

11Data notes

Suspect gaps (rule 3): no trade was open across a suspect gap in the data. Short sessions: holiday and half-day sessions count as regular sessions; their trades close at their last minute, and they give the next day its POC. One session, 5 April 2023, ends at 14:03 on a gap in the data, not a holiday; its profile covers only 09:31 to 14:03 and gave 6 April 2023 its POC, where POC-2R and POC-CL each had one trade (-$135.76). The profile is built from 1-minute bars, not from trades at each price, so a POC can differ from a charting platform's; we did not measure by how much.

12Corrections

None since publication.

+More tests and guides