Trading.MatchingEngine (trading v0.1.0)

Order matching engine that handles order execution with price-time priority.

Summary

Functions

Adds a new symbol to the matching engine.

Gets market data for a symbol.

Gets the order book for a symbol.

Creates a new matching engine.

Registers a callback for events.

Submits an order to the matching engine.

Types

t()

@type t() :: %Trading.MatchingEngine{
  callbacks: map(),
  order_books: %{required(String.t()) => Trading.OrderBook.t()},
  trade_id_counter: integer(),
  trades: [trade()]
}

trade()

@type trade() :: %{
  id: String.t(),
  symbol: String.t(),
  price: float(),
  quantity: pos_integer(),
  buy_order_id: String.t(),
  sell_order_id: String.t(),
  timestamp: integer(),
  aggressor_side: :buy | :sell
}

Functions

add_symbol(engine, symbol)

@spec add_symbol(t(), String.t()) :: t()

Adds a new symbol to the matching engine.

cancel_order(engine, symbol, order_id)

@spec cancel_order(t(), String.t(), String.t()) :: {:ok, t()} | {:error, String.t()}

Cancels an order.

get_market_data(engine, symbol)

@spec get_market_data(t(), String.t()) :: {:ok, map()} | {:error, String.t()}

Gets market data for a symbol.

get_order_book(matching_engine, symbol)

@spec get_order_book(t(), String.t()) ::
  {:ok, Trading.OrderBook.t()} | {:error, String.t()}

Gets the order book for a symbol.

new()

@spec new() :: t()

Creates a new matching engine.

register_callback(engine, event, callback)

@spec register_callback(t(), atom(), function()) :: t()

Registers a callback for events.

submit_order(engine, order)

@spec submit_order(t(), Trading.Order.t()) ::
  {:ok, t(), [trade()]} | {:error, String.t()}

Submits an order to the matching engine.