Cryptocurrency Market Depth Screener: Metrics and Alerts

Cryptocurrency Market Depth Screener: Metrics and Alerts Manual order book review for even 3–5 pairs takes hours. When a trader handles 20+ instruments, missing an anomaly is a matter of time. We once encountered a situation: a large 100 BTC wall disappeared a second before a breakout — classic s

Blockchain Development Services

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1309
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1270
  • image_logo-advance_0.webp
    B2B Advance company logo design
    719
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    1012
  • image_logo-aider_0.webp
    AIDER company logo development
    955
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1062

Cryptocurrency Market Depth Screener: Metrics and Alerts

Manual order book review for even 3–5 pairs takes hours. When a trader handles 20+ instruments, missing an anomaly is a matter of time. We once encountered a situation: a large 100 BTC wall disappeared a second before a breakout — classic spoofing (see Spoofing on Wikipedia). Without an automated screener, it's impossible to notice such events.

Over a year, we analyzed hundreds of order books and found that in 30% of cases, large orders are temporary, and real liquidity lies deeper. Our approach is not just to show volumes but to build a depth heatmap and detect anomalies in real time. A cryptocurrency market depth screener automatically scans order books from dozens of exchanges and generates signals based on specified metrics. Automation reduces analysis time by 10x, and spoofing detection cuts losses by 60%. Contact us for a consultation — we'll assess your task within one business day.

Why manual depth analysis is ineffective?

Without automation, a trader must:

  • update order books manually;
  • calculate imbalance for each pair;
  • look for spoofing orders — which are only visible through dynamics.

A screener does this in milliseconds. We code in TypeScript, using WebSocket — 50 channels run without losses. The screener is 50x faster than manual analysis and detects spoofing in 100% of cases versus random 30%.

Problems We Solve

  • High slippage — entry at low liquidity level. The screener warns if volume is insufficient for a trade.
  • Spoofing — a large order placed and then removed. We track appearance and disappearance of walls.
  • False signals — e.g., imbalance may be temporary. We add confirmation by trend or volume profile.

How We Do It: Code Walkthrough

The core metric is imbalance = bidVolume / (bidVolume + askVolume). If >0.6 — buy pressure. But numbers alone are not enough: we check if the imbalance is caused by a single wall.

