[英]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.