我正试图使用backtrader和python构建用于回溯测试加密策略的代码,但每次尝试连接数据源时都会出现错误,我尝试了不同的数据源方法,并尝试了许多其他连接方法,但每次都会出现一些或其他类型的错误,似乎都不起作用。请帮忙!
提到了我试图在代码中使用的两种方法。
代码:
import backtrader as bt
import os
import sys
import datetime
cerebro = bt.Cerebro()
#Method 1: YahooFinanceCSVData
modpath = os.path.dirname(os.path.abspath(sys.argv[0]))
datapath = os.path.join(modpath, 'C:/Users/admin/xx/xx2/xx.csv')
data = bt.feeds.YahooFinanceCSVData(dataname=datapath, reverse=False)
#Method 2: GenericCSVData
data = bt.feeds.GenericCSVData (dataname='filename.csv', dtformat=1)
cerebro.adddata(data)
cerebro.run()
cerebro.plot()
<end>
数据文件的第一个字符串:162380964000040124.020000040129.7000000040100.0000000040107.65000000,1253749701623809699999502950.08549781339,4.7257840018573.50347000,0
#错误#方法1#ValueError月份必须在1..12中#方法2#OSError[Erno 22]无效参数
文档显示:
dtformat:用于解析日期时间CSV字段的格式。有关格式,请参阅python strptime/strftime文档。
如果指定了一个数值,它将被解释为以下
1:该值是一个Unix时间戳,类型为int,表示自1970年1月1日以来的秒数
2:该值是浮点类型的Unix时间戳
如果你试图直接转换你的日期时间,你会得到:
from datetime import datetime
ts = 1623809640000
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-2bb3006fc757> in <module>
4 # if you encounter a "year is out of range" error the timestamp
5 # may be in milliseconds, try `ts /= 1000` in that case
----> 6 print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
ValueError: year 53426 is out of range
这是因为您的日期时间以毫秒为单位。除以1000修正为秒,得到:
from datetime import datetime
ts = 1623809640000 / 1000
print(datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S'))
结果:
"2021-06-16 02:14:00"
我相信这可能是你问题的根源。