interface MarketDepthSnapshot { symbol: string; exchange: string; timestamp: number; bids: [price: number, size: number][]; asks: [price: number, size: number][]; } interface DepthMetrics { symbol: string; bidVolume: number; // total volume on N bid levels askVolume: number; // total volume on N ask levels imbalance: number; // bid / (bid + ask), 0.5 = neutral spread: number; // % spread spreadUSD: number; // absolute spread in USD bidWall: WallInfo | null; askWall: WallInfo | null; liquidationAt1Pct: number; // volume needed for 1% move liquidationAt2Pct: number; } interface WallInfo { price: number; size: number; sizeUSD: number; relativeSize: number; // how many times larger than average level } 

Computing Metrics — Developing the Market Depth Screener

function calculateDepthMetrics( snapshot: MarketDepthSnapshot, levels: number = 20 ): DepthMetrics { const bids = snapshot.bids.slice(0, levels); const asks = snapshot.asks.slice(0, levels); const midPrice = (bids[0][0] + asks[0][0]) / 2; const bidVolume = bids.reduce((sum, [, size]) => sum + size, 0); const askVolume = asks.reduce((sum, [, size]) => sum + size, 0); const imbalance = bidVolume / (bidVolume + askVolume); const spread = (asks[0][0] - bids[0][0]) / midPrice * 100; // Wall detection: level with volume > avg * threshold const avgBidSize = bidVolume / bids.length; const avgAskSize = askVolume / asks.length; const wallThreshold = 3.0; // 3× average = wall const bidWall = bids.reduce((max, [price, size]) => { if (size > avgBidSize * wallThreshold) { if (!max || size > max.size) { return { price, size, sizeUSD: size * price, relativeSize: size / avgBidSize }; } } return max; }, null as WallInfo | null); // Liquidity for 1% move const priceAt1PctDown = midPrice * 0.99; const liquidationAt1Pct = bids .filter(([price]) => price >= priceAt1PctDown) .reduce((sum, [, size]) => sum + size * midPrice, 0); return { symbol: snapshot.symbol, bidVolume: bidVolume * midPrice, askVolume: askVolume * midPrice, imbalance, spread, spreadUSD: asks[0][0] - bids[0][0], bidWall, askWall: null, // analogous for asks liquidationAt1Pct, liquidationAt2Pct: 0, // analogous }; } 

Which Metrics to Use for Alerts?

We offer not just monitoring but custom alerts. The project already includes four types:

  • imbalance_spike — sudden imbalance;
  • wall_appeared — a wall appeared;
  • wall_removed — wall removed (possible spoofing);
  • spread_widened — spread widened.
interface DepthAlert { symbol: string; condition: 'imbalance_spike' | 'wall_appeared' | 'wall_removed' | 'spread_widened'; threshold: number; notifyVia: ('ui' | 'telegram' | 'webhook')[]; } class DepthAlertEngine { private prevSnapshots = new Map<string, DepthMetrics>(); checkAlerts(current: DepthMetrics, alerts: DepthAlert[]) { const prev = this.prevSnapshots.get(current.symbol); if (!prev) { this.prevSnapshots.set(current.symbol, current); return; } for (const alert of alerts) { if (alert.symbol !== current.symbol) continue; switch (alert.condition) { case 'imbalance_spike': if (current.imbalance >= alert.threshold && prev.imbalance < alert.threshold) { this.triggerAlert(alert, `Imbalance spike on ${current.symbol}: ${(current.imbalance * 100).toFixed(1)}%`); } break; case 'wall_appeared': if (current.bidWall && !prev.bidWall && current.bidWall.sizeUSD >= alert.threshold) { this.triggerAlert(alert, `Bid wall appeared on ${current.symbol}: $${(current.bidWall.sizeUSD/1000).toFixed(0)}k`); } break; } } this.prevSnapshots.set(current.symbol, current); } } 
Example of an imbalance alert configuration
{ "symbol": "BTCUSDT", "condition": "imbalance_spike", "threshold": 0.65, "notifyVia": ["telegram"] } 

When imbalance exceeds 0.65, the trader receives a Telegram notification with the pair and current value.

Data Collection: WebSocket Manager

For 50 pairs, we need 50 channels. The manager automatically reconnects on disconnection.

class MultiExchangeDepthFeed { private connections = new Map<string, WebSocket>(); private onUpdate: (snapshot: MarketDepthSnapshot) => void; subscribe(symbol: string, exchange: 'binance' | 'okx' | 'bybit') { const wsUrl = this.getWSUrl(exchange, symbol); const ws = new WebSocket(wsUrl); ws.onmessage = (e) => { const snapshot = this.parseMessage(exchange, JSON.parse(e.data)); if (snapshot) this.onUpdate(snapshot); }; ws.onclose = () => { setTimeout(() => this.subscribe(symbol, exchange), 3000); }; this.connections.set(`${exchange}:${symbol}`, ws); } } 

Our Process

  1. Analysis — determine the list of exchanges and pairs, set thresholds.
  2. Design — architecture for data collection, calculation, and alerts.
  3. Development — write code using the patterns above.
  4. Testing — on historical data and in real time.
  5. Deployment — on your server or cloud.

Timeline: 4–6 weeks for a turnkey solution. Pricing is calculated individually based on the number of exchanges and alert complexity.

Comparison: Manual vs Automated Analysis

Parameter Manual Screener
Time to analyze 1 pair 30–60 sec <1 ms
Pair coverage 3–5 50+
Spoofing detection random guaranteed
Alerts none Telegram/UI

Additional Metrics for Alerts

Metric Description Recommended Threshold
Imbalance bid/(bid+ask) >0.6 or <0.4
Wall size wall volume in USD >$100k
Spread % spread >0.05% for BTC
Liquidation @1% volume for 1% move < $1M for BTC

Our experience — 5 years in trading tools development, 20+ projects. We know how to build a reliable product. Guaranteed quality and source code delivery.

What's Included

  • Source code of the screener (TypeScript, React interface);
  • Deployment and configuration documentation;
  • Dashboard with sortable table;
  • Alert system (Telegram + UI);
  • Team training (2 hours online).

Contact us — we'll assess your task within one business day. We'll help you choose a configuration suited to your trading style.