簡體   English   中英

Node.js、bitfinex-api-node:如何正確設置以處理來自 websocket-connection 的數據

[英]Node.js, bitfinex-api-node: How-to set-up correctly to process data from the websocket-connection

請為這個問題的不准確標題道歉,我不是一個有經驗的程序員,在 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 上詢問兩個價格,所以當你得到兩個價格時,調用這個函數來計算你的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM