[英]Converting a GenericCSVData object to a backtrader datafeed
如何將backtrader csv reader轉換為backtrader datafeed ? 我試過:
嘗試 1:(用 GenericCSV 替換數據饋送)
all_data=bt.feeds.GenericCSVData(
#my csv params here
)
for s, df in all_data.items(): #THIS LINE READS IN CSV AND ERRORS
#do stuff
'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' 對象沒有屬性 'items'
嘗試 2:(將 GenericCSV 轉換為 Datafeed)
all_data=bt.feeds.GenericCSVData(
#my csv params here
)
all_datafeed = bt.feeds.PandasData(dataname=all_data)
錯誤:“Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst”對象沒有屬性“列”
嘗試 3:(讀入 csv 並轉換為數據饋送)
df=pd.read_csv('/home/abc/EUR_USD.csv',header=0,parse_dates=True)
all_datafeed = bt.feeds.PandasData(dataname=df)
for df in all_datafeed.items():
print(df)
'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' 對象沒有屬性 'items'
摘自 csv:
time,oask,hask,lask,cask,obid,hbid,lbid,cbid,volume
2002-05-06 20:00:00 UTC,0.9184,0.9184,0.9181,0.9184,0.9181,0.9181,0.9181,0.9181,1
2002-05-07 20:00:00 UTC,0.9155,0.9155,0.9152,0.9155,0.9152,0.9152,0.9152,0.9152,1
2002-05-08 20:00:00 UTC,0.9045,0.9045,0.9042,0.9045,0.9042,0.9042,0.9042,0.9042,1
# Create a Data Feed
data = bt.feeds.GenericCSVData(
dataname='filepath.csv',
fromdate=datetime.datetime(2018, 1, 1),
todate=datetime.datetime(2018, 12, 31),
nullvalue=0.0,
dtformat=('%Y-%m-%d'),
datetime=0,
open = 1,
high = 2,
low = 3,
close = 4,
volume =5,
openinterest=-1,
reverse=False)
# Add the Data Feed to Cerebro
cerebro.adddata(data)
如果這就是你想要完成的,雖然我不確定。
您需要做的就是創建一個數據提要並將其傳遞給cerebro
。
我有同樣的問題,通過注意以下問題解決了:
datetime
格式為%Y.%m.%d hh:mm:ss
。 所以你應該用-
替換.
在您的示例中,使用以下內容然后保存數據框:
import pandas as pd
df = pd.read_csv("your_csv_file.csv")
df.index = df.index.map(lambda datetime: datetime.replace("-", ".")
df.to_csv("your_csv_file.csv")
GenericCSVData
的數字是列的索引(從左到右從 0 開始)| col_0 | col_1 | col_2 | col_3 | col_4 | col_5 | col_6 | col_7 |
# in my example:
| datetime | symbol | open | high | low | close | volume btc | volume usd |
所以它應該像下面這樣添加:
#...
data = bt.feeds.GenericCSVData(
dataname="./dataset/btc.csv",
dtformat=('%Y.%m.%d %H:%M:%S'),
datetime=0,
open=2,
high=3,
low=4,
close=5,
)
cerebro.adddata(data)
#...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.