请为这个问题道歉,我不是一个经验丰富的程序员,在node.js中更是如此
我的意图很简单:我想使用我通过npm安装的bitfinex-api-node软件包(用于bitfinex加密货币交换的node.js包装)来读取交易所各种货币对的价格数据,以计算更好的交易策略。
readme.md中提供的示例代码工作正常,这是一个精简版本,它创建一个BFX对象,该对象订阅给定货币对的股票代码并不断输出股票代码数据:
const BFX = require('bitfinex-api-node')
const API_KEY = 'secret'
const API_SECRET = 'secret'
const opts = {
version: 2,
transform: true
}
const bws = new BFX(API_KEY, API_SECRET, opts).ws
bws.on('open', () => {
bws.subscribeTicker('BTCUSD')
})
bws.on('ticker', (pair, ticker) => {
console.log('Ticker:', ticker)
})
bws.on('error', console.error)
到现在为止还挺好。现在,为了一个简单的例子,假设我想得到两个货币对(BTC / USD,ETH / USD)的当前价格,并为它们添加显示结果。我明显天真的做法是这样的:
const BFX = require('bitfinex-api-node')
const API_KEY = 'secret'
const API_SECRET = 'secret'
const opts = {
version: 2,
transform: true
}
const bws1 = new BFX(API_KEY, API_SECRET, opts).ws
const bws2 = new BFX(API_KEY, API_SECRET, opts).ws
var priceBTCUSD;
var priceETHBTC;
bws1.on('open', () => {
bws1.subscribeTicker('BTCUSD')
})
bws2.on('open', () => {
bws2.subscribeTicker('ETHUSD')
})
bws1.on('ticker', (pair, ticker) => {
//console.log('Ticker1:', ticker.LAST_PRICE)
priceBTCUSD = ticker.LAST_PRICE
})
bws2.on('ticker', (pair, ticker) => {
//console.log('Ticker2:', ticker.LAST_PRICE)
priceETHBTC = ticker.LAST_PRICE
})
bws1.on('error', console.error)
bws2.on('error', console.error)
//HERE IT COMES:
console.log(priceBTCUSD+priceETHBTC)
最后一行的结果输出是“NaN”。似乎最后一行将所需结果记录到控制台是在BFX对象建立连接并接收任何数据之前执行的。
如何正确设置?如何从接收的数据流中检索数据?我真的需要每个货币对的BFX-websocket对象吗?如何读取价格数据一次,关闭websocket连接(在读取价格一次后不需要)并重新连接以读取不同货币对的价格?
谢谢!如果我的问题不够明确,请随意申请更多数据。
亲切的问候,s
哦,你的console.log太快了。试试这个(我跳了几行):
bws1.on('ticker', (pair, ticker) => {
//console.log('Ticker1:', ticker.LAST_PRICE)
priceBTCUSD = ticker.LAST_PRICE;
printResults();
})
bws2.on('ticker', (pair, ticker) => {
//console.log('Ticker2:', ticker.LAST_PRICE)
priceETHBTC = ticker.LAST_PRICE
printResults();
})
bws1.on('error', console.error)
bws2.on('error', console.error)
//HERE IT COMES:
function printResults() {
if (priceBTCUSD && priceETHBTC)
console.log(priceBTCUSD+priceETHBTC)
}
现在,这不是最好的方法,但它可以帮助您实现目标。更好的方法是在同一个websocket上同时询问两个价格,因此当您同时获得两个价格时,请调用此函数来计算结果。