通过 WebSocket 从 Binance 提取数据时考虑更多蜡烛

问题描述 投票:0回答:0

我正在尝试从网络套接字点提取和比较多个蜡烛值

我的目标是: 考虑最后 5 支蜡烛 第一个包含的蜡烛必须更大,并且至少 1.25% 接下来的四根蜡烛绝不能低于第一根蜡烛的低点,也不能高于第一根蜡烛的高点。目前我可以连接到所有对的网络套接字:

//subscribe each pair to the websocket
     const ws = new WebSocket('wss://stream.binance.com:9443/ws/' + PAIRS_TF5.join('/'));
     console.log(ws)
     console.log('Subscribed to ' + PAIRS_TF5.join('/'));
     ws.on('message', function incoming(data) {
         //% change of each kline
         try {
             const klineData = JSON.parse(data);
             const kline = klineData.k;
             const percentChange = (parseFloat(kline.c) - parseFloat(kline.o)) / parseFloat(kline.o) * 100;
             if (percentChange >= MIN_PERCENT_CHANGE) {
                 //console.log(`${klineData.s} had a percentage change of ${percentChange.toFixed(2)}%`);
                 // discordHook.send(`${klineData.s} had a percentage change of ${percentChange.toFixed(2)}%`);
             }
         } catch (error) {
             console.error(error);
         }
     });

但是通过下面的代码:

//function for analyzing 5 minute candles, unfortunately it doesn't work è.è
     let lastCandleTimestamps = {};

     ws.on('message', function incoming(data) {
         try {
             const klineData = JSON.parse(data);
             const kline = klineData.k;
             const percentChange = (parseFloat(kline.c) - parseFloat(kline.o)) / parseFloat(kline.o) * 100;
             if (percentChange >= 0.5) {
                 const candleTimestamp = klineData.k.t;
                 console.log(klineData.s, percentChange, candleTimestamp);
             if (lastCandleTimestamps[candleTimestamp] && lastCandleTimestamps[candleTimestamp].includes(klineData.s)) {
                 console.log(`Candle ${candleTimestamp} for ${klineData.s} already checked`);
                 return;
             }

             // Check if the first candle is green
             const firstCandleOpen = parseFloat(klineData.k.o);
             const firstCandleClose = parseFloat(klineData.k.c);
             const firstCandleColor = firstCandleOpen < firstCandleClose ? 'green' : 'red';
             console.log(firstCandleColor);

             if (firstCandleColor === 'green') {
                 let isValidPattern = true;
                 const candles = klineData.k || [];
                 if (candles.length >= NUM_CANDLES) {
                     const lastCandles = candles.slice(-NUM_CANDLES);
                     for (let i = 1; i < lastCandles.length; i++) {
                         const candle = lastCandles[i];
                         const candleOpen = parseFloat(candle[1]);
                         const candleClose = parseFloat(candle[4]);
                         if (candleOpen > firstCandleOpen || candleClose > firstCandleClose ||
                             candleOpen < firstCandleClose || candleClose < firstCandleOpen) {
                             isValidPattern = false;
                             breaks;
                         }
                     }
                     if (isValidPattern) {
                         console.log(`${klineData.s} has a valid candlestick pattern`);
                         discordHook.send(`${klineData.s} has a valid candlestick pattern`);
                     }
                 }
             }

             // Add the pair to the array for the corresponding timestamp
             if (!lastCandleTimestamps[candleTimestamp]) {
                 lastCandleTimestamps[candleTimestamp] = [klineData.s];
             } else {
                 lastCandleTimestamps[candleTimestamp].push(klineData.s);
             }
         }
     } catch (error) {
         console.error(error);
     }
 });`

我达不到设定的目标。我不知道我要做什么。

我还尝试插入一个过滤器,将时间戳 (Kline.k.t) 和一对 (Kline.k.s) 逗号视为唯一数据,但我无法让它工作

node.js websocket stream binance
© www.soinside.com 2019 - 2024. All rights reserved.