0.5.0 • Published 4 years ago
@wangshijun/exchange-engine v0.5.0
@wangshijun/exchange-engine
Exchange engine written in node.js
Why
// TODO
Installation
npm install --save @wangshijun/exchange-engine
Usage
const ExchangeEngine = require('@wangshijun/exchange-engine');
const OrderBook = require('@wangshijun/order-book');
const OrderStorage = require('@wangshijun/order-storage-mongo');
const { Queue, Worker, Events } = require('@wangshijun/order-queue-redis');
const MatchEngine = require('@wangshijun/order-matcher-limit');
const { Order, Trade } = require('@wangshijun/order-matcher');
// OrderQueue => stores data that are persisted before adding to order book
// OrderStorage => stores data that are persisted after adding to order book
const tradingPair = 'XIN/FXIN';
const orderBook = new OrderBook();
const orderStorage = new OrderStorage();
const matchEngine = new MatchEngine(orderBook);
const exchangeEngine = new ExchangeEngine({
tradingPair,
orderBook,
orderStorage,
orderQueue,
matchEngine,
});
// Events emitted from the exchange engine
exchangeEngine.on('order.create', () => {});
exchangeEngine.on('order.cancel', () => {});
exchangeEngine.on('order.match', () => {});
// TODO: recover from order storage when start
exchangeEngine.start();
// This is what happens when exchange starts
// @link https://www.npmjs.com/package/bullmq
const orderQueue = new Queue(tradingPair, { connection: 'mongo://localhost:27017/test' });
const orderWorker = new Worker(tradingPair, { connection: 'mongo://localhost:27017/test' }, async job => {
if (job.name === 'order.create') {
const trades = matchEngine.processOrder(Order.fromJson(job.data));
exchangeEngine.emit('order.match', trades);
}
// TODO: match engine does not support this yet
if (job.name === 'order.cancel') {
matchEngine.cancelOrder(Order.fromJson(job.data));
exchangeEngine.emit('order.cancel', job.data);
}
});
exchangeEngine.createOrder(order); // orderQueue.add('order.create', order);
exchangeEngine.cancelOrder(orderId); // orderQueue.add('order.cancel', orderId);
Related
// TODO
License
MIT © wangshijun