Indicator

Fathom Profile

POC, value area, VWAP and standard deviation of the session or of each bar.

What the indicator shows

  • POC: the most traded price.
  • Value area (VAH / VAL): the range around the POC holding valueAreaPercent% of volume, 70% by default.
  • VWAP and standard deviation: the volume-weighted average price, and how spread out prices are around it.

How to use it

  • Inside the value area, the market accepts price; outside it, the market rejects it or looks for a new balance.
  • With scope: session, follow the POC as it migrates: it shows which way the market is building value.
  • With scope: bar, see where each bar traded.

How it is computed

  • scope: "session" measures the session’s profile, accumulated from the open up to this bar, to follow how the session’s values shift; scope: "bar" measures each bar’s alone, to see where each bar traded.
  • The POC is the highest-volume price. On a tie within a bar, the footprint rule applies: the lowest of the tied prices at or above the open, otherwise the highest of those below it. With scope: "session", a price only replaces the POC when it strictly exceeds it.
  • The value area is built tick by tick from the POC: at each step, it extends to the busier neighboring price, above or below, downward on a tie (a price with no volume counts as 0), until it holds valueAreaPercent% of the volume; it extends by at least one tick.
  • The standard deviation is the volume-weighted standard deviation of prices, with a Bessel correction on volume: √(Σ v·(p − VWAP)² / (V − 1)), where V is the profile’s total volume.

When it updates

  • One final point per finished timeframe-second bar, sent when it closes, whose id is the start of the bar.
  • Reset at every session open, at 6:00 pm New York time (full session, not only the RTH session). The computation, and the replay over history, start from the start of the trading week (origin: week); the week’s last bar gets its values on the first trade of the Sunday reopen.
Identifier
session-profile
Objects received
values
Historical cost
1 compute unit per trade

Subscribe

The same params work in real time, on historical data and in exports. Parameters you omit take their default values.

Subscribe message
{
  "t": "subscribe",
  "sub": "session-profile",
  "instrument": "NQ.front",
  "indicator": "session-profile",
  "params": {
    "scope": "session",
    "timeframe": 300,
    "valueAreaPercent": 70
  },
  "mode": "live",
  "from": "live"
}

Parameters

As soon as a parameter differs from its default, the subscription counts as a custom configuration. To change a parameter, open a new subscription.

ParameterTypeDefaultAllowed valuesUnitDescription
scopechoicesessionsession · bar—Which volume profile is measured: the session’s, accumulated from the open up to this bar (session), or this bar’s alone (bar). Each value is a separate stream: open two subscriptions to get both.
timeframeinteger3001 · 5 · 10 · 15 · 30 · 60 · 120 · 180 · 300 · 600 · 900 · 1800 · 3600—Bar duration in seconds: from 1 second (1) to 1 hour (3600).
valueAreaPercentinteger701 to 100%Share of the volume contained in the value area.

Objects received

Each object keeps the same id from one update to the next. Its data is in the data field. Prices are in ticks: multiply them by the instrument’s tick size (GET /v1/instruments) to get points.

values sent final

Values at the close of the bar.

id format: <barStartNs>. Each object is sent once, final (final: true).

FieldTypeUnitPresentDescription
pocintegerticksalwaysPOC of the profile (the session’s up to this bar, or this bar’s alone, per scope).
sdnumberticksalwaysVolume-weighted standard deviation of prices, with a Bessel correction on volume (√(Σ v·(p − VWAP)² / (V − 1)), V = total volume), to draw bands around the VWAP (vwap ± n × sd).
vahintegerticksalwaysValue area high (VAH).
valintegerticksalwaysValue area low (VAL).
vwapnumberticksalwaysVWAP of the profile (session or bar, per scope).

Example messages

Messages as the WebSocket sends them to the subscription above, taken from a real NQ session. Historical data returns the same objects, with the same cursor, without the sub field.

Final object
{
  "sub": "session-profile",
  "cursor": "20720.0.0",
  "t": "upsert",
  "id": "1790207700000000000",
  "final": true,
  "ts": "1790208000058746563",
  "data": {
    "poc": 123076,
    "vah": 123177,
    "val": 122990,
    "vwap": 123131.51652638057,
    "sd": 63.49728844602092
  }
}

JSON schemas

To validate or type your data: the JSON schemas of the parameters and of data, also available from GET /v1/indicators. The SDK can generate types from them.

Parameters schema
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/session-profile/params.json",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "scope": {
      "description": "Which volume profile is measured: the session’s, accumulated from the open up to this bar (`session`), or this bar’s alone (`bar`). Each value is a separate stream: open two subscriptions to get both.",
      "type": "string",
      "default": "session",
      "enum": [
        "session",
        "bar"
      ]
    },
    "timeframe": {
      "description": "Bar duration in seconds: from 1 second (`1`) to 1 hour (`3600`).",
      "type": "integer",
      "default": 300,
      "enum": [
        1,
        5,
        10,
        15,
        30,
        60,
        120,
        180,
        300,
        600,
        900,
        1800,
        3600
      ]
    },
    "valueAreaPercent": {
      "description": "Share of the volume contained in the value area.",
      "type": "integer",
      "default": 70,
      "minimum": 1,
      "maximum": 100
    }
  }
}
data field schema
JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://fathomcharts.com/schemas/session-profile/data.json",
  "title": "values",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "poc": {
      "description": "POC of the profile (the session’s up to this bar, or this bar’s alone, per `scope`).",
      "type": "integer"
    },
    "sd": {
      "description": "Volume-weighted standard deviation of prices, with a Bessel correction on volume (√(Σ v·(p − VWAP)² / (V − 1)), V = total volume), to draw bands around the VWAP (`vwap` ± n × `sd`).",
      "type": "number"
    },
    "vah": {
      "description": "Value area high (VAH).",
      "type": "integer"
    },
    "val": {
      "description": "Value area low (VAL).",
      "type": "integer"
    },
    "vwap": {
      "description": "VWAP of the profile (session or bar, per `scope`).",
      "type": "number"
    }
  },
  "required": [
    "poc",
    "vah",
    "val",
    "vwap",
    "sd"
  ]
}