Market Profile is not an indicator — it is a complete framework for understanding market structure through time and price. Developed by J. Peter Steidlmayer at the Chicago Board of Trade in the 1980s, it maps every 30-minute trading period as a letter at every price it traded, building a distribution that reveals where the market found — and rejected — value.

Volume / Microstructure / Support-Resistance
Category
Institutional
Difficulty
TPO letter distribution across price axis
Output Range
Session (one trading day per profile)
Default Period
None — completed profiles are permanent historical records
Repaint Risk
Heavy — professional data feed with 30-minute intrabar price-level detail
Data Need
VOLUME · MICROSTRUCTURE · SUPPORT_RESISTANCE · DATA_INTENSIVE · CODE_HEAVY · REQUIRES_API · REAL_TIME
Tags

Section 1: Core Mechanics

Market Profile replaces the conventional bar chart with a spatial map. Each 30-minute period is assigned a letter (A = first half-hour, B = second, and so on). At each price level where that period traded, its letter is placed. The result is a profile that visually shows: did the market spend time at this price? A full-width profile indicates balanced two-sided activity. A thin single-column profile at a price indicates fast one-directional movement.

What Is a TPO?

A Time Price Opportunity (TPO) is each individual letter in the profile. One TPO = one 30-minute period at one price level. If the ES futures traded at 4,480 during periods A, B, C, and E — that price level has four TPOs (the letters A, B, C, E stacked vertically at 4,480).

What Is the Point of Control (POC)?

The Point of Control (POC) is the price level with the most TPOs — where the market spent the greatest amount of time. POC is the "fairest" price of the session in time terms. It is the gravitational center of the day's activity.

For Volume Profile, POC is the maximum-volume level. For Market Profile, POC is the maximum-time level. These often coincide but can differ — when they do, the divergence itself carries information.

Value Area Calculation

The Value Area (VA) contains 70% of the day's TPOs, expanded from the POC outward:

Expansion from POC alternates: compare the two TPOs directly above POC to the two TPOs directly below. Add whichever side has more TPOs. Continue until 70% is included.

  • Value Area High (VAH): Top of the 70% zone
  • Value Area Low (VAL): Bottom of the 70% zone

Key Market Profile Structures

Structure Description Significance
Bell curve profile Symmetric distribution, wide VA Balanced market — buyers and sellers agree on value
P-shaped profile Wide top, narrow bottom Buying tail — sellers pushed price down, buyers absorbed and lifted
b-shaped profile Narrow top, wide bottom Selling tail — buyers pushed price up, sellers absorbed and pushed down
Single prints One letter at a price level Fast market — no agreement; vulnerable on retest
TPO breakout Extension beyond prior day's range New price discovery beginning

Inputs

Market Profile requires:

  • Price data at 30-minute resolution — which price levels did each 30-minute period trade through
  • Professional data feed — Market Profile is not available from standard free data feeds. Required: CQG, eSignal, Sierra Chart, Jigsaw Trading, ATAS

Parameters

Parameter Default Notes
Period length 30 minutes per TPO Fixed by convention — Steidlmayer's original design
Value area percentage 70% Standard; matches one standard deviation of a normal distribution
Profile period 1 session Can stack multiple days (composite profile)
Letters per profile A–X (or 1–24) Up to 24 half-hour periods in a standard session

Section 2: Interpretation & Signals

Reading the Profile Shape

Balanced (Normal Distribution) Profile: The profile resembles a bell curve. Most TPOs cluster in the center (VA). The market found value, traded two-sided activity, and closed near the middle. Next session context: the market is in balance — expect initial activity to stay within today's value area until a catalyst moves it.

Trending Day Profile: Profile is narrow and elongated in one direction. Few TPOs cluster anywhere — price moved directionally all day. Next session: the market is searching for new value — expect continuation unless price retreats back inside the prior day's range.

b-shape (Selling Tail): Wide lower distribution, narrow upper. Buyers attempted to push price up early (narrow top = few periods spent at the high), but sellers overwhelmed them. The wide lower portion = sellers found long-lasting value at lower prices.

POC as Support and Resistance

