npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

orderbooks

v1.1.10

Published

In-memory state stores and handlers for caching multiple exchange:symbol orderbook states

Downloads

728

Readme

OrderBooks Store npm version npm size npm downloads

CodeFactor

A minimal set of utilities for handling orderbook snapshots and delta updates, with bybit examples.

Issues & Discussion

Documentation

Related projects

Check out my related projects:

Contributions & Thanks

If you found this project interesting or useful, sponsor me on github, create accounts with my referral links:

For more ways to give thanks & support my efforts, visit Contributions & Thanks!

Project Contributions

Contributions are very welcome, I will review any incoming pull requests. See the issues tab for todo items.

Features

  • Handle snapshot and delta orderbook events.
  • Track multiple symbol orderbooks.
  • Easily access best bid/ask prices.
  • Conveniently access the difference between the best bid and ask prices, with the spread represented in basis point units.
  • Easily keep orderbook depth trimmed to max depth.
  • Tiny module with 0 external dependencies.

Installation

npm install -save orderbooks

Usage

Tracking

  • Import books store & level
const { OrderBooksStore, OrderBookLevel } = require('orderbooks');
  • Create instance of orderbooks store, to store multiple order books for a broker
// all options are optional
const options = {
  // output traces on any events sent handled by book
  traceLog: true,

  // check current timestamp > last timestamp, else deny processing event
  checkTimestamps: false,

  // max size of orderbook (e.g 50 == 25 bids & 25 asks). Defaults to 250.
  maxDepth: 50,
};

const OrderBooks = new OrderBooksStore(options);
  • Feed snapshot and delta updates into OrderBooks.handle() methods.

Examples

See the ./samples/ folder for more.

Real Example - Binance

See ./samples/binance.ts

Real Example - Bybit

  • Import modules
  • Prepare OrderBooks store instance
  • Connect to OrderBooks websockets
  • Map event properties to expected key:value pairs
  • Feed mapped snapshot and delta events into OrderBooks.handle() methods

See ./samples/bybit.ts

Example output with print() calls to output book state to console:

---------- BTCUSD ask:bid 9240:9239.5 & spread: 0.01%
┌─────────┬──────────┬────────┬────────┬─────────┐
│ (index) │  symbol  │ price  │  side  │   qty   │
├─────────┼──────────┼────────┼────────┼─────────┤
│    0    │ 'BTCUSD' │  9252  │ 'Sell' │ 132623  │
│    1    │ 'BTCUSD' │ 9251.5 │ 'Sell' │  82221  │
│    2    │ 'BTCUSD' │  9251  │ 'Sell' │  34974  │
│    3    │ 'BTCUSD' │ 9250.5 │ 'Sell' │  12842  │
│    4    │ 'BTCUSD' │  9250  │ 'Sell' │ 550687  │
│    5    │ 'BTCUSD' │ 9249.5 │ 'Sell' │  63371  │
│    6    │ 'BTCUSD' │  9249  │ 'Sell' │ 200127  │
│    7    │ 'BTCUSD' │ 9248.5 │ 'Sell' │ 129099  │
│    8    │ 'BTCUSD' │  9248  │ 'Sell' │ 209061  │
│    9    │ 'BTCUSD' │ 9247.5 │ 'Sell' │  30722  │
│   10    │ 'BTCUSD' │  9247  │ 'Sell' │ 165469  │
│   11    │ 'BTCUSD' │ 9246.5 │ 'Sell' │  97780  │
│   12    │ 'BTCUSD' │  9246  │ 'Sell' │  95342  │
│   13    │ 'BTCUSD' │ 9245.5 │ 'Sell' │  41319  │
│   14    │ 'BTCUSD' │  9245  │ 'Sell' │ 227242  │
│   15    │ 'BTCUSD' │ 9244.5 │ 'Sell' │ 167586  │
│   16    │ 'BTCUSD' │  9244  │ 'Sell' │ 237029  │
│   17    │ 'BTCUSD' │ 9243.5 │ 'Sell' │ 103426  │
│   18    │ 'BTCUSD' │  9243  │ 'Sell' │ 126357  │
│   19    │ 'BTCUSD' │ 9242.5 │ 'Sell' │ 165034  │
│   20    │ 'BTCUSD' │  9242  │ 'Sell' │ 264286  │
│   21    │ 'BTCUSD' │ 9241.5 │ 'Sell' │ 261200  │
│   22    │ 'BTCUSD' │  9241  │ 'Sell' │ 233533  │
│   23    │ 'BTCUSD' │ 9240.5 │ 'Sell' │ 399512  │
│   24    │ 'BTCUSD' │  9240  │ 'Sell' │ 1397987 │
│   25    │ 'BTCUSD' │ 9239.5 │ 'Buy'  │  1132   │
│   26    │ 'BTCUSD' │  9239  │ 'Buy'  │ 234214  │
│   27    │ 'BTCUSD' │ 9238.5 │ 'Buy'  │  58320  │
│   28    │ 'BTCUSD' │  9238  │ 'Buy'  │  17094  │
│   29    │ 'BTCUSD' │ 9237.5 │ 'Buy'  │  50980  │
│   30    │ 'BTCUSD' │  9237  │ 'Buy'  │  13449  │
│   31    │ 'BTCUSD' │ 9236.5 │ 'Buy'  │  2608   │
│   32    │ 'BTCUSD' │  9236  │ 'Buy'  │  53742  │
│   33    │ 'BTCUSD' │ 9235.5 │ 'Buy'  │ 106681  │
│   34    │ 'BTCUSD' │  9235  │ 'Buy'  │  48653  │
│   35    │ 'BTCUSD' │ 9234.5 │ 'Buy'  │  76188  │
│   36    │ 'BTCUSD' │  9234  │ 'Buy'  │ 215664  │
│   37    │ 'BTCUSD' │ 9233.5 │ 'Buy'  │ 169265  │
│   38    │ 'BTCUSD' │  9233  │ 'Buy'  │  30296  │
│   39    │ 'BTCUSD' │ 9232.5 │ 'Buy'  │ 196676  │
│   40    │ 'BTCUSD' │  9232  │ 'Buy'  │  82840  │
│   41    │ 'BTCUSD' │ 9231.5 │ 'Buy'  │ 105854  │
│   42    │ 'BTCUSD' │  9231  │ 'Buy'  │  1671   │
│   43    │ 'BTCUSD' │ 9230.5 │ 'Buy'  │  25909  │
│   44    │ 'BTCUSD' │  9230  │ 'Buy'  │ 146198  │
│   45    │ 'BTCUSD' │ 9229.5 │ 'Buy'  │  95941  │
│   46    │ 'BTCUSD' │  9229  │ 'Buy'  │  61212  │
│   47    │ 'BTCUSD' │ 9228.5 │ 'Buy'  │  76966  │
│   48    │ 'BTCUSD' │  9228  │ 'Buy'  │  93996  │
│   49    │ 'BTCUSD' │ 9227.5 │ 'Buy'  │  44058  │
└─────────┴──────────┴────────┴────────┴─────────┘

Accessing State

Access orderbook state using the OrderBooksStore.

const btcOrderBook = OrderBooks.getBook('BTCUSD');

// Get an array dump of the current orderbook state (similar to what you see on exchange websites)
const btcOrderBookState = btcOrderBook.getBookState();
console.log('Current book state: ', JSON.stringify(btcOrderBookState));

const bestBid = btcOrderBook.getBestBid();
// bestBid = 9239.5

const secondBestBid = btcOrderBook.getBestBid(1);
// secondBestBid = 9239

const bestAsk = btcOrderBook.getBestAsk();
// bestAsk = 9040

const secondBestAsk = btcOrderBook.getBestAsk(1);
// secondBestAsk = 9040.5

const currentSpread = btcORderBook.getSpreadPercent();
// currentSpread = 0.01

Utility Methods

The following ultity methods are exposed for each book:

const btcOrderBook = OrderBooks.getBook('BTCUSD');

// console.log current orderbook state
btcOrderBook.print();

// clear current orderbook to free memory
btcOrderBook.reset();

Star History

Star History Chart