← Help index

Reference · built Mon Oct 19 2026

ES Profile Playbook

Supply and demand, single prints, the TPO profile, footprint delta, and what the Sunday–Monday tape taught. Written to be re-read before the open.

1

What a supply or demand zone is

A zone is a price where a big participant left orders behind. They wanted to buy (or sell) more than the market could give them at once, so price ran away before they finished. When price comes back, the leftover orders are still sitting there and get filled. That is the whole idea; everything else is detail.

DEMANDBuyers left behind

Price paused in a small range, then rallied fast. The buyer who caused the rally did not get his whole size. The pause is the zone. First revisit is usually bought.

SUPPLYSellers left behind

Price paused, then dropped fast. The seller has size left. The pause is the zone. First revisit is usually sold.

Base + fast move = zone. The base is where the orders are; the fast move proves someone big was there.

Three things that decide whether a zone holds

  1. How fast price left. A one-bar departure with no pullback means the imbalance was large. A slow drift away means it was not.
  2. How many times it has been tested. Each touch consumes orders. A first touch is strongest. By the third touch, assume most of it is gone and treat it as a breakout candidate.
  3. How thin the surrounding tape is. A zone next to single prints (section 4) is a stronger zone than one buried inside a fat, well-traded block.
2

How to find them on the chart

On a candle chart

Look for the fast move first, then walk left to the last small cluster of candles before it. That cluster is the zone. Draw it from the lowest body to the highest body of the cluster, not the wicks. Ignore clusters that price already came back through: those are used.

On the TPO letters (faster and more honest)

The profile does the work for you. A run of rows with a single letter means price went through there in one 30-minute period without trading. The thin block of letters directly beside that run is the base. Direction comes from the period: if that letter's period closed below its open, the thin block above the run is supply; if it closed above, the thin block below is demand.

price letters read 7774 D ┐ 7773 D │ single prints: D period raced down 7771 D │ through here without trading 7769 D │ 7767 D ┘ ← 7766–7773 = SUPPLY ★★★ (Fri Oct 16) 7765 D E 7763 D E F 7761 D E F G base thickens = ordinary trading 7759 C D E F G H ... 7727 G H I ┐ 2-letter block: a pause, not a zone 7725 G H I ┘ (walked through Sun night on tiny deltas)
Friday Oct 16's profile. The single-letter D run is the zone; the two-letter block lower down looked like one on the footprint but was not thin, and it folded on the first push.

Grading

GradeWhat the letters look likeHow the card treats it
★★★Single letters for 3+ rows, or two ★★ references agreeing at the same priceA/B anchor, resting order allowed
★★Single letters for 1.5–3 points, a tail, a prior VA edge or naked VPOCSupport/resistance line; needs a trigger
★Two-letter block, one-period pause, footprint-only level inside valueNoted, not traded on its own

Thin-letter structure outranks a footprint-only level. Absorption inside a fat block is a pause.

3

Delta rules at the level

Delta is aggressive buying minus aggressive selling, in contracts. It measures effort. Price measures result. Every footprint read is the same question: did the effort produce the result?

Absorbed

Big one-sided delta and price does not move. Someone passive is eating it. Trade the other way on the first reversal bar, stop just past the extreme.

Pushing through

Stacked one-sided delta and price moves with it. Momentum. Go with the break after a 5-minute close through the level.

Mismatch

Candle color and delta sign disagree (green bar carrying a big red delta). The passive side won that bar. Lean the way price went.

Divergence

Price makes a new high while CVD falls (or new low while CVD rises). The aggressive side is being absorbed. Not a signal by itself; wait for price to confirm.

Spring vs trap: the magnitude tell

Both show green prints while price sits at a low. They mean opposite things, and only the size of the price move separates them.

Spring (bullish)Trap (bearish)
WhereRight at a known floorAnywhere, usually mid-range or under a broken level
Price progress on the green prints≤ 3–4 pts undercut, then stallsKeeps making lower lows, 5+ pts per bar
CVDHolds above its session lowRising while price falls for hours
What to doCover shorts, look for the longStay short or stand aside
Dated proofOct 19, 9:55–10:00 at 7732: +249/+401, 2-pt undercut, then +290/+256/+433 and a 26-pt ripSep 29: CVD +17k while price fell 44 pts; Oct 19 12:10: +1576 at 7755, price fell 20 pts after

Stop placement

A resting buy at a support with the stop one point under it gets taken out by the very spring that makes the trade. Pad the stop by about 6% of ATR14, roughly 4 points on a 70-point ATR, on both sides of every level. A spring deeper than the pad is more often a real break.

Consumption count

Keep a tally of touches on each level through the day. On Oct 19, 7733–35 was tested three times with bounces shrinking 27 → 12 → 7 points. Shrinking bounces mean the buyer is running out. That level goes into the next day as consumed.

4

Market Profile in one page

A Market Profile is the day's candles rearranged by price. Each 30-minute period gets a letter; every price that period touched gets that letter printed on its row. Wide rows are where the market spent time. Narrow rows are where it did not.

Letter (app)PeriodLetter (app)Period
A9:30–10:00H13:00–13:30
B10:00–10:30I13:30–14:00
C10:30–11:00J14:00–14:30
D11:00–11:30K14:30–15:00
E11:30–12:00L15:00–15:30
F12:00–12:30M15:30–16:00
G12:30–13:00

The vocabulary

TermMeaningWhy it matters
VPOCRow with the most lettersFairest price of the day; a magnet when untested
Value area (VAH / VAL)Rows holding 70% of the letters around the VPOCInside = balance, rotate; outside and accepted = trend
Initial balance (IB)Range of A + BDay type is judged by how far price extends beyond it
Single printsRows with one letter, inside the rangeFast move; the first repair target, and the zone marker
TailSingle prints at the top or bottom of the rangeRejection; the longer the tail the stronger the other-timeframe response
Poor high / lowTwo or more letters at the extreme, no tailUnfinished business; usually revisited
Naked VPOCA prior day's VPOC not traded through sinceExpansion target above or below
ExcessA tail that was never traded back intoThat extreme is finished

Shapes and day types

P shape

Fat on top, tail below. Short covering, buyers in control late. Lean up next session unless the top is a poor high.

b shape

Fat at the bottom, tail above. Long liquidation or a rejected rally. Oct 19 was a b: value built 7735–55 under the 7760–73 tail.

D shape

Symmetric. Balance. Fade the edges until one is accepted.

Double distribution

Two fat blocks joined by singles. The singles are the hinge; whichever side price is on tells you which distribution is in charge.

Day typeRange vs IBBase rateTrade style
Normal variation1–2× IB, one-sided extension~42%Buy pullbacks in the extension direction
Trend> 2× IB, closes near extreme~30%Never fade; sell the lower-high retest
NeutralExtends both sides of IB~20%Fade the second extension; close location decides
NormalWide IB, no extension~8%Range rotation only
5

The overnight profile: speed, not location

Overnight single prints are made in thin liquidity. Price moves fast through them because nobody is there, not because anyone rejected the price. The day session repairs them casually. RTH singles are made with the whole market present; that is why they get stars and overnight singles do not.

From the night tabUseful?How to use it
ON high / lowYESThe Build inputs. Also where overnight inventory is trapped; a break of ON low with long inventory is liquidation fuel
ON POC vs prior-day VAYESAnswers the open-location question before the open
Thin ON ladder between ON value and the openSPEEDIf the first 30 minutes fail, expect a fast trip back to ON value. Size the stop for speed; do not fade inside the ladder
ON singles at the same price as an RTH single or tailCONFIRMTwo sessions left it thin; that one earns a star
ON singles alone, as entry levelsNOKeep them off the card

Proof: Sunday night left a thin column 7755–7768 above overnight value. Monday went straight up through it to 7773 and straight back down through it. The rejection came from the RTH-built 7766–73 supply, not from the overnight singles.

6

Case study: Sunday Oct 18 – Monday Oct 19

Setup from Friday's profile

  • Friday Oct 16: trend-down day, 127-point range, VPOC 7695.50, VAH 7761.50, VAL 7678.75.
  • D-period single prints 7766–7773, with Thursday's VPOC 7769 inside them. Graded ★★★ supply.
  • Two-letter block at 7720–27 showed absorption on the footprint. Graded a pause, not a zone.

Overnight

  • Sunday 6 PM opened near 7680, rallied through the 7720–27 block on deltas of 50–160 with no seller showing (the pause folded, as graded).
  • Overnight high 7768.50, straight into the D singles. Rejected 34 points to 7734 by 7:30 AM. First touch, held.

The day session, minute by minute

time price footprint read 09:30 7742 open inside ON value rotation day; wait for an edge 09:40 7749–50 −396 −244 −178 on the push open-rejection-reverse; card D armed sell-stop 7733.50 09:50 7734 D fills correct, conditional 09:55 7732 +249 undercut only 2 pts… 10:00 7728.75 +401 …this is a SPRING, not a trap (misread live) 10:10 7735+ +290 +256 +433, CVD 4.0k→8.3k short stopped; the long was here 10:20 7753 +2,859 card A buy-stop 7753.50 triggers 11:40 7772 +918 +655 +767 into the zone second touch of 7766–73 11:45 7769 −958 the passive seller shows; 24-pt drop 12:10 7755 +1,576 biggest green print of the afternoon, price fell 20 after = TRAP 14:00 7735 −1073 −756 −678 −526 absorbed 7733–35 holds for the 3rd time, bounce only 7 pts 16:00 7738 CVD +23.7k, close ≈ open all-day buying, no progress above value = absorption at the top