The POC Rule: When price returns to a prior session's POC, it is testing the level where that session found its greatest temporal agreement. POC acts as a magnet. Price approaching POC from above = support test. From below = resistance test.

The critical observation: how does price respond at POC? If it holds and reverses — the prior value is still valid, expect a return to the prior Value Area. If price slices through POC decisively — value has shifted, new price discovery underway.

Market Profile POC Support and Value Area Retest

Single Prints — Vulnerable Zones

Single prints occur where only one letter (one 30-minute period) traded at a price level. They represent fast, imbalanced movement where no lasting agreement was found. They are the most vulnerable levels in the profile — price frequently returns to fill single-print zones on subsequent sessions.

  • Single prints in a tail (above or below VA): Represent the extreme of one-sided initiative. When price returns to a single-print tail, it is retesting the extreme of conviction.
  • Single prints mid-profile (poor structure): Represent a gap in activity — the market moved through this level rapidly and may return to "fill" it.

Auction Market Theory

Steidlmayer's framework rests on auction theory: markets exist to facilitate trade. When price moves to a level where trade occurs readily (buyers and sellers both willing to transact), the market spends time there — building TPOs. When price moves to a level where trade does not occur (no buyers or no sellers), it retreats — leaving single prints or tails.

This creates the behavioral cycle:

  1. Price moves away from value (POC/VA)
  2. Probes for new participants at the new price
  3. If participants appear → new balance area forms (new POC/VA)
  4. If participants don't appear → price rotates back toward prior value
💡 TIP
The most reliable Market Profile trade: prior session's Value Area High holds as resistance in the first hour, and price fails to break above it. Short against VAH with stop above VAH + 5 ticks, targeting return to POC. This is a mean-reversion within established value — one of the highest-probability Market Profile setups.
⚠️ WARNING
Market Profile requires professional data feeds — CQG, eSignal, Sierra Chart, or Jigsaw. TradingView and most retail platforms either do not offer Market Profile or offer a simplified approximation without true TPO letter display. Do not attempt to trade Market Profile from approximated data. The nuance of single prints and profile shape requires accurate TPO construction.

Section 3: Pass vs. Live — Real-Time Reliability

None — prior session profiles are immutable historical records
Repaint Risk
None — Market Profile builds in real time throughout the session
Lag
Mid-session profile is still forming; use prior day's profile for confirmed levels
Confirmation Timing
Pre-session planning using prior day's POC, VAH, VAL; identifying single prints for retest targets
Best Use
Making intra-session decisions based on the current (live) profile — it is incomplete until session close
Avoid

A completed session's Market Profile is a permanent record. POC, VAH, and VAL for any prior session never change. The current session's profile builds TPO by TPO throughout the day — the POC and Value Area shift as each 30-minute period completes.

Professional traders arrive before the open with prior day's Market Profile already analyzed. POC, VAH, VAL, and single prints from the prior session are marked on the chart as horizontal lines. The session's behavior relative to these pre-marked levels drives the trading decisions.


Section 4: Practical Use Cases

Setup: Prior day's Market Profile with POC, VAH, VAL marked. Current session VWAP overlay. Signal: Opening drive tests prior day's VAH. If price rejects VAH within the first 30 minutes (TPO period A or B), short with stop above VAH + 5 ticks. Entry: First TPO period (30m bar) that fails to hold above VAH and closes back below Exit: Return to prior day's POC (primary target) or prior day's VAL (extended target) Key Rule: Opening rejection at VAH or VAL is the highest-probability Market Profile scalp. The market tests prior value boundaries, finds rejection, and returns to center.

Real example: E-mini S&P 500 futures (ES) on November 1, 2023. The prior day's Market Profile showed POC at 4,190, VAH at 4,220, VAL at 4,165. In the first period (Period A) of November 1st, ES opened at 4,195 (inside Value Area) and immediately drove to 4,225 — testing VAH. The drive failed by 10:00 AM, with price printing the final TPO of Period B at 4,210. Classic VAH rejection setup. Traders who shorted the VAH rejection at 4,222 (stop above 4,230) captured a move back to POC at 4,190 — a 32-point gain — by midday.


Section 5: Pseudo Code

INPUT: bar_data[] (each bar: time, open, high, low, close, volume), session_date, period_minutes=30, va_pct=0.70

PROCESS:
  Step 1: Filter and label TPO periods
            periods = group_bars_into_periods(bar_data, period_minutes)
            for idx, period in enumerate(periods):
              letter = chr(ord('A') + idx)  # A=first, B=second, etc.
              period['letter'] = letter

  Step 2: Map TPOs to price levels
            price_tick = 0.25  # Use instrument tick size
            tpo_map = {}  # price_level -> list of letters
            for period in periods:
              price_levels = range_to_levels(period.low, period.high, price_tick)
              for level in price_levels:
                if level not in tpo_map:
                  tpo_map[level] = []
                tpo_map[level].append(period['letter'])

  Step 3: Find Point of Control
            poc_level = max(tpo_map, key=lambda p: len(tpo_map[p]))
            poc_price = poc_level

  Step 4: Calculate Value Area
            total_tpos = sum(len(v) for v in tpo_map.values())
            target_tpos = int(total_tpos * va_pct)
            va_tpos = len(tpo_map[poc_level])
            upper = lower = poc_level
            while va_tpos < target_tpos:
              add_upper = len(tpo_map.get(upper + price_tick * 2, []))
              add_lower = len(tpo_map.get(lower - price_tick * 2, []))
              if add_upper >= add_lower:
                upper += price_tick * 2
                va_tpos += add_upper
              else:
                lower -= price_tick * 2
                va_tpos += add_lower

  Step 5: Identify single prints
            single_prints = [p for p, letters in tpo_map.items() if len(letters) == 1]

  Step 6: Classify profile shape
            va_range = upper - lower
            full_range = max(tpo_map) - min(tpo_map)
            concentration = va_range / full_range
            if concentration > 0.60: shape = "Balanced (Normal)"
            elif upper > (max(tpo_map) * 0.90): shape = "P-shape (Buying Tail)"
            elif lower < (min(tpo_map) * 1.10): shape = "b-shape (Selling Tail)"
            else: shape = "Trending Day"

OUTPUT: poc_price, vah=upper, val=lower, tpo_map, single_prints[], profile_shape
EDGE CASES:
  - Session with fewer than 6 periods: flag as incomplete profile
  - Multiple price levels tied for most TPOs: select the one closest to session midpoint as POC
  - Single-print tails: always flag for potential retest setup
  - Data gaps within session: fill with zero-TPO levels, note for analysis

Section 6: Parameters & Optimization

Composite Profile Types

Profile Type Period Use Case
Single session One day Day trading S/R levels
5-day composite One trading week Swing trading value reference
Monthly composite Calendar month Position-level value area
Range composite Custom event range Post-earnings, post-FOMC structure

Platform Requirements

Platform Market Profile Support Cost
Sierra Chart Full TPO letter profile, all profile types Moderate ($50+/month)
Jigsaw Trading Excellent TPO + Volume Profile combo Moderate ($70+/month)
ATAS (Order Flow) Full Market Profile + footprint Higher tier
NinjaTrader Add-on required Free platform, paid add-ons
TradingView No true Market Profile Not available
Interactive Brokers No Market Profile Not available
Why is the Value Area set to 70% and not 50% or 80%?

The 70% convention derives from statistics — one standard deviation of a normal distribution contains approximately 68.27% of values. Steidlmayer rounded this to 70% for practicality. The idea is that the Value Area represents the one-standard-deviation fair value range — where the market agrees on price under normal conditions. Price outside the Value Area is statistically away from consensus and likely to return. The 70% level has become a self-reinforcing convention because so many institutional traders use it.

How is Market Profile different from Volume Profile?

Market Profile maps TIME at each price level — how many 30-minute periods traded at each price. Volume Profile maps VOLUME at each price level — how many contracts traded there. Both identify a POC and Value Area, but from different angles. Time and volume usually agree, but sometimes diverge. When Market Profile POC is significantly different from Volume Profile POC, the divergence tells you: the market spent lots of time at one price, but the heaviest volume transaction occurred elsewhere. This distinction reveals which players (time-based passive participants vs. aggressive volume participants) dominated the session.


Section 7: Synergies & Conflicts

