Skip to content

A lightweight and high-performance order-book designed to process level 2 and trades data. Available in Rust and Python

License

Notifications You must be signed in to change notification settings

ninja-quant/ninjabook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ninjabook

Pypi Crates.io Documentation MIT licensed Rust

A lightweight and high-performance order-book implemented in Rust, designed to process level 2 and trades data.

Available in Python and Rust!

Getting started

Find Python and Rust hello_world programs in the examples directory.

Performance

Ran a couple of benchmarks showcasing real case scenarios against a naive Vec implementation and an orderbook with a fixed size of 500 levels.

The benchmarks are run with 300,000 events of level 2 orderbook data . This data is split in 2 chunks:

  • First 200,000 events are used to warm up and verify all orderbook versions publish the same BBO and top5 levels.
  • Last 100,000 for the actual benchmark.

The scenarios tested are:

  • Process events and stream best bid and ask
  • Process events and stream top5 bids and asks

Here are the results:

bench iterations time ns/iter
ninjabook_bbo 100,000 5.0108 ms 50.108 ns
fixed_500_bbo 100,000 49.018 ms 490.18 ns
naive_bbo 100,000 90.552 ms 905.52 ns
ninjabook_top5 100,000 11.797 ms 117.97 ns
fixed_500_top5 100,000 54.693 ms 546.93 ns
naive_top5 100,000 95.644 ms 956.44 ns

Contributing

To add a better version, create a new file, implementing the same methods as orderbook.rs (including tests) and add the improved orderbook to the bench optimal_vs_naive.rs. Only order books with a better performance than orderbook.rs will be considered. Lastly, add performance logs to the Pull Request, can just copy paste what cargo bench outputs.

Any issues, refactoring, docs and tests are also welcomed. Feel free to reach out here if you have any questions.

Caveats

Just some cosmetic improvements need to be done. Refactor Orderbook core functions into a Trait, add docs and potentially more tests/bench/examples.

About

A lightweight and high-performance order-book designed to process level 2 and trades data. Available in Rust and Python

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages