指数移动平均线与 Binance 不匹配

问题描述

在我的一生中,我无法弄清楚为什么我对 20EMA 之类的 4 小时间隔的计算与我在 Binance 中看到的值不符。

对于上下文,我使用 Gate.io API,因为它目前是免费的,似乎没有速率限制,并且让我可以访问我在任何地方看到的最多的 cyrpto 对。如前所述,我正在尝试根据 Binance 的图表对此进行理智检查,并且似乎无法对我出错的地方做出正面或反面。我已经推出了我自己的 EMA 解决方案(不包括在内),并且在下面的版本中我尝试了一个节点模块 exponential-moving-average。我也没有运气。 FWIW,我对要使用的蜡烛数量的案例陈述方法并不优雅,但只是试图在重构之前获得一个工作版本。

可以根据需要澄清任何事情。干杯。

const numberOfCandles = (interval,days) => {
    let candles = null

    switch(interval) {
        case '1m':
            candles = 1440 * days
            break
        case '5m':
            candles = 288 * days
            break
        case '15m':
            candles = 96 * days
            break
        case '30m':
            candles = 48 * days
            break
        case '1h':
            candles = 24 * days
            break
        case '2h':
            candles = 12 * days
            break
        case '4h':
            candles = 6 * days
            break
        case '12h':
            candles = 2 * days
            break
        case '1d':
            candles = days
            break
        case '1w':
            candles = days / 7
            break
        default:
            break
    }

    return candles
}
const pickupSticks = async (currencyPair,days,interval,limit = 1000) => {
    let Now = +new Date
    const fromTemp = new Date(Now)
    fromTemp.setDate(fromTemp.getDate() - (3*days))
    let from = fromTemp.getTime()
    Now = Math.trunc(Now/1000)
    from = Math.trunc(from/1000)
    const to = Now

    const opts = {
        limit,// number | Maximum recent data points returned. `limit` is conflicted with `from` and `to`. If either `from` or `to` is specified,request will be rejected.
        from,// number | Start time of candlesticks,formatted in Unix timestamp in seconds. Default to`to - 100 * interval` if not specified
        to,// number | End time of candlesticks,formatted in Unix timestamp in seconds. Default to current time
        interval // '10s' | '1m' | '5m' | '15m' | '30m' | '1h' | '4h' | '8h' | '1d' | '7d' | Interval time between data points
    }

    return await api.listCandlesticks(currencyPair,opts)
        .then(value => {
                const candleSticks = value.body // resp: array of arrays like [ timestamp,?,close,candle_high,candle_low,open ]
                
                candleSticks.pop() // ignore the current open candle (no close yet)
                const closingPrices = candleSticks.map(stick => {
                    return stick[2] // closing price
                })

                const candlesCount = numberOfCandles(interval,days)
                const emas = emaLib(closingPrices,candlesCount)

                return emas[emas.length - 1]
            },error => console.error(error));
}

(async () => {
    const ema20interval4h = await pickupSticks("BTC_USDT",20,'4h')
    console.log('ema20interval4h',ema20interval4h)
})()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)