我正在尝试从网络套接字点提取和比较多个蜡烛值
我的目标是: 考虑最后 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) 逗号视为唯一数据,但我无法让它工作