Volume Profile and Entry Selection: What POC Alignment Can—and Cannot—Tell You

Video: How to Use Volume Profile for Sniper Entries (STEAL THIS)
Creator: Ara Kerbabian
Original Video: Watch the original video
Difficulty: Advanced

The Big Idea

Two entry levels can fit the same directional idea while offering different chances of filling and different risk distances. Volume profile supplies another way to describe the chosen range: where the available feed records concentrated activity, and where relatively little activity appears.

What the Profile Measures

A volume profile groups activity by price over a selected interval. The point of control, or POC, identifies the price row with the greatest recorded volume under that profile’s calculation. High-volume and low-volume nodes describe the distribution around it.

The source uses a custom range extending beyond the immediately marked high and low into earlier price action. That detail matters: a different time window, row size, feed, or allocation method can produce a different POC. The tallest row is not an instrument-wide constant.

For the creator, the profile supplements an existing checklist of higher-timeframe alignment, a structure break, a failed breakout or sweep, and an imbalance. Each item contributes to a displayed score. A score of 100 is completion of that checklist, not a 100% probability of success.

Separate Recorded Activity From Current Orders

Historical volume shows that trading occurred under the feed’s definition. It does not prove that the same participants will defend the area later, that their orders remain, or that new orders cannot overwhelm the previous concentration.

The source treats dense nodes as potential resistance to a retracement and sparse nodes as potential areas of faster travel. Those are hypotheses about future behavior. A high-volume area may also attract rotation or acceptance; a low-volume boundary can still produce a reaction. Do not discard every sparse area as irrelevant.

ObservationWhat it establishesWhat it does not establish
Highest-volume rowThe largest measured allocation in the selected profileA guaranteed future defense
Sparse rowLess recorded activity under this calculationNo orders or no possible reaction
POC near an entry referenceTwo defined observations overlapA calibrated increase in win probability

The Real Decision Is Fill Rate Versus Entry Quality

The examples compare retracement entries around 67% and 75% of a bearish range. A higher short entry may reduce distance to the same protective reference and increase room to the same objective, but the market may turn before filling it.

The creator uses the profile to help decide which candidate deserves attention and when a concentration near the stop is a warning. This is a selection process to investigate, not evidence that the profile can reliably choose the perfect limit price.

Worked Example: Two Short Limits

Fictional bearish range

Assume a decline from 100.00 to 80.00. Both hypothetical short plans use a 100.00 protective reference and 80.00 objective, before costs.

StepCalculation or observationMeaning
67% retracement80 + 0.67 × 20 = 93.40Risk 6.60; reward 13.40: approximately 2.03R.
75% retracement80 + 0.75 × 20 = 95.00Risk 5.00; reward 15.00: 3R.
Candidate profileThe measured POC lies near 93.40This may motivate observing the earlier entry, but does not prove it will hold.
Fill tradeoffPrice reaches 93.60, then turns lowerThe 95.00 limit might remain unfilled; it earns no hypothetical profit simply because its drawn R is larger.

For a fair comparison, retain the opportunities that reached neither level, one level, or both. Do not award each entry method its favorable fills and quietly remove the missed winners. Record actual or conservatively modeled execution rather than assuming a touched line guarantees queue priority.

Why a Concentration Near Invalidation Matters

If the activity concentration lies close to the planned stop, a return toward that area can leave little buffer. Spread changes, slippage, and ordinary volatility may matter more than the visual precision of the entry.

This does not mean the market is being pulled there by a known collection of orders. It means the proposed trade exposes a particular price-distance problem. The useful question is whether such candidates behave differently across a predefined sample.

The source includes an open trade whose final outcome is not supplied and selected examples of both appealing and unappealing alignments. Treat the pending trade as pending. A screenshot and a favorable narrative do not establish its eventual result.

Feed Choice Is Part of the Method

Exchange-reported volume, broker-specific activity, and tick volume are not interchangeable. Tick volume may count price updates rather than the number of units exchanged. A decentralized spot-forex chart need not represent the whole market’s transactions.

TradingView’s volume-profile documentation (paid link) describes its use of lower-timeframe information and feed-dependent volume types. The source’s custom platform may use a different method. Agreement between screenshots is not a substitute for matching the data definition.

An OHLCV Estimate Needs an Honest Label

A completed candle provides a high, low, close, and aggregate volume. It does not reveal exactly how much traded at every price inside its range. The included indicator distributes each bar’s volume uniformly across the price rows it overlaps, a deliberately coarse estimate.

For example, a bar spanning 100–102 with volume 100 contributes 50 to each of two equal one-point rows under this assumption. That allocation is not a recovered transaction record. Real activity might have been heavily concentrated near one end.

Changing the chart timeframe changes those assumed distributions. This is why a coarse chart-bar estimate can disagree with a platform profile built from finer data. Use the tool to study the measurement problem and inspect approximate concentrations, not to claim exact hidden liquidity.

A Reproducible Profile Record

  1. Feed: name the symbol, venue, and volume type.
  2. Window: freeze start, end, and session selection.
  3. Rows: record price resolution and allocation method.
  4. Candidate levels: mark entries, invalidation, and objective before reviewing the reaction.
  5. Alignment: define the maximum permitted distance from the POC.
  6. Execution: keep missed fills, costs, and stop proximity visible.

Pine Script Indicator

View Pine Script Indicator Code
//@version=6
// Guide: https://candlechasers.com/volume-profile-poc-entry-selection/
// Coarse OHLCV allocation estimate; NOT true transaction-level volume-at-price.
indicator("CC Rolling Volume Allocation Estimate", overlay=true, max_bars_back=500, max_boxes_count=50, max_lines_count=5)
length = input.int(100, "Completed chart bars in profile", minval=10, maxval=300)
rows = input.int(24, "Price rows", minval=8, maxval=40)
width = input.int(30, "Maximum histogram width in chart bars", minval=5, maxval=100)
var array<box> drawings = array.new<box>()
var line pocLine = na
var table status = table.new(position.top_right, 1, 3, bgcolor=color.new(color.black, 15))
if barstate.islast
    while array.size(drawings) > 0
        box.delete(array.pop(drawings))
    line.delete(pocLine)
    int endOffset = barstate.isconfirmed ? 0 : 1
    int available = math.min(length, bar_index - endOffset + 1)
    float lo = na
    float hi = na
    int usable = 0
    if available > 0
        for j = 0 to available - 1
            int k = j + endOffset
            lo := na(lo) ? low[k] : math.min(lo, low[k])
            hi := na(hi) ? high[k] : math.max(hi, high[k])
    float stepSize = not na(hi) ? math.max(syminfo.mintick, (hi - lo) / rows) : na
    array<float> allocated = array.new_float(rows, 0.0)
    if available > 0 and not na(stepSize)
        for j = 0 to available - 1
            int k = j + endOffset
            if not na(volume[k]) and volume[k] > 0
                usable += 1
                float spread = high[k] - low[k]
                if spread == 0
                    int bucket = math.max(0, math.min(rows - 1, int(math.floor((close[k] - lo) / stepSize))))
                    array.set(allocated, bucket, array.get(allocated, bucket) + volume[k])
                else
                    for r = 0 to rows - 1
                        float lower = lo + r * stepSize
                        float upper = lower + stepSize
                        float overlap = math.max(0.0, math.min(high[k], upper) - math.max(low[k], lower))
                        array.set(allocated, r, array.get(allocated, r) + volume[k] * overlap / spread)
    float peak = array.max(allocated)
    float poc = na
    if peak > 0
        int winner = array.indexof(allocated, peak)
        poc := lo + (winner + 0.5) * stepSize
        for r = 0 to rows - 1
            float value = array.get(allocated, r)
            if value > 0
                int barsWide = math.max(1, int(math.round(width * value / peak)))
                color shade = r == winner ? color.orange : color.new(color.teal, 55)
                array.push(drawings, box.new(bar_index + 2, lo + (r + 1) * stepSize, bar_index + 2 + barsWide, lo + r * stepSize, border_color=shade, bgcolor=shade))
        // Draw forward from the current observation, not backward as a historical signal.
        pocLine := line.new(bar_index, poc, bar_index + 2 + width, poc, color=color.orange, width=2)
    table.cell(status, 0, 0, peak > 0 ? "Current rolling allocation ESTIMATE" : "No usable positive volume / insufficient bars", text_color=color.white)
    table.cell(status, 0, 1, "Bars with volume: " + str.tostring(usable) + "/" + str.tostring(available), text_color=color.white)
    table.cell(status, 0, 2, na(poc) ? "POC estimate unavailable" : "POC estimate: " + str.tostring(poc, format.mintick), text_color=color.white)

What This Indicator Shows

The indicator immediately draws a rolling histogram to the right of the latest chart bar and a current estimated POC. It uses up to one hundred completed chart bars and twenty-four rows by default. A developing live candle is excluded. Bars without positive available volume are skipped, and the status table reports usable coverage.

Volume is allocated by the overlap of each candle’s high-low interval with each row; zero-range bars are assigned to one row. The lowest-price row wins an exact tie. The POC line starts at the current observation rather than being drawn backward as a historical entry signal.

What This Indicator Does Not Show

This is not the creator’s proprietary profile, a true tick-level volume-at-price reconstruction, or a resting-liquidity map. It does not produce trade signals, calculate a value area, or grade the full checklist. The rolling profile changes as completed bars enter and leave; its current POC must not be applied to past entries as though known then.

Setup and Validation

Paste the complete code into TradingView’s Pine Editor, save it, and add it to a standard candlestick chart with sufficient history. Check the visible status table and the reference plots before expecting a marker. Review the inputs and symbol session rather than changing several settings at once.

Validation status: Structurally reviewed for completed-bar decisions, future-data use, reference lifecycle, and display behavior. This code has not been compiled or chart-tested in TradingView here. No profitability or live-execution validation is claimed. Use replay to verify the described behavior and report any compiler message exactly.

Practice and Review

  1. Window sensitivity: compare fixed one-hundred- and two-hundred-bar windows on the same feed, noting how the POC changes.
  2. Incremental selection: collect an existing setup sample first, then compare a predeclared POC-distance filter without changing entries or management.
  3. Fill audit: compare the two retracement candidates per eligible opportunity, including unfilled limits, costs, and room near the stop.

Check Your Understanding

Does a 100 checklist score mean 100% success? No. It records checklist completion.

Is historical volume resting liquidity? No. Current orders are a different data object.

Why can profiles disagree? Feeds, windows, row sizes, and allocation methods differ.

Final Takeaway

Use the profile to ask a sharper selection question, while preserving the data definition and fill tradeoff. A concentration is an observation to evaluate, not proof that an entry must work.

Risk Disclosure

This guide is educational and is not personalized financial, investment, or trading advice. Trading can result in substantial losses, including losses beyond a planned stop because of gaps, slippage, leverage, or execution failures. Examples and source-reported results are not promises of future performance. Hypothetical calculations omit costs unless stated otherwise. Indicators can be incomplete, data-dependent, and unsuitable for a particular instrument or session. Evaluate any approach with appropriate data, realistic costs, and risk limits before considering live use. Only commit funds whose loss you can afford.

Independence: CandleChasers is not affiliated with the source creator, channel, or TradingView. This is an independent educational companion, not an endorsement or an official reproduction of a proprietary tool.

As an Amazon Associate I earn from qualifying purchases.