一個問題導致了GenericCSVData的實現,它可用於解析不同的 CSV 格式。
GitHub 中的問題,問題 #6清楚地表明需要有一些東西可以實際處理任何傳入的 CSV數據饋送。
醬汁在參數聲明中:
class GenericCSVData(feed.CSVDataBase):
params = (
('nullvalue', float('NaN')),
('dtformat', '%Y-%m-%d %H:%M:%S'),
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', -1),
('open', 1),
('high', 2),
('low', 3),
('close', 4),
('volume', 5),
('openinterest', 6),
)
因為該類繼承自 CSVDataBase,所以可以使用一些標準參數:
fromdate(採用 datetime 對象來限制開始日期)todate(採用 datetime 對象)來限制結束日期)headers(默認值: True ,表示 CSV 數據是否有標題行)separator(默認:“,”,分隔字段的字符)dataname(具有 CSV 數據或類似文件對象的文件的名稱)
除非您計劃執行重採樣,否則一些其他參數(例如name 、 compression和timeframe )只是提供信息。
當然更重要的是新定義的參數的含義:
包含
datetime(或日期時間)字段的日期時間(默認值:0)列time(默認值:-1)列,如果與日期時間字段分開,則包含時間字段(-1 表示它不存在)open(默認:1),high(默認:2),low(默認:3),close(默認:4),volume(默認:5),openinterest(默認:6)包含相應字段的列的索引
如果傳遞負值(例如:-1),則表示該字段不存在於 CSV 數據中
nullvalue值(默認值:float('NaN'))如果缺少應該存在的值將使用的值(CSV 字段為空)
dtformat(默認值:%Y-%m-%d %H:%M:%S)用於解析日期時間 CSV 字段的格式
tmformat(默認值:%H:%M:%S)如果“存在”,則用於解析時間 CSV 字段的格式(“時間”CSV 字段的默認值不存在)
這可能足以涵蓋許多不同的 CSV 格式和缺少值。
涵蓋以下要求的示例用法:
將輸入限制在 2000 年
HLOC 順序而不是 OHLC
缺失值替換為零 (0.0)
提供每日條形圖,日期時間只是日期,格式為 YYYY-MM-DD
不存在未
openinterest欄
編碼:
import datetime
import backtrader as bt
import backtrader.feeds as btfeed
...
...
data = btfeed.GenericCSVData(
dataname='mydata.csv',
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2000, 12, 31),
nullvalue=0.0,
dtformat=('%Y-%m-%d'),
datetime=0,
high=1,
low=2,
open=3,
close=4,
volume=5,
openinterest=-1
)
稍作修改的要求:
將輸入限制在 2000 年
HLOC 順序而不是 OHLC
缺失值替換為零 (0.0)
提供日內柱,帶有單獨的日期和時間列
- 日期格式為 YYYY-MM-DD
- 時間格式為 HH.MM.SS
不存在未
openinterest欄
編碼:
import datetime
import backtrader as bt
import backtrader.feeds as btfeed
...
...
data = btfeed.GenericCSVData(
dataname='mydata.csv',
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2000, 12, 31),
nullvalue=0.0,
dtformat=('%Y-%m-%d'),
tmformat=('%H.%M.%S'),
datetime=0,
time=1,
high=2,
low=3,
open=4,
close=5,
volume=6,
openinterest=-1
)