bot18
Version:
A high-frequency cryptocurrency trading bot by Zenbot creator @carlos8f
60 lines (52 loc) • 2.33 kB
JavaScript
const updateCachedOrders = function (openOrders, symbol) {
}
const updateOrders = function (oldOrders, newOrders, closeOpenOrders = false) {
for (let i = 0; i < newOrders.length; i++) {
let newOrder = newOrders[i];
}
// update local cache with open orders
for (let j = 0; j < openOrders.length; j++) {
const id = openOrders[j]['id'];
this.orders[id] = openOrders[j];
}
let openOrdersIndexedById = this.indexBy (openOrders, 'id');
let cachedOrderIds = Object.keys (this.orders);
let result = [];
for (let k = 0; k < cachedOrderIds.length; k++) {
// match each cached order to an order in the open orders array
// possible reasons why a cached order may be missing in the open orders array:
// - order was closed or canceled -> update cache
// - symbol mismatch (e.g. cached BTC/USDT, fetched ETH/USDT) -> skip
let id = cachedOrderIds[k];
let order = this.orders[id];
result.push (order);
if (!(id in openOrdersIndexedById)) {
// cached order is not in open orders array
// if we fetched orders by symbol and it doesn't match the cached order -> won't update the cached order
if (typeof symbol !== 'undefined' && symbol !== order['symbol'])
continue;
// order is cached but not present in the list of open orders -> mark the cached order as closed
if (order['status'] === 'open') {
order = this.extend (order, {
'status': 'closed', // likewise it might have been canceled externally (unnoticed by "us")
'cost': undefined,
'filled': order['amount'],
'remaining': 0.0,
});
if (typeof order['cost'] === 'undefined') {
if (typeof order['filled'] !== 'undefined')
order['cost'] = order['filled'] * order['price'];
}
this.orders[id] = order;
}
}
}
return result;
console.log (this.id, orders, openOrders, closedOrders, canceledOrders)
process.exit ()
}
// -----------------------------------------------------------------------------
module.exports = {
updateOrders,
}
;