Skip to content

Instantly share code, notes, and snippets.

@JacobPlaster
Last active March 24, 2020 15:20
Show Gist options
  • Save JacobPlaster/25abd66b89d953f59551e288b37b0ebe to your computer and use it in GitHub Desktop.
Save JacobPlaster/25abd66b89d953f59551e288b37b0ebe to your computer and use it in GitHub Desktop.
Tests the delay between opening and reading an order via the Bitfinex REST api
'use strict'
/**
* DISCLAIMER: this script creates an order (price: 500, symbol: BTCUSD, amount: 0.001)
* please run at your own risk.
* TO RUN:
* $ export API_KEY={YOUR_API_KEY}
* $ export API_SECRET={YOUR_API_SECRET}
* $ npm install bitfinex-api-node
* $ node rest_open_cancel_order.js
*/
process.env.DEBUG = 'bfx:examples:*'
const { Order } = require('bfx-api-node-models')
const bfx = require('bitfinex-api-node')
const { API_KEY, API_SECRET } = process.env
const rest = new bfx.RESTv2({
apiKey: API_KEY,
apiSecret: API_SECRET,
transform: true
})
const log = (msg) => console.log(`[${Date.now()}] ${msg}`)
const sleep = async (ms) => new Promise(resolve => setTimeout(resolve, ms))
async function start() {
// Submit new order
log(`Submitting initial order`)
const orderCid = Date.now()
const o = new Order({
cid: orderCid,
symbol: 'tBTCUSD',
price: 500,
amount: 0.01,
type: Order.type.LIMIT,
}, rest)
let timeBeforeOrder = Date.now()
await o.submit()
log(`Order submit took ${Date.now() - timeBeforeOrder}ms`)
// Poll for new order
// Here we are going to poll the /orders endpoint to see if there is
// a delay between creating and reading the order - if so, how long?
let orderSeen = false
let numberOfPolls = 0
let roundTripTime = 0
do {
let activeOrders = []
let timeBeforeActiveOrders = Date.now()
try {
log('Querying for active orders...')
activeOrders = await rest.activeOrders()
log(`Done - active orders request took ${Date.now() - timeBeforeActiveOrders}ms`)
} catch (e) {
log(`ERROR: ${e} - took ${Date.now() - timeBeforeActiveOrders}ms`)
} finally {
numberOfPolls++
}
activeOrders.forEach((order) => {
if (order.cid == orderCid) {
roundTripTime = Date.now() - timeBeforeOrder
log(`Order with cid ${orderCid} found - complete trip took ${roundTripTime}ms`)
orderSeen = true
}
})
if (!orderSeen) {
log(`Order with cid ${orderCid} not found - trying again`)
await sleep(100) // wait 100ms
}
} while (!orderSeen)
// clean up original order
await o.cancel()
console.log()
log('----- FINISHED')
if (numberOfPolls > 1) {
log(`Test failed: number of polls ${numberOfPolls}, took ${Date.now() - timeBeforeOrder}ms`)
} else {
log(`Test passed: number of polls ${numberOfPolls}, took ${Date.now() - timeBeforeOrder}ms`)
}
}
start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment