Depth-at-Distance Profile
Install and import#
npm install fintech-algorithmsimport { 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#
| Name | Type | Notes |
|---|---|---|
bidsRaw | Level[] | Bid levels. |
asksRaw | Level[] | Ask levels. |
tickRaw | number | Tick size. min: 0 |
maxRaw | number | Maximum 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#
[
{
"price": 99.99,
"quantity": 500
},
{
"price": 99.98,
"quantity": 800
},
{
"price": 99.97,
"quantity": 1200
}
]Showing 3 of 5 elements.
[
{
"price": 100.01,
"quantity": 300
},
{
"price": 100.02,
"quantity": 600
},
{
"price": 100.03,
"quantity": 1000
}
]Showing 3 of 5 elements.
0.014Call#
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#
Calculation flow#
Depth-at-Distance Profile calculation flow
flowchart LR
S1["Validate tick alignment"]
S2["Anchor each side at its own best quote"]
S3["Map every level to an integer distance"]
S4["Emit zero for unpopulated distances"]
S5["Calculate quantity shares and cumulative depth"]
S1 --> S2
S2 --> S3
S3 --> S4
S4 --> S5
S5 --> D{"tick alignment and inclusive maximum distance"}
D --> O["included_bid_depth + diagnostics"]
O --> A["Audit: Distance zero is populated on each nonempty side"]
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.
References#
- NYSE Integrated Feed — New York Stock Exchange
- Nasdaq TotalView-ITCH 5.0 Specification — Nasdaq
- Evidence boundary