nodejs-order-book
Version:
Node.js Lmit Order Book for high-frequency trading (HFT).
73 lines (72 loc) • 2.66 kB
JavaScript
/* 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 };