Backtrader通用 CSV 數據饋送

  |  

一個問題導致了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 數據或類似文件對象的文件的名稱)

除非您計劃執行重採樣,否則一些其他參數(例如namecompressiontimeframe )只是提供信息。

當然更重要的是新定義的參數的含義:

  • 包含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
)

推薦閱讀

相關文章

Backtrader追踪訂單

版本1.9.35.116將StopTrail和StopTrailLimit訂單執行類型添加到回測庫中。筆記這僅在回測中實現,還沒有針對實時經紀人的實現筆記更新為1.9.36.116版本。盈透證券支持StopTrail 、 StopTrailLimit和OCO 。

Backtrader數據重採樣

當數據僅在一個時間範圍內可用並且必須在不同的時間範圍內進行分析時,是時候進行一些重新採樣了。 “重新採樣”實際上應該稱為“上採樣”,因為從源時間範圍到更大的時間範圍(例如:幾天到幾週) “下採樣”尚不可能。 backtrader通過將原始數據傳遞給智能命名為DataResampler的過濾器對象,內置了對重採樣的支持。

Backtrader 教程:佣金計劃 - 自定義計劃

將 CommInfo 對象改造成實際涉及的最重要的部分:保留原來的CommissionInfo類和行為為輕鬆創建用戶定義的佣金打開大門使格式 xx% 成為新佣金方案的默認值,而不是 0.

Backtrader回溯

在一些關於改進的ShapeRatio的提示之後, backtrader 已將此分析儀添加到其武器庫中。 文獻位於: 從對數回報的好處開始,並遵循在SharpeRatio方程的分母中具有標準偏差的副作用,本文檔開發了該分析儀的公式和期望。

Backtrader條形同步

文獻和/或行業中缺乏標準公式不是問題,因為問題實際上可以總結為: 條形同步 工單 #23 提出了一些問題,即是否可以 backtrader 考慮計算 相對體積 指標。 請求者需要將給定時刻的 volume 與前一個交易日的相同時刻進行比較。

Backtraderta-lib 集成

即使 backtrader 提供了已經 high 數量的內置指標,並且開發指標主要是定義輸入,輸出和以自然的方式編寫公式的問題,有些人也希望使用TA-LIB。

Backtrader教程:經紀商

經紀商模擬器該類比支援不同的訂單類型,根據當前現金檢查提交的訂單現金需求,跟蹤每次反覆運算的cerebro 現金和價值,並在不同數據上保持當前位置。

Backtrader多數據範例

社區中的幾個主題似乎以如何跟蹤訂單為導向,特別是當幾個data feeds在起作用時,還包括當多個訂單一起工作時,

Backtrader開場作弊

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

Backtrader 教程:數據饋送 - 開發 - 常規

筆記示例goog.fd中使用的二進製文件屬於 VisualChart,不能與backtrader一起分發。對直接使用二進製文件感興趣的人可以免費下載VisualChart 。 CSV數據饋送開發已經展示瞭如何添加新的基於 CSV 的數據饋送。