Streaming and reconstructing a Limit Order Book from order event gegevens
Streaming and reconstructing Bitstamp’s order book from order event gegevens
Fri Jul 04 04:16:21 UTC 2014
Te order to start looking into market microstructure I implemented a Limit Order Book. The (very rough) implementation has Two modes of operation:
1) It continuously reads from a stream of buy/sell order events (fresh order, modify order, cancel order) to produce a diabolical ascii chart of order book depth along with time and sales. (shown ter the below .toxine)
Two) It can re-construct an order book from archived order book events. Ter both cases, a loom verkeersopstopping is kept from which 225 indicators can be extracted into a csv opstopping. The intention of this project wasgoed simply to derive this .csv opstopping for use elsewhere, hence the mess. I intend it to be a commencing point for something better.
I do not have access to order gegevens for a conventional exchange, so this implementation is based on gegevens obtained from Bitcoin exchanges. Specifically streaming gegevens via a websocket from Bitstamp. Fresh (planned) implementation will abstract this away to a higher level protocol.
Divided into Two sections, the left palm side of the book shows the depth of BUY limit orders (bids), while the right forearm side shows the depth of SELL (asks) limit orders. At the top of bid side of the book on the left is the current best bid, while the top of the ask side of the book is the current best ask. Each row is a price level, decreasing/enhancing for the bid/ask side respectively.
Each level consists of Five columns: The percentage difference from the best bid/ask (the depth), the cumulative sum of volume/liquidity up until and including the price level, the number of orders enqueued at this price level, the amount of volume/liquidity available at this individual price level, and eventually, the actual price of this this level.
For example, on the bid side, an entry of: 0.42%, 157.40063272, 1, 59.68000000, 656.26, indicates that this price level is 0.42% less than the current best bid, 157.Four units of volume would need to be sold before this level is reached, there is 1 order at this level (to buy 59.68 units) @ 656.26 dollars.
Trades are shown on the right mitt side, te the third katern. The purpose of this implementation is to reconstruct/infer trades given a stream of bid/ask limit order events.
Thesis trades are the result of this inference: displaying the trade direction (BUY = a buy market order klapper an ask limit order) (SELL = a sell market order klapper a bid limit order). The implementation can sometimes match makers to takers: A maker is an order to buy/sell placed at a price limit _in_ the order book – i.e., the trader is providing liquidity, whereas a taker is an order to buy/sell that will not be placed ter the order book (it will consume maker orders until it is packed) – the trader is said to be removing liquidity. Spil such they pay the price: the market spread + the Volume Weighted Average Price for the market influence.
Spil mentioned, the code is _very_ rough. However for anyone interested (it is useful for monitoring the bitstamp order book te real time), the code + a detailed description of the derived indicators is available here.