问题描述
在我的一生中,我无法弄清楚为什么我对 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 (将#修改为@)