matchcore 0.4.0

A high-performance order book and price-time matching engine implemented as a single-threaded, deterministic, in-memory state machine
Documentation
//! Example: Level 1 and Level 2 market data views from a populated book
//!
//! Flow:
//! 1. Populate a book with standard buy and sell orders.
//! 2. Construct `Level1` and `Level2` snapshots and query various metrics.
//!
//! Run: `cargo run --example market_data`

mod helpers;

use matchcore::*;

fn main() {
    let book = helpers::populate_book();

    let l1 = Level1::from(&book);
    println!("=== Level 1 ===\n");
    println!("{}", l1);

    println!("Spread: {}", l1.spread().unwrap());
    println!("Mid price: {}", l1.mid_price().unwrap());
    println!("Micro price: {}", l1.micro_price().unwrap());

    println!();

    let l2: Level2 = Level2::from(&book);
    println!("=== Level 2 ===\n");
    println!("{}", l2);

    println!("Spread: {}", l2.spread().unwrap());
    println!("Mid price: {}", l2.mid_price().unwrap());
    println!("Micro price: {}", l2.micro_price().unwrap());

    println!();

    println!("Bid size: {}", l2.bid_size(10));
    println!("Ask size: {}", l2.ask_size(10));

    println!();

    println!("Is thin book: {}", l2.is_thin_book(Quantity(100), 10));
    println!("Order book imbalance: {}", l2.order_book_imbalance(10));

    println!();

    let bid_depth_stats = l2.depth_statistics(Side::Buy, 10);
    println!(
        "Bid depth stats: analyzed levels: {}, total value: {}, total size: {}, average level size: {}, min level size: {}, max level size: {}, std dev level size: {}, vwap: {}",
        bid_depth_stats.n_analyzed_levels(),
        bid_depth_stats.total_value(),
        bid_depth_stats.total_size(),
        bid_depth_stats.average_level_size(),
        bid_depth_stats.min_level_size(),
        bid_depth_stats.max_level_size(),
        bid_depth_stats.std_dev_level_size(),
        bid_depth_stats.vwap()
    );
    let ask_depth_stats = l2.depth_statistics(Side::Sell, 10);
    println!(
        "Ask depth stats: analyzed levels: {}, total value: {}, total size: {}, average level size: {}, min level size: {}, max level size: {}, std dev level size: {}, vwap: {}",
        ask_depth_stats.n_analyzed_levels(),
        ask_depth_stats.total_value(),
        ask_depth_stats.total_size(),
        ask_depth_stats.average_level_size(),
        ask_depth_stats.min_level_size(),
        ask_depth_stats.max_level_size(),
        ask_depth_stats.std_dev_level_size(),
        ask_depth_stats.vwap()
    );

    println!();

    println!(
        "Bid price at depth: {}",
        l2.price_at_depth(Side::Buy, Quantity(500)).unwrap()
    );
    println!(
        "Ask price at depth: {}",
        l2.price_at_depth(Side::Sell, Quantity(500)).unwrap()
    );

    println!();

    println!("Buy VWAP: {}", l2.vwap(Side::Buy, Quantity(500)).unwrap());
    println!("Sell VWAP: {}", l2.vwap(Side::Sell, Quantity(500)).unwrap());
}