Backtrader蟒蛇隱藏的力量3

  |  

Last,但並非最不重要的一點是,在這個系列中,關於如何在 backtrader 中使用Python的隱藏功能是一些神奇變數是如何出現的。

self.datas其他人從哪裡來?

通常的可疑類(或其子類)StrategyIndicator, 、 AnalyzerObserver 具有自動魔法定義的屬性,例如包含 data feeds的陣列。

Data Feeds 將添加到實例中cerebro ,如下所示:

from datetime import datetime
import backtrader as bt

cerebro = bt.Cerebro()
data = bt.YahooFinanceData(dataname=my_ticker, fromdate=datetime(2016, 1, 1))
cerebro.adddata(data)

...

當高於簡單移動平均線時,我們對示例的close 獲勝策略將持續很長時間。我們將使用信號來縮短範例:

class MyStrategy(bt.SignalStrategy):
    params = (('period', 30),)

    def __init__(self):
        mysig = self.data.close > bt.indicators.SMA(period=self.p.period)
        self.signal_add(bt.signal.SIGNAL_LONG, mysig)

它被新增到混合中:

cerebro.addstrategy(MyStrategy)

任何讀者都會注意到:

  • __init__ 不帶參數,無論是否命名

  • 沒有super 調用,因此不會直接要求基類執行其 init

  • 引用的self.data定義mysig可能與YahooFinanceData添加到cerebro

    確實如此!

實際上還有其他屬性,這些屬性在那裡,在示例中看不到。例如:

  • self.datas:包含添加到的所有 data feeds 的陣列 cerebro

  • self.dataX:其中 X 是一個數位,它反映了數據添加到 cerebro 的順序(data0 將是上面添加的數據)

  • self.data:指向 self.data0。為了方便起見,這隻是一個佇列,因為大多數示例和策略僅針對單個數據

可以在文件中找到更多內容:

如何創建這些屬性?

在本系列的第 2 篇文章中,發現類創建機制和實例創建機制被截獲。後者用於執行此操作。

  • cerebro 通過以下方式接收類 adstrategy

  • 它將在需要時實例化它,並將自身添加為屬性

  • 策略new 的類方法在創建 Strategy 實例期間被截獲,並檢查哪些 data feedscerebro

    它確實創建了上面提到的陣列和別名

此機制應用於 backtrader 生態系統中的許多其他物件,以便簡化最終使用者必須執行的操作。因此:

  • 例如,無需不斷創建包含命名datas 參數的函數原型,也無需將其分配給 self.datas

    因為它是在後台自動神奇地完成的

這種攔截的另一個例子

讓我們定義一個獲勝指標,並將其添加到獲勝策略中。我們將重新包裝 close SMA的想法:

class MyIndicator(bt.Indicator):
    params = (('period', 30),)
    lines = ('signal',)

    def __init__(self):
        self.lines.signal = self.data - bt.indicators.SMA

現在將其添加到常規策略中:

class MyStrategy(bt.Strategy):
    params = (('period', 30),)

    def __init__(self):
        self.mysig = MyIndicator(period=self.p.period)

    def next(self):
        if self.mysig:
            pass  # do something like buy ...

從上面的代碼中,顯然有一個計算正在進行MyIndicator

self.lines.signal = self.data - bt.indicators.SMA

但它似乎無處可做。如本系列的第 1 篇文章所示,該操作會生成一個物件,該物件被 self.lines.signal 分配給併發生以下情況:

  • 此物件還會截獲其創建過程

  • 它掃描堆疊以瞭解正在創建的上下文,在本例中為MyIndicators

  • 在初始化完成後,它會將自己添加到MyIndicator

  • 稍後在計算時MyIndicator ,它將依次計算由 self.lines.signal

不錯,但誰計算MyIndicator

遵循完全相同的過程:

  • MyIndicator 在創建過程中掃描堆疊並找到 MyStrategy

  • 並將自己添加到結構中MyStrategy

  • 在調用之前nextMyIndicator 被要求重新計算自身,這反過來又告訴 self.lines.signal 重新計算自己

該過程可以具有多層間接尋址。

對用戶來說最好的事情:

  • 無需像創建某些內容時那樣register_operation 添加調用

  • 無需手動觸發計算

總結

本系列中 last 文章展示了如何使用類/實例創建攔截來簡化最終使用者生活的另一個示例::

  • 從生態系統中添加需要的物件並創建別名

  • 自動註冊類和觸發計算

推薦閱讀

相關文章

Backtrader教程:指標 - 開發

如果必須開發任何東西(除了一個或多個獲勝策略之外),那麼這個東西就是一個自定義指標。 根據作者的說法,平臺內的這種開發很容易。 需要滿足以下條件: 從指標派生的類(直接或從現有的子類派生) 定義它將保持lines 指標必須至少具有 1 line。

Backtrader期貨補償與現貨補償

版本1.9.32.116 增加了對社區中呈現的有趣用例 的支援 以期貨開始交易,包括實物交割 讓一個指標告訴你一些事情 如果需要, close 現貨價格操作,有效地取消實物交割,無論是為了接收貨物還是為了必須交付貨物(並希望獲利)來頭寸。

Backtrader教程:操作平臺

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

Backtrader教程:日誌記錄 - 編寫器

將以下內容寫出到流中: csv 流,

Backtrader教程:數據饋送 - 擴展 (Extending DataFeed)

GitHub 中的問題實際上是在推動文檔部分的完成,或者説明我瞭解我是否backtrader 具有我從一開始就設想的易用性和靈活性以及在此過程中做出的決定。 在本例中為問題 #9。

Backtrader跨越數位

《backtrader》的發佈1.9.27.105糾正了一個疏忽。這是一個疏忽,因為拼圖的所有部分都已到位,但啟動並不是在所有角落都進行的。 該機制使用一個名為的屬性_mindatas,因此讓我們將其稱為: mindatas。 社區問了這個問題,答案並不是很到位。

Backtraderta-lib 集成

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

Backtrader蟒蛇隱藏的力量3

Last,但並非最不重要的一點是,在這個系列中,關於如何在 backtrader 中使用Python的隱藏功能是一些神奇變數是如何出現的。

Backtrader多數據範例

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

Backtrader信貸利息

在某些情況下,真實經紀人的現金金額可能會減少,因為資產操作包括利率。例子: 賣空股票 交易所買賣基金包括多頭和空頭 這意味著不僅交易構成了系統的盈利能力,因為信貸上的利息在帳戶上佔有一席之地。 為了涵蓋這種情況, backtrader 包括(從發佈1.8.8.96開始)功能來考慮這一點。