fintech-algorithms

Depth-at-Distance Profile

Install and import

bash
npm install fintech-algorithms
ts
import { depthAtDistanceProfile } from "fintech-algorithms/market-microstructure/market-depth-analytics/depth-at-distance-profile";

Signature

depthAtDistanceProfile(bidsRaw, asksRaw, tickRaw, maxRaw)

Depth bucketed by distance from the touch, in ticks. Shows where liquidity actually sits rather than reducing the book to a single number.

Parameters

NameTypeNotes
bidsRawLevel[]Bid levels.
asksRawLevel[]Ask levels.
tickRawnumberTick size.
min: 0
maxRawnumberMaximum distance in ticks to profile.
min: 0

Returns

{ profile, max_distance, tick, … }

Depth per distance bucket on both sides.

Errors

  • When tick size is not positive — throws

Complexity: time O(levels), space O(buckets).

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

bidsRaw
[
  {
    "price": 99.99,
    "quantity": 500
  },
  {
    "price": 99.98,
    "quantity": 800
  },
  {
    "price": 99.97,
    "quantity": 1200
  }
]

Showing 3 of 5 elements.

asksRaw
[
  {
    "price": 100.01,
    "quantity": 300
  },
  {
    "price": 100.02,
    "quantity": 600
  },
  {
    "price": 100.03,
    "quantity": 1000
  }
]

Showing 3 of 5 elements.

tickRaw
0.01
maxRaw
4

Call

depthAtDistanceProfile(bidsRaw, asksRaw, tickRaw, maxRaw)

Returns

object with 8 fields: model, tick_size, max_distance_ticks, bid_profile, ask_profile, included_bid_depth, included_ask_depth, state

{
  "model": "same-side-best-tick-distance-profile",
  "tick_size": 0.01,
  "max_distance_ticks": 4,
  "bid_profile": [
    {
      "distance_ticks": 0,
      "quantity": 500,
      "cumulative_quantity": 500,
      "depth_share": 0.1388888888888889
    },
    {
      "distance_ticks": 1,
      "quantity": 800,
      "cumulative_quantity": 1300,
      "depth_share": 0.2222222222222222
    },
    {
      "distance_ticks": 2,
      "quantity": 1200,
      "cumulative_quantity": 2500,
      "depth_share": 0.3333333333333333
    }
  ],
  "ask_profile": [
    {
      "distance_ticks": 0,
      "quantity": 300,
      "cumulative_quantity": 300,
      "depth_share": 0.09090909090909091
    },
    {
      "distance_ticks": 1,
      "quantity": 600,
      "cumulative_quantity": 900,
      "depth_share": 0.18181818181818182
    },
    {
      "distance_ticks": 2,
      "quantity": 1000,
      "cumulative_quantity": 1900,
      "depth_share": 0.30303030303030304
    }
  ],
  "included_bid_depth": 3600,
  "included_ask_depth": 3300,
  "state": "bid-profile-heavier"
}

Other exports

This module also exports cumulativeDepth, topNDepthImbalance, expectedFillPrice, sweepCostAndSlippage, liquidityWallConcentration, depthDepletionReplenishment, marketDepthHeatmap, calculate. Every module additionally exports run as an alias of its primary function, and a meta object carrying its catalog id, domain, family, shape and article URL.

Diagrams

Depth-at-Distance Profile — system map

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