MarketLab Docs
ScriptingData Types

VD

Volume delta candle shapes for Market Lab scripts.

VD

Volume delta data is available under input.vd.

The bucket source config controls which trade size range MMT aggregates. See VD Source for the bucket table.

Manifest

export const script = {
  name: "vd-script",
  version: "1",
  sources: ["vd"],
  params: {}
}

Command

mlab script backtest ./scripts/vd-script.js \
  --provider mmt \
  --exchange hyperliquid \
  --symbol HYPE/USDT \
  --from 1780497965372 \
  --to 1780618018000 \
  --source vd:timeframe=3600 \
  --source vd:bucket=1

Input

Window mode:

type VdWindowInput = {
  mode: "window";
  vd: {
    candles: VdCandle[];
    bucket: number;
    timeframe_sec: number;
  };
}

type VdStreamInput = {
  mode: "stream";
  source: "vd";
  vd: {
    candle: VdCandle;
    bucket: number;
    timeframe_sec: number;
  };
}

VD Candle

type VdCandle = {
  t: number;
  o: number;
  h: number;
  l: number;
  c: number;
  n: number;
}

Fields:

  • t: candle timestamp in Unix seconds
  • o: open cumulative volume delta
  • h: high cumulative volume delta
  • l: low cumulative volume delta
  • c: close cumulative volume delta
  • n: trade count

Example

export function onData(ctx, input) {
  const candles = input.mode === "stream" ? [input.vd.candle] : input.vd.candles
  const latest = candles[candles.length - 1]
  const cvd = ctx.study.cvd(candles, { bucket: input.vd.bucket })
  const delta = cvd.delta

  return {
    metrics: {
      candles: candles.length,
      delta,
      latest_cvd: cvd.latest,
      latest_close: latest.c
    },
    signal: {
      triggered: Math.abs(delta) > 0,
      side: delta > 0 ? "buy" : delta < 0 ? "sell" : "neutral"
    }
  }
}

On this page