我有一个脚本正在从 Binance API 获取数据每 30 分钟间隔一次并在终端中显示。 我想计算数组中每项 Assets 的平均值。
这是Node-Schedule package - const j = Schedule.scheduleJob('* * * * *'
小例子:var array = ["ADABTC", "AEBTC", "AIONBTC"]
我想计算 "ADABTC"
、"AEBTC"
和 "KAVABTC"
的单独平均值。
完整代码
const { MongoClient } = require('mongodb');
const schedule = require('node-schedule');
const fetch = require('node-fetch');
const symbols = ["ADABTC", "AEBTC", "AIONBTC", "ALGOBTC", "ARDRBTC", "ARKBTC", "ATOMTC"]
const getBTCData = async symbol => {
let data = await fetch(`https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=30m&limit=1`).then(res => res.json());
const btcusdtdata = data.map(d => {
return {
Volume: parseInt(d[5]),
Timespan: 30,
}
});
console.log(btcusdtdata);
};
const sleep = ms => new Promise(res => setTimeout(res, ms));
const j = schedule.scheduleJob('* * * * *', async() => {
for (let symbol of symbols) {
await getBTCData(symbol);
await sleep(4000);
}
});
目标:如果我每 30 分钟收到一次 Assets ,我如何计算这部分的平均交易量 - Volume: parseInt(d[5]),
?
最佳答案
收集平均值(和其他统计数据)的一个简单方法是创建一个由符号键控的 map 。
我们会保留每个交易品种的历史记录,然后在每次获得新数据点时计算平均值,例如交易量。
示例可能如下所示(出于演示目的,我已将调用频率更新为每 10 秒一次!)
const schedule = require('node-schedule');
const fetch = require('node-fetch');
const symbols = ["ADABTC", "AEBTC", "AIONBTC", "ALGOBTC", "ARDRBTC", "ARKBTC", ]
const symbolSummary = {};
const getBTCData = async symbol => {
let data = await fetch(`https://api.binance.com/api/v3/klines?symbol=${symbol}&interval=30m&limit=1`).then(res => res.json());
const btcusdtdata = data.map(d => {
return {
Volume: parseInt(d[5]),
Timespan: 30,
symbol
}
});
console.log(btcusdtdata);
return btcusdtdata;
};
const appendBTCDataToSummary = (btcData, summary) => {
if (!summary[btcData.symbol]) {
summary[btcData.symbol] = { history: [], symbol: btcData.symbol };
}
let symbolHistory = summary[btcData.symbol].history;
symbolHistory.push(btcData);
summary[btcData.symbol].averageVolume = symbolHistory.reduce((average, row) => {
// Calculate the average volume by scaling each volume entry by 1 / length.
return average + (row.Volume) * (1 / symbolHistory.length);
}, 0)
summary[btcData.symbol].dataPoints = symbolHistory.length;
}
const sleep = ms => new Promise(res => setTimeout(res, ms));
const j = schedule.scheduleJob('* * * * *', async() => {
for (let symbol of symbols) {
let btcData = await getBTCData(symbol);
appendBTCDataToSummary(btcData[0], symbolSummary);
// We must back off between calls as per api terms of use.
await sleep(4000);
}
console.log("Symbol summaries:", Object.values(symbolSummary).map(summary => {
return { symbol: summary.symbol, AverageVolume: summary.averageVolume, DataPoints: summary.dataPoints };
}));
});
关于javascript - 通过 API 在 NodeJS 中计算平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62892285/