微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决指数移动平均线与 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 举报,一经查实,本站将立刻删除。