MarketLab Docs
ScriptingData Types

Volumes

Volume profile shapes for Market Lab scripts.

Volumes

Volume profile data is available under input.volumes.

Input

type VolumesWindowInput = {
  mode: "window";
  volumes: {
    profiles: VolumeProfile[];
    timeframe_sec: number;
  };
}

type VolumesStreamInput = {
  mode: "stream";
  source: "volumes";
  volumes: {
    profile: VolumeProfile;
    timeframe_sec: number;
  };
}

Volume Profile

type VolumeProfile = {
  t: number;
  p: number[];
  b: number[];
  s: number[];
  pg: number;
}

Fields:

  • t: timestamp in Unix seconds
  • p: price levels
  • b: buy volume at each price in USD
  • s: sell volume at each price in USD
  • pg: price grouping / bucket size

The arrays are aligned by index. For example, p[3] has buy volume b[3] and sell volume s[3].

Example

export function onData(ctx, input) {
  const profiles = input.mode === "stream" ? [input.volumes.profile] : input.volumes.profiles
  const latest = profiles[profiles.length - 1]

  let poc = null
  let pocVolume = -Infinity
  let totalVolume = 0

  for (let idx = 0; idx < latest.p.length; idx += 1) {
    const total = (latest.b[idx] ?? 0) + (latest.s[idx] ?? 0)
    totalVolume += total
    if (total > pocVolume) {
      pocVolume = total
      poc = latest.p[idx]
    }
  }

  return {
    metrics: {
      poc,
      total_volume: totalVolume,
      price_group: latest.pg
    }
  }
}

On this page