这是我的代码:
data15 = bt.feeds.GenericCSVData(dataname='BTCUSDT-15m-2022-01-01.csv',
dtformat=lambda x: datetime.utcfromtimestamp(int(x)/1000))
来自 csvgeneric.py:
dt = datetime.strptime(dtfield, dtformat)
else:
dt = self._dtconvert(dtfield)
if self.p.timeframe >= TimeFrame.Days:
# check if the expected end of session is larger than parsed
if self._tzinput:
dtin = self._tzinput.localize(dt) # pytz compatible-ized
else:
dtin = dt
dtnum = date2num(dtin) # utc'ize
dteos = datetime.combine(dt.date(), self.p.sessionend)
dteosnum = self.date2num(dteos) # utc'ize
if dteosnum > dtnum:
self.lines.datetime[0] = dteosnum
我发现对于每根蜡烛,
dt, dtin and dtnum
都是正确的。 dteosnum
始终相同,并且大于 dtnum
,因此 dteosnum
是分配给下一支蜡烛的蜡烛 (self.lines.datetime[0]
)。
所以所有蜡烛都有相同的时间。
我遇到了同样的问题,发现正确定义时间范围关键字参数可以解决这个问题。例如:
时间范围=bt.TimeFrame.分钟
这是添加了关键字参数的代码:
data15 = bt.feeds.GenericCSVData(dataname='BTCUSDT-15m-2022-01-01.csv',
timeframe=bt.TimeFrame.Minutes, # Can be MicroSeconds, Seconds, Minutes, Days, Weeks, Months or Years
dtformat=lambda x: datetime.utcfromtimestamp(int(x)/1000),
)