繁体   English   中英

在 Websocket 内运行 function 会触发多次

[英]Running a function inside Websocket triggers many times

我一直在尝试利用 Binance Websocket 以我自己的逻辑根据实时价格触发买卖。 我知道 WebSocket 正在发回实时数据,甚至可能同时有 5-6 个或更多响应,但是如何确保在关闭 Websockets 时只收到 1 个?

我试图确保在发生这种情况时它只会触发 1 次买入或 1 次卖出。

我正在使用:(效果很好)

'node-binance-api'

Websocket 从这里开始:

binance.websockets.bookTickers('BNBBUSD', (mainTicker) => {
  var priceNow = mainTicker.bestBid;
  liveStrategy(priceNow).then(isSold => {
      // console.log('THIS IS WHEN IS CHECKED ->>>>>>');
      if (isSold == true) {
          console.log('JUST SOLD -> Setting the count to 10');
          sleep(3000).then(() => { 
              console.log("Countdown finished: ", count);
              profitCalculations(mainCurrency);
              count = 10;
          });
      }
      if (isSold == false) {
          console.log('THIS WAS A BUY ->');
          count = 10;
      }
  }).catch((isSoldErr) => {
      console.warn('Error:', isSoldErr.message);
      dumpError(isSoldErr);
  });
});

价格被送回 function,这个 function 持续运行,直到发生买入或卖出。 在触发买入或卖出之前,我使用以下命令关闭 WebSocket:

    let endpoints = binance.websockets.subscriptions();
    for ( let endpoint in endpoints ) {
        console.log("..terminating websocket: "+endpoint);
        let ws = endpoints[endpoint];
        ws.terminate();
    }

此代码停止 WebSocket,但它确实需要大约 3 秒,所以我在此之后触发买入/卖出:

if (priceNow > buyPrice) {
terminateAllWebsockets();
return new Promise((resolve) => {
    sleep(5000).then(sleep => {
        marketBuyFromNoLossStrategyAmount(buySymbol,buyAmount);
        resolve(false);
    })
})

}

当它返回时,它基本上会发送回我的liveStrategy(priceNow)以触发利润计算。 profitCalculations(mainCurrency); 可能会被触发 3-4 次,甚至是买入或卖出。 我可以做些什么来避免这种情况发生吗? 那么利润或买卖只会触发一次? 如何确保我的设置发生这种情况?

欢迎任何想法

主要问题是 WebSocket 是实时的,当同时执行 2 笔或更多交易达到算法中设定的目标时,它会触发多买或多卖。 将数据写入公共变量并使用每秒执行 function 的简单计时器读取是最佳解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM