一個問題導致了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 )