首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从时间戳转换到日期

无法从时间戳转换到日期
EN

Stack Overflow用户
提问于 2021-11-11 13:03:01
回答 1查看 179关注 0票数 0

我正在开发一个回溯策略,与反向交易者。我给大脑提供了通用的csv数据,如下所示:

代码语言:javascript
复制
1502942400000,4261.48000000,4280.56000000,4261.32000000,4261.45000000,11.30892600,1502944199999,48224.75400837,49,3.93617400,16793.03995768,7922.57993329

第一个属性是时间戳,如int所示,所以在添加数据时,我选择dtformat=1

代码语言:javascript
复制
data = bt.feeds.GenericCSVData(dataname="./file.csv", dtformat=1)
cerebro.adddata(data)

当我调用cerebro.run()时,我总是收到相同的错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Users\jorge\Desktop\cerebro\btc.py", line 8, in <module>
    cerebro.run()
  File "C:\Users\jorge\Desktop\cerebro\env\lib\site-packages\backtrader\cerebro.py", line 1127, in run
    runstrat = self.runstrategies(iterstrat)
  File "C:\Users\jorge\Desktop\cerebro\env\lib\site-packages\backtrader\cerebro.py", line 1212, in runstrategies
    data.preload()
  File "C:\Users\jorge\Desktop\cerebro\env\lib\site-packages\backtrader\feed.py", line 688, in preload
    while self.load():
  File "C:\Users\jorge\Desktop\cerebro\env\lib\site-packages\backtrader\feed.py", line 479, in load
    _loadret = self._load()
  File "C:\Users\jorge\Desktop\cerebro\env\lib\site-packages\backtrader\feed.py", line 710, in _load
    return self._loadline(linetokens)
  File "C:\Users\jorge\Desktop\cerebro\env\lib\site-packages\backtrader\feeds\csvgeneric.py", line 116, in _loadline
    dt = self._dtconvert(dtfield)
  File "C:\Users\jorge\Desktop\cerebro\env\lib\site-packages\backtrader\feeds\csvgeneric.py", line 96, in <lambda>
    self._dtconvert = lambda x: datetime.utcfromtimestamp(int(x))
OSError: [Errno 22] Invalid argument

我想不出为什么它不能被转换,也可以用dtformat=2来尝试,但是在这种情况下失败了,因为它需要一个浮动。

以下是完整的代码:

代码语言:javascript
复制
import backtrader as bt

cerebro = bt.Cerebro()
cerebro.broker.setcash(1000)
data = bt.feeds.GenericCSVData(dataname="./file.csv", dtformat=1)
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.adddata(data)
cerebro.run()
cerebro.plot()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())

我很感谢你能帮我,

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-12 20:33:56

这应该适用于你:

代码语言:javascript
复制
import datetime
data = bt.feeds.GenericCSVData(
     dtformat=lambda x: datetime.datetime.utcfromtimestamp(int(x) / 1000))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69928749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档