这个错误通常是因为数据源返回的时间戳是'numpy.int64'类型,而backtrader无法处理此类型数据。将 numpy.int64 转换成 datetime 类型即可解决这个问题。例如:
from datetime import datetime
class MyCSVData(DataBase):
params = (
('name', None),
('datetime', 0),
('open', 1),
('high', 2),
('low', 3),
('close', 4),
('volume', 5),
('openinterest', -1),
('dtformat', '%Y-%m-%d %H:%M:%S'),
# 如果需要,在这里增加其他参数
)
def start(self):
# 按照指定格式解析时间戳
fmt = self.p.dtformat
self.rdt = lambda x: datetime.strptime(x.decode('utf-8'), fmt)
def _loadline(self, linetokens):
# 将时间戳转换成 datetime 类型
dt = self.rdt(linetokens[self.p.datetime])
# 组装并返回数据
return bt.LabeledData(
datetime=dt,
open=float(linetokens[self.p.open]),
high=float(linetokens[self.p.high]),
low=float(linetokens[self.p.low]),
close=float(linetokens[self.p.close]),
volume=float(linetokens[self.p.volume]),
openinterest=float(linetokens[self.p.openinterest])
)
这个示例代码展示了如何在 backtrader 中从 CSV 文件中读取数据,并将时间戳从字符串转换成 datetime 类型,以避免该错误的出现。