Last active
March 24, 2020 15:20
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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