接口中ticker的成交量为
tick.volume = float(d["volume_24h"])
而 BarGenerator中合成bar中交易量的合成方法为:
volume_change = tick.volume - self.last_tick.volume
self.bar.volume += max(volume_change, 0)
这里可以看出,使用的是交易量累加的方法,在期货市场这样是很正常的。但对于24小时运行的数字货币市场却是行不通的,数字货币市场中tick的volume_24h并不是前边tick的交易量加上当前tick的交易量。volume_24h 其实是前面tick的成交量减去24h前tick的成交量加上现在tick的成交量。这里就会导致bar的成交量计算完全是不准确的。
另外:
# Filter tick data with less intraday trading volume (i.e. older timestamp)
if self.last_tick and tick.volume and tick.volume < self.last_tick.volume:
return
这里为了忽略无成交的情况,做了剔除。而对于24小时制的数字货币,这里的意义就成了当前tick的成交量一定要大于24小时前从last_tick中剔除的t成交量。这样的情况肯定很多的,导致一直return,剔除tick数据,最终导致bar的合成中ohlc的数据也不准确了。