Backtrader 教程:數據饋送 - 開發 - CSV

  |  

backtrader已經提供了通用 CSV數據提要和一些特定的 CSV數據提要。總結:

  • 通用CSV數據

  • 可視化圖表CSV數據

  • YahooFinanceData(用於在線下載)

  • YahooFinanceCSVData(用於已下載的數據)

  • BacktraderCSVData(內部......用於測試目的,但可以使用)

但即便如此,最終用戶可能希望開發對特定 CSV Data Feed的支持。

通常的座右銘是:“說起來容易做起來難”。實際上,該結構旨在使其變得容易。

腳步:

  • backtrader .CSVDataBase繼承

  • 如果需要,定義任何params

  • start方法中進行任何初始化

  • stop方法中進行任何清理

  • 定義實際工作發生的_loadline方法

    此方法接收一個參數:linetokens。

    顧名思義,這包含根據separator參數拆分當前之後的標記(繼承自基類)

    如果完成工作後有新數據……填寫相應的並返回True

    如果沒有可用的東西,因此解析已經結束:返回False

    如果正在讀取文件的幕後代碼發現沒有更多可以解析,則甚至可能不需要返回False

已經考慮到的事情:

  • 打開文件(或接收類似文件的對象)

  • 如果指示存在,則跳過標題行

  • 標記線條

  • 預加載支持(將整個數據饋送一次加載到內存中)

通常一個例子抵得上一千個需求描述。讓我們使用來自BacktraderCSVData的內部定義的 CSV 解析代碼的簡化版本。這個不需要初始化或清理(例如,這可能是打開一個套接字並稍後關閉它)。

筆記

backtrader數據提要包含通常的行業標準提要,這些提要是要填寫的。即:

  • 約會時間

  • 打開

  • 高的

  • 低的

  • 體積

  • 未平倉合約

如果您的策略/算法或簡單的數據閱讀只需要,例如收盤價,您可以保持其他不變(每次迭代都會在最終用戶代碼有機會做任何事情之前自動用 float('NaN') 值填充它們。

在此示例中,僅支持每日格式:

import itertools
...
import backtrader as bt

class MyCSVData(bt.CSVDataBase):

    def start(self):
        # Nothing to do for this data feed type
        pass

    def stop(self):
        # Nothing to do for this data feed type
        pass

    def _loadline(self, linetokens):
        i = itertools.count(0)

        dttxt = linetokens[next(i)]
        # Format is YYYY-MM-DD
        y = int(dttxt[0:4])
        m = int(dttxt[5:7])
        d = int(dttxt[8:10])

        dt = datetime.datetime(y, m, d)
        dtnum = date2num(dt)

        self.lines.datetime[0] = dtnum
        self.lines.open[0] = float(linetokens[next(i)])
        self.lines.high[0] = float(linetokens[next(i)])
        self.lines.low[0] = float(linetokens[next(i)])
        self.lines.close[0] = float(linetokens[next(i)])
        self.lines.volume[0] = float(linetokens[next(i)])
        self.lines.openinterest[0] = float(linetokens[next(i)])

        return True

該代碼期望所有字段都到位並且可以轉換為浮點數,除了具有固定 YYYY-MM-DD 格式並且可以在不使用datetime.datetime.strptime的情況下進行解析的日期時間。

通過添加幾代碼來解決空值、日期格式解析,可以滿足更複雜的需求。 GenericCSVData就是這樣做的。

買者自負

使用GenericCSVData現有的提要和繼承可以完成很多以支持格式。

讓我們添加對Sierra Chart每日格式(始終以 CSV 格式存儲)的支持。

定義(通過查看“.dly”數據文件之一:

  • 字段:日期、開盤價最高價、最低價收盤價、成交量開盤價

    行業標準和已由GenericCSVData以相同順序支持的那些(這也是行業標準)

  • 分隔符:,

  • 日期格式:YYYY/MM/DD

這些文件的解析器:

class SierraChartCSVData(backtrader.feeds.GenericCSVData):

    params = (('dtformat', '%Y/%m/%d'),)

params定義只是重新定義了基類中的現有參數之一。在這種情況下,只需更改日期的格式字符串。

等等…… Sierra Chart的解析器完成了。

下面是GenericCSVData的參數定義作為提醒:

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),
    )

推薦閱讀

相關文章

Backtrader期貨展期

並非每個供應商都為可以交易的工具提供連續的未來。有時提供的數據是仍然有效的到期日期的數據,即:仍在交易的日期 這在回溯測試方面並不是很有幫助,因為數據分散在幾個不同的儀器上,這些儀器另外...時間重疊。 能夠正確地將這些儀器的數據從過去連接到連續的流中,可以減輕疼痛。

Backtrader教程:分析儀

無論是回溯測試還是交易,能夠分析交易系統的性能是瞭解是否不僅獲得了利潤,而且是否在風險太大的情況下實現了利潤,或者與參考資產(或無風險資產)相比,是否真的值得付出努力的關鍵。 這就是物件家族的用武之Analyzer 地:提供對所發生事件甚至實際發生的事情的分析。

Backtrader教程:操作平臺

Line 反覆運算器 為了參與操作,plaftorm使用 line 反覆運算器的概念。它們已經鬆散地模仿了Python的反覆運算器,但實際上與它們無關。 策略和指標是 line 反覆運算器。

Backtrader教程:數據饋送 - 展期交割

並非每個供應商都為可以交易的工具提供連續的未來。有時提供的數據是仍然有效的到期日期的數據,即:仍在交易的日期 這在回溯測試方面並不是很有幫助,因為數據分散在幾個不同的儀器上,這些儀器另外...時間重疊。 能夠正確地將這些儀器的數據從過去連接到連續的流中,可以減輕疼痛。

Backtrader數據多時間幀

有時投資決策是使用不同的時間框架做出的: 每周評估趨勢 每天執行條目 或者5分鐘對60分鐘。 這意味著需要將多個時間幀的數據組合在 backtrader 中以支援此類組合。 對它的本機支持已經內置。

Backtrader節省記憶體

1.3.1.92版本已經重新設計並完全實現了以前到位的記憶體節省方案,儘管沒有太多的吹捧和使用。

Backtrader教程:日期時間 - 管理

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

Backtrader買入/賣出箭頭

backtrader 旨在嘗試提供易用性。創建指標和其他常見嫌疑人應該很容易。 當然,定製現有項目也應該是交易的一部分。 社區中的一個主題,BuySell Arrows,它起源於從問題遷移而來的,就是一個很好的例子。

Backtrader信號策略

操作 backtrader 也是可能的,而無需編寫策略。雖然這是首選方式,但由於構成機器的對象層次結構,使用信號也是可能的。

Backtrader動量策略

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