Monday's finished profile

  • Range 7727.25–7773, VPOC 7746.50, VA 7734.50–7754.50. Shape: b.
  • Thin E/F column 7760–7773 (NinjaTrader F/G). That is Tuesday's first supply, under the still-intact Friday D singles.
  • B-period single prints 7727–7733 below VAL: the spring. First downside magnet if Tuesday opens inside value.
  • Value migrated up about 45 points from Friday. Friday's upper distribution was accepted, but the singles were not broken.

Scorecard for the card

ItemResultNote
Level mapAEvery mapped edge held or triggered where mapped
Day type callADigestion / rotation until an edge is accepted
Setup A (buy-stop 7753.50)+20The winner
Setups C and DstoppedBoth taken out by the same 7732 spring; stop pad was 1 pt, now 6% of ATR
Live read at 10:00missCalled the spring a trap; the magnitude rule came from this
OverallB+Levels right, selection rules tuned
7

Rules, dated

Oct 18–19 · confirmed twice

Single-print supply from the letters

A run of 3+ single-letter rows left by a fast move is a zone; the thin block beside it is the base. Grade by thinness, not by footprint absorption. Proof: 7766–73 rejected the overnight high and the 11:40 rally. After two touches, treat as consumed.

Oct 19 · 9:55–10:15

Spring vs trap is a magnitude question

Green absorption prints with a shallow undercut (under 3–4 pts) at a known floor and CVD above its session low is a spring: cover shorts, look for the long. It is only a trap if price keeps printing lower lows by 5+ pts per bar on the green prints.

Oct 19 · C and D stopped

Stop distance must be wider than a spring

Pad every stop by about 6% of ATR14 (floor 1 pt) beyond the level, on both sides. Companion: if D fills and green prints appear at the low with no price progress, cover at the footprint and look for C again.

Oct 19 · evening

Overnight singles are speed, not location

Use the night profile for ON high/low, ON POC vs prior value, and ladder thinness. Do not star overnight singles unless an RTH single or tail sits at the same price.

Oct 19 · full day

Consumption count

Count touches. Shrinking bounces mean the passive side is running out. Three touches with 27 → 12 → 7 point bounces sends a level into the next day as a breakout candidate, not a support.

Sep 23 / Sep 29 / Oct 19

Price confirms, CVD alone does not

CVD up with price down means the passive seller is winning. CVD down with price up means the passive buyer is winning. When price and CVD fight, price wins. Act only when price breaks structure.

Standing

Entry timing by setup type

Responsive (fade a level, buy absorption): enter on the first reversal bar with delta confirming, tight padded stop, do not wait for the close. Momentum (through a level): wait for the 5-minute close plus CVD confirming, then enter or buy the first pullback that holds.

8

NinjaTrader setup

Indicator: Order Flow Volume Profile. Profile type Price, Draw mode Letters, Ticks per level 4, Value area 70, Initial balance 60 minutes, Resolution Minute, Profile alignment Right, width 35%.

TabTrading hoursSessionsWhat it is for
DayTPO_ESCME US Index Futures RTH2Today's RTH profile beside the prior day's. Matches the app.
NightTPO_ESAfterHoursTemplateNoble1 (6:01 PM → 9:29 AM)1Overnight only, frozen at 9:29. Read at 8:45 for the Build inputs.
ES DEC26CME US Index Futures ETH—Continuous bars with cumulative delta in its own panel. Absorption and divergence reads.

Set Trading hours in both places: Data Series and the indicator's own Trading hours field. Templates are edited under Control Center → Tools → Trading Hours.

Letter offset

NinjaTrader anchors letters to the clock at 8:30 ET regardless of template, so its letters run two ahead of the app's.

AppNinjaTraderAppNinjaTrader
A (9:30)CF–K windowH–M
B (10:00)DM (15:30)Q
IB = A+BC+D16:00–16:15R

Shape, value area, POC and single prints are identical either way. Only the labels differ.

9

Morning routine

  1. 7:00 Drop the FirstRate ES and VIX files in DailyData, run Import. Levels update automatically.
  2. 7:10 Zones page: deactivate consumed zones, approve the new suggestions. Check the thin block from the prior day's profile is there.
  3. 8:45 NightTPO_ES tab: read ON open (the 6 PM candle's open, not the first close), ON high, ON low, and where ON POC sits against prior value.
  4. 8:50 DailyPlan: type date, ON open/high/low, Now, VIX. Build. Print.
  5. 9:30 DayTPO_ES for structure, the delta tab for the trigger. Arm the resting orders from the card with the padded stops. Cancel what never triggers.
  6. 16:15 Journal: grade the card, one lesson. If the lesson is a rule change, it goes into PlanWriter, not just the journal.

Levels come from the letters. Timing comes from the footprint. Permission comes from VIX.

MarketProfilePro reference · levels are ES December 2026 · nothing here is a recommendation to anyone but the author.