javascript - 通过 API 在 NodeJS 中计算平均值

标签 javascript node.js average

我有一个脚本正在从 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/

相关文章:

javascript - PushNotificationIOS.presentLocalNotification() 在 native react 中不起作用

c - 我的最低限度部分没有显示真正的最低限度

mysql - 使用 MYSql 计算总和和平均百分比

javascript - 为什么不通过 Bower 链接调用 sortBy 安装 lodash?

javascript - Div 在 Chrome 和 Safari 中不显示,但在 Firefox 中显示

javascript - GroupBy CSV 文件中的数组元素并有助于减少代码

javascript - promise 执行错误nodejs javascript

javascript - Express 没有方法 createServer()

Python/Pandas 计算日期时间列的平均时间(小时)

javascript - jquery 和 node.js 使用相同的代码库