fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Session VWAP Indicator

Install and import#

bash
npm install fintech-algorithms
ts
import { sessionVwapIndicator } from "fintech-algorithms/technical-indicators/volume-indicators/session-vwap-indicator";

Signature#

sessionVwapIndicator(input)

Accumulates typical price times volume divided by cumulative volume, restarting the accumulation at every new session.

Parameters#

NameTypeNotes
inputTopicInputbars needs timestamp, high, low, close and volume. This topic reads no parameters of its own; the family reads period (default 14), fast_period (default 3) and slow_period (default 10, minimum fast_period + 1) for every volume topic, so a non-integer or out-of-range value throws even when this topic ignores it.

Returns#

TopicResult

series holds a single value, and latest its last element. The session key is the first ten characters of timestamp, and both accumulators reset whenever that key differs from the previous bar's. With daily YYYY-MM-DD bars every bar is therefore its own session and value equals that bar's typical price, (high + low + close) / 3. There is no warm-up.

Warm-up#

The first none positions are null only when a session's accumulated volume is 0. value is populated on the first bar of every session, so ready_at is 0 unless the first bar has zero volume.

Errors#

  • When a bar carries a negative volume — throws Error
  • When a high is below the bar's open, low or close — throws Error
  • When bars is not an array, or a timestamp is missing or empty — throws Error

Complexity: time O(n), space O(n).

Worked example#

executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.

Input#

input
{
  "bars": [
    {
      "timestamp": "2024-01-02",
      "basis": "synthetic-unadjusted",
      "open": 100,
      "high": 101.45,
      "low": 98.695,
      "close": 100,
      "volume": 750000,
      "benchmark": 200
    },
    {
      "timestamp": "2024-01-03",
      "basis": "synthetic-unadjusted",
      "open": 101.49111452,
      "high": 103.38381693,
      "low": 100.05480022,
      "close": 101.78791214,
      "volume": 795117,
      "benchmark": 200.56326135
    },
    {
      "timestamp": "2024-01-04",
      "basis": "synthetic-unadjusted",
      "open": 102.45519048,
      "high": 104.6701838,
      "low": 100.91147007,
      "close": 102.9549389,
      "volume": 840234,
      "benchmark": 201.11020913
    }
  ],
  "parameters": {}
}

Call#

sessionVwapIndicator(input)

Returns#

object with 9 fields: topic_id, title, state, ready, ready_at, series, latest, parameters, …

{
  "topic_id": "D07-F05-A08",
  "title": "Session VWAP Indicator",
  "state": "calculated",
  "ready": true,
  "ready_at": 0,
  "series": {
    "value": [
      100.04833333333333,
      101.74217643000001,
      102.84553092333333,
      103.11026585,
      102.75204238333333,
      102.27411882333332
    ]
  },
  "latest": {
    "value": 100.16305426666668
  },
  "parameters": {},
  "diagnostics": {
    "causal": true,
    "input_count": 96
  }
}

Diagrams#

Session VWAP Indicator — article hero
Session VWAP Indicator — concept map
Session VWAP Indicator — decision comparison
Session VWAP Indicator — worked example

Calculation flow#

Session VWAP Indicator calculation flow
flowchart LR
    A["basis-consistent OHLCV observations with venue/session cov"] --> B["Validate order, basis, and finite values"]
    B --> C["Apply the selected Session VWAP Indicator convention"]
    C --> D["Emit value, readiness, and diagnostics"]
    D --> E["Interpret descriptively; test outcomes separately"]
    B -->|invalid or insufficient| X["Withhold output with a reason"]
Session VWAP Indicator readiness and evidence states
stateDiagram-v2
    [*] --> Waiting
    Waiting --> Ready: enough valid causal observations
    Waiting --> Rejected: malformed or unsupported input
    Ready --> Calculated: selected formula applied
    Calculated --> Interpreted: diagnostic and limitation retained
    Interpreted --> Ready: next observation arrives
    Rejected --> Waiting: corrected input and deterministic reset

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

  • TA-Lib function groups — see linked primary or authoritative record
  • TA-Lib C/C++ API — see linked primary or authoritative record
  • TA-Lib maintained source — see linked primary or authoritative record
  • Evidence decision
  • Level 1 evidence map

The rest of the Volume Indicators family#