UNPKG

nodejs-order-book

Version:

Node.js Lmit Order Book for high-frequency trading (HFT).

73 lines (72 loc) 2.66 kB
/* node:coverage ignore next - Don't know why first and last line of each file count as uncovered */ import Denque from "denque"; var OrderQueue = /** @class */ (function () { function OrderQueue(price) { var _this = this; this._ordersMap = {}; // returns the number of orders in queue this.len = function () { return _this._orders.length; }; this.toArray = function () { return _this._orders.toArray(); }; // returns price level of the queue this.price = function () { return _this._price; }; // returns price level of the queue this.volume = function () { return _this._volume; }; // returns top order in queue this.head = function () { return _this._orders.peekFront(); }; // returns bottom order in queue this.tail = function () { return _this._orders.peekBack(); }; // adds order to tail of the queue this.append = function (order) { _this._volume += order.size; _this._orders.push(order); _this._ordersMap[order.id] = _this._orders.length - 1; return order; }; // sets up new order to list value this.update = function (oldOrder, newOrder) { _this._volume -= oldOrder.size; _this._volume += newOrder.size; // Remove old order from head _this._orders.shift(); delete _this._ordersMap[oldOrder.id]; // Add new order to head _this._orders.unshift(newOrder); _this._ordersMap[newOrder.id] = 0; }; // removes order from the queue this.remove = function (order) { _this._volume -= order.size; var deletedOrderIndex = _this._ordersMap[order.id]; _this._orders.removeOne(deletedOrderIndex); delete _this._ordersMap[order.id]; // Update all orders indexes where index is greater than the deleted one for (var orderId in _this._ordersMap) { if (_this._ordersMap[orderId] > deletedOrderIndex) { _this._ordersMap[orderId] -= 1; } } }; this.updateOrderSize = function (order, size) { _this._volume += size - order.size; // update volume order.size = size; order.time = Date.now(); }; this._price = price; this._volume = 0; this._orders = new Denque(); } return OrderQueue; }()); export { OrderQueue };