Works Well WithAvoid Combining With
Volume ProfileMarket Profile (time-based) and Volume Profile (volume-based) identify the same structure from two angles. When their POC and Value Areas align, the level has dual institutional significance. When they diverge, the divergence itself is a signal — investigate which side (time or volume) has stronger institutional backing.
VWAPVWAP gives the session's volume-weighted average price. Market Profile gives the session's time-weighted value area. On a normal distribution day, VWAP and POC will be very close. On trending days, VWAP drifts further from POC — the gap indicates directional conviction.
Order Flow / Footprint chartsFootprint charts show bid vs. ask volume at each price for each bar — the micro-structure behind the TPO letters. Combining Market Profile (macro structure) with footprint analysis (micro-level execution) is the professional-grade approach for futures day traders.
Opening Range BreakoutThe Initial Balance (first hour, periods A and B) sets the opening range. Market Profile rules for IB extension have high statistical reliability — price extending beyond the IB tends to continue to 1.5× the IB width approximately 75% of the time.
Standard technical indicators (RSI, MACD)Market Profile is a standalone framework — adding RSI or MACD creates a mismatch between two fundamentally different trading philosophies. RSI looks backward at price momentum; Market Profile maps forward-looking value acceptance. Mixing them produces signal conflict, not clarity.
Moving averages for the primary signalMarket Profile operates on structure, not trend-following math. Plotting a 20-SMA on a Market Profile chart creates visual noise without adding information. POC, VAH, and VAL are the levels that matter — EMAs add nothing.

Section 8: Common Mistakes

Mistake Root Cause Solution
Using approximated Market Profile from retail platforms TradingView does not have true Market Profile Use Sierra Chart, Jigsaw, or ATAS for accurate TPO data. Approximations miss single prints and distort profile shape.
Treating POC as immovable support/resistance POC is the highest-time level — not a hard floor or ceiling Price breaks through POC regularly. Watch HOW it breaks — does it hold for a TPO period? Or slice through? The HOW matters more than the WHERE.
Ignoring the Initial Balance Trading before IB is established (first hour) Wait for IB completion (10:30 AM ET for US markets) before acting on Value Area signals. IB defines the day's reference range.
Acting on single-day profile without multi-day context One session's profile is one data point in a series Always view at least 5 sessions of profiles to understand the evolving value area migration direction. Is value moving up, down, or sideways?
Expecting Market Profile to work on retail platforms without data feeds Retail data does not have the resolution required Market Profile is an institutional tool requiring institutional data. Budget for professional data feed before attempting this methodology.

Section 9: Cheat Sheet

ℹ️ INFO
**Market Profile and Point of Control (POC)**

USE WHEN: Trading futures, indices, or high-volume ETFs with access to professional data (Sierra Chart, Jigsaw, ATAS). Use for pre-session planning — marking prior day's POC, VAH, VAL, and single prints before market open.

AVOID WHEN: No access to true TPO data feed. Equities with low volume or irregular sessions. Using retail charting platforms that do not offer full Market Profile with letter display.

ENTRY SIGNAL: Opening rejection at prior day's VAH or VAL (within first 2 TPO periods) — fade the test back toward POC. Or: value area acceptance above prior VAH for 2+ sessions — buy the first retest of VAH from above.

EXIT SIGNAL: Target prior session POC (from VAH rejection). Target next multi-session composite VAH (from value area breakout). Exit if price closes back inside the prior session Value Area after a breakout attempt — the breakout has failed.

PARAMETERS: 30-minute TPO periods (fixed). Value Area: 70%. Watch Initial Balance (first 60 minutes) for the session's reference range. POC ± 5 ticks = trade zone, not a hard line.

CONFLUENCE: VWAP (session average) + Volume Profile POC (volume-based center) + Market Profile POC (time-based center). When all three agree within a tight price range, the level is as strong as S/R gets in the market.

RISK: Requires professional data feed — not available on free platforms. Methodology has a steep learning curve. Misreading profile shape (balanced vs. trending) leads to mean-reversion trades on trend days and trend trades on balanced days.

BEST TIMEFRAME: Intraday (futures day trading): session-by-session profiles on 30-minute TPO charts. Swing (equities, ETFs): weekly composite profiles on daily charts.