BacktraderPython Hidden Powers 2

  |  

讓我們進一步討論一下Python的隱藏功能如何在 backtrader 中使用,以及如何實現它以嘗試實現主要目標:易用性

這些定義是什麼?

例如指標:

import backtrader as bt

class MyIndicator(bt.Indicator):

    lines = ('myline',)
    params = (('period', 20),)

    ...

任何能夠閱讀python的人都會說:

  • lines 是一個 tuple,實際上包含單個專案,一個字元串

  • params 也是一個 tuple,包含另一個有 tuple 2 個專案

但後來

擴展示例:

import backtrader as bt

class MyIndicator(bt.Indicator):

    lines = ('myline',)
    params = (('period', 20),)

    def __init__(self):

        self.lines.myline = (self.data.high - self.data.low) / self.p.period

對於任何人來說,這裡都應該是顯而易見的:

  • 類中的 定義 lines 已轉換為屬性,可以作為 self.lines 並依次包含定義中指定的屬性 myline 來訪問

  • 類中的 定義params已轉換為屬性,可以作為 self.p (或self.params) 訪問,並依次包含定義中指定的屬性period

    並且self.p.period 似乎有一個值,因為它直接用於算術運算(顯然該值是定義中的值: 20

答案:元類

bt.Indicator 因此也有 MyIndicator 一個元類,這允許應用元程式設計概念。

在這種情況下,攔截「」的定義lines」和「參數」,使它們成為:

  • 實例的屬性,即:可訪問為self.linesself.params

  • 類的屬性

  • 包含在其中atributes 定義的(和定義的值)

部分秘密

對於那些不熟悉元類的人來說,它或多或少是這樣做的:

class MyMetaClass(type):

    def __new__(meta, name, bases, dct):
        ...

        lines = dct.pop('lines', ())
        params = dct.pop('params', ())

        # Some processing of lines and params ... takes place here

        ...

        dct['lines'] = MyLinesClass(info_from_lines)
        dct['params'] = MyParamsClass(info_from_params)

        ...

在這裡,類的創建已被截獲,lines 並且 params 和的定義已被替換為基於從定義中提取的資訊的類。

僅憑這一點就無法到達,因此實例的創建也會被截獲。使用 Pyton 3.x 語法:

class MyClass(Parent, metaclass=MyMetaClass):

    def __new__(cls, *args, **kwargs):

        obj = super(MyClass, cls).__new__(cls, *args, **kwargs)
        obj.lines = cls.lines()
        obj.params = cls.params()

        return obj

在這裡,在上述實例中,上述實例被定義為MyLinesClassMyParamsClass 已放入 的實例 MyClass中。

不,沒有衝突:

  • 該類可以說:「系統範圍」 並包含其自己的屬性linesparams 哪些是類

  • 該實例可以說:「系統本地」,並且每個實例都包含和的lines 實例(每次都不同) params

通常,例如,一個將用於self.lines 訪問實例,但也可以使用 MyClass.lines 訪問類。

後者使用戶可以訪問方法,這些方法不是用於一般用途的,但這是Python,沒有什麼可以被禁止的,更不用說 Open Source了。

結論

元類正在幕後工作,以提供一種機制,通過處理諸如和的定義之類的tuple東西,使almos成為元語言。linesparams

目標是讓使用該平臺的任何人的生活更輕鬆

推薦閱讀

相關文章

Backtrader按日線交易

似乎在世界某個地方有一種权益(Interest)可以總結如下: 使用每日柱線引入訂單,但使用開盤價 這來自工單#105订单执行逻辑与当前数据和#101动态投注计算中的對話 backtrader 嘗試盡可能保持現實,並且在處理每日柱線時適用以下前提: 當每日柱被評估時,柱線已經結束 這是有道理的,

BacktraderPython Hidden Powers 2

讓我們進一步討論一下Python的隱藏功能如何在 backtrader 中使用,以及如何實現它以嘗試實現主要目標:易用性 這些定義是什麼? 例如指標: import backtrader as bt class MyIndicator(bt.

Backtrader教程:指標 - 開發

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

Backtrader標杆

backtrader 包括 2 種不同類型的物件,可幫助進行跟蹤: Observers Analyzers 工單 #89 是關於添加資產基準測試的。明智的是,人們實際上可能有一個策略,即使積極,也低於簡單地跟蹤資產所能提供的策略。

Backtrader迪克森移動平均線

下面的reddit帖子以自己的作者Nathan Dickson(reddit句柄)命名了這個平均值Dickson移動平均線。 在一次對reddit Algotrading 的定期訪問中,我發現了一篇關於移動平均線的帖子,該移動平均線試圖模仿Jurik移動平均線(又名JMA)。

Backtrader教程:篩檢程式

此功能是 backtrader 的相對較新的補充,必須安裝到已經存在的內部結構中。這使得它不像希望的那樣靈活且100%功能齊全,但在許多情況下它仍然可以達到目的。 儘管該實現試圖允許隨插即用的篩檢程式連結,但預先存在的內部結構使得很難確保始終可以實現。因此,某些篩選器可能是連結的,而其他一些篩選器可能不是。

Backtraderta-lib 集成

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

Backtrader教程:數據饋送 - 熊貓

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

Backtrader教程:分析儀 - PyFolio

注意 從(至少)2017-07-25pyfolio 開始,API已更改,不再 create_full_tear_sheet 具有 gross_lev 作為命名參數的參數。

Backtrader信貸利息

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