backtrader
附帶一組 Data Feed 解析器(在編寫所有基於CSV時),可讓您從不同的來源載入數據。
-
雅虎(在線或已儲存到檔)
-
視覺圖表(見 www.visualchart.com
-
Backtrader CSV(用於測試的自有熟格式)
-
通用 CSV 支援
從快速入門指南中可以清楚地看出,您向實例添加了data feedsCerebro
。data feeds稍後將可用於以下各項中的不同策略:
-
陣列 self.datas(插入順序)
-
陣列物件的別名:
-
self.data 和 self.data0 指向第一個元素
-
self.dataX 指向陣列中索引為 X 的元素
-
關於插入工作原理的快速提醒:
import backtrader as bt import backtrader.feeds as btfeeds data = btfeeds.YahooFinanceCSVData(dataname='wheremydatacsvis.csv') cerebro = bt.Cerebro() cerebro.adddata(data) # a 'name' parameter can be passed for plotting purposes
Data Feeds 常用參數
這個 data feed 可以直接從雅虎下載數據並輸入到系統中。
參數:
-
dataname
(預設值:無)必須提供含義因 data feed 類型(檔位置,股票代碼等)而異
-
name
(預設值:“”)用於繪圖中的裝飾目的。如果未指定,則可能派生自
dataname
(例如: last 檔案路徑的一部分) -
fromdate
(預設值:mindate)Python datetime 物件,指示在此之前的任何日期時間都應被忽略
-
todate
(預設值:最大日期)Python 日期時間物件,指示應忽略此日期後面的任何日期時間
-
timeframe
(預設值:時間範圍。天)潛在值:
Ticks
、Seconds
、、Minutes
、Weeks
Days
和Months
Years
-
compression
(預設值:1)每根柱的實際柱數。資訊。僅在數據重採樣/重放中有效。
-
sessionstart
(預設值:無)指示數據的會話開始時間。可由類用於重採樣等目的
-
sessionend
(預設值:無)指示數據的會話結束時間。可由類用於重採樣等目的
CSV Data Feeds 常用參數
參數(除常用參數外):
-
headers
(預設值: True)指示傳遞的數據是否具有初始標題行
-
separator
(預設值:“,”)要考慮的分隔符以標記每個 CSV 行
GenericCSVData
此類公開了一個通用介面,允許解析幾乎所有的 CSV 檔案格式。
根據參數定義的順序和字段狀態解析 CSV 檔
具體參數(或具體含義):
-
dataname
要解析的檔名或類似文件的物件
-
datetime
(預設值:0)包含日期(或日期時間)欄位的列 -
time
(預設值:-1) 包含時間欄位的列(如果與日期時間欄位分開)(-1 表示它不存在) -
open
(預設值:1)、high
(預設值:2)、low
(預設值:3)、close
(預設值:4)、volume
(預設值:5)、openinterest
(預設值:6)包含相應欄位的列的索引
如果傳遞負值(例如:-1),則表示 CSV 數據中不存在該欄位
-
nullvalue
(預設值:浮點('NaN'))如果缺少應存在的值(CSV 字段為空),將使用的值
-
dtformat
(預設值:%Y-%m-%d %H:%M:%S)用於分析日期時間 CSV 欄位的格式
-
tmformat
(預設值: %H:%M:%S)如果「存在」,則用於解析時間 CSV 欄位的格式(“時間”CSV 欄位的預設值不存在)
涵蓋以下要求的範例用法:
-
將投入限制在2000年
-
HLOC 順序而不是 OHLC
-
要取代為零的缺失值 (0.0)
-
提供每日條形圖,日期時間只是格式為YYYY-MM-DD的日期
-
不存在
openinterest
列
代碼:
import datetime import backtrader as bt import backtrader.feeds as btfeeds ... ... data = btfeeds.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(而不是通常的HH:MM:SS)
-
不存在
openinterest
列
代碼:
import datetime import backtrader as bt import backtrader.feeds as btfeed ... ... data = btfeeds.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 )
這也可以通過子類化成為永久性的:
import datetime import backtrader.feeds as btfeed class MyHLOC(btfreeds.GenericCSVData): params = ( ('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) )
現在,只需提供以下命令dataname
即可重用此新類:
data = btfeeds.MyHLOC(dataname='mydata.csv')