Backtrader教程:數據饋送

  |  

backtrader 附帶一組 Data Feed 解析器(在編寫所有基於CSV時),可讓您從不同的來源載入數據。

  • 雅虎(在線或已儲存到檔)

  • 視覺圖表(見 www.visualchart.com

  • Backtrader CSV(用於測試的自有熟格式)

  • 通用 CSV 支援

從快速入門指南中可以清楚地看出,您向實例添加了data feedsCerebrodata 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 (預設值:時間範圍。天)

    潛在值:TicksSeconds、、MinutesWeeksDaysMonthsYears

  • 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')

推薦閱讀

相關文章

Backtrader傭金計劃

backtrader 的誕生是出於必要。我自己的...有一種感覺,我控制著自己的回溯測試平臺,可以嘗試新的想法。但是,在這樣做並且從一開始就完全 open 採購它時,很明顯它必須有一種方法來滿足他人的需求和願望。 作為未來的交易者,我本可以選擇基於點的計算和每輪傭金的固定價格,但這將是一個錯誤。

Backtrader訂單歷史

通過發佈1.9.55.122, backtrader 現在可用於評估一組外部訂單的性能。

Backtrader教程:數據饋送

backtrader 附帶一組 Data Feed 解析器(在編寫所有基於CSV時),可讓您從不同的來源載入數據。

Backtrader數據同步

在最新版本中,次要編號已從 8 移至 9,以指示即使已考慮相容性,也可能會對行為產生一些影響。 在 1.9.0.99 版中,使用 datetime 同步多個數據的整個機制已經重新設計(適用於下一個和一次模式)。

Backtrader交叉回溯測試陷阱

在backtrader 社區中 ,傾向於重複的事情是,用戶解釋了複製在例如 TradingView 中獲得的回溯測試結果的意願,這些天非常流行,或者其他一些回溯測試平臺。

Backtrader教程:日期時間 - 管理

在 1.5.0 版之前, backtrader 使用直接的方法來進行時間管理,因為數據源計算的任何日期時間都只是按面值使用。 對於任何使用者輸入也是如此,例如可以提供給任何數據源的參數fromdate (或 sessionstart)的情況 考慮到直接控制凍結的數據源以進行回溯測試,這種方法很好。

Backtrader教程:觀察者 - 統計

在內部backtrader 運行的策略主要處理 data feeds 和 指標。 Data feeds 被添加到Cerebro 實例中,並最終成為策略輸入的一部分(解析並用作實例的屬性),而指標則由策略本身聲明和管理。

Backtrader開場作弊

“發佈”1.9.44.116 添加了對 Cheat-On-Open的支援。這似乎是那些全力以赴的人的需求功能,他們在酒吧 close 后進行了計算,但希望與 open 價格相匹配。 當開盤價跳空(上漲或下跌,取決於是否buysell有效)並且現金不足以進行全面運營時,這樣的用例就會失敗。這將強制代理拒絕該操作。

Backtrader教程:數據饋送 - 熊貓

注意 pandas 並且必須安裝其依賴項 支援Pandas Dataframes似乎受到很多人的關注,他們依賴於已經可用的解析代碼來分析不同的數據源(包括CSV)和Pandas提供的其他功能。 數據饋送的重要聲明。 注意 這些只是 聲明。不要盲目複製此代碼。

Backtrader動量策略

在另一篇偉大的文章中,泰迪·科克(Teddy Koker)再次展示了演算法交易策略的發展之路: 研究優先應用 pandas 回溯測試,然後使用 backtrader 榮譽!!! 該帖子可以在以下位置找到: 泰迪·科克(Teddy Koker)給我留言,問我是否可以評論 backtrader的用法。