Crates.io | ninjabook |
lib.rs | ninjabook |
version | 0.1.7 |
source | src |
created_at | 2024-04-10 03:51:34.483703 |
updated_at | 2024-11-12 10:28:19.917446 |
description | A lightweight and high performance orderbook |
homepage | https://github.com/ninja-quant/ninjabook |
repository | https://github.com/ninja-quant/ninjabook |
max_upload_size | |
id | 1203123 |
size | 12,542,336 |
A lightweight and high-performance order-book implemented in Rust, designed to process level 2 and trades data.
Available in Python and Rust!
Find Python and Rust hello_world
programs in the examples
directory.
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:
The scenarios tested are:
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 |
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.
Just some cosmetic improvements need to be done. Refactor Orderbook
core functions into a Trait
, add docs and potentially more tests/bench/examples.