BacktraderMFI 通用

  |  

在最近的Canonical vs Non-Canonical 帖子中 MFI ,開發了(aka MoneyFlowIndicator)。

儘管它是以規範的方式開發的,但它仍然提供了一些改進和成為通用的空間。

讓我們關注實現的第lines即創建典型價格的那些

class MFI_Canonical(bt.Indicator):
    lines = ('mfi',)
    params = dict(period=14)

    def __init__(self):
        tprice = (self.data.close + self.data.low + self.data.high) / 3.0
        mfraw = tprice * self.data.volume
        ...

典型的實例化如下所示

class MyMFIStrategy(bt.Strategy):

    def __init__(self):
        mfi = bt.MFI_Canonical(self.data)

這裡的問題應該是顯而易見的:“人們需要一個指標的輸入,lowhigh其中的特徵closevolume元件(又名*linesbacktrader生態系統中)”*

當然,可能的情況是,人們希望從不同的數據源(lines來自data feeds或來自其他指標lines)創建一MoneyFlowIndicator個使用元件,就像想要賦予close更多的權重一樣簡單,而不必開發一個特定的指標。考慮到行業標準OHLCV的欄位排序,多個輸入,額外的權重,close實例化可能看起來像這樣

class MyMFIStrategy2(bt.Strategy):

    def __init__(self):
        wclose = self.data.close * 5.0
        mfi = bt.MFI_Canonical(self.data.high, self.data.low,
                               wclose, self.data.volume)

或者因為使用者以前使用ta-lib 過並幻想過多輸入樣式。

支援多種輸入

backtrader 嘗試盡可能的pythonic,self.datas 並且可以查詢包含系統中 data feeds 清單的數位(並且自動神奇地提供給您的策略)的長度。讓我們用它來區分調用方想要什麼,並正確計算 tpricemfraw

class MFI_MultipleInputs(bt.Indicator):
    lines = ('mfi',)
    params = dict(period=14)

    def __init__(self):
        if len(self.datas) == 1:
            # 1 data feed passed, must have components
            tprice = (self.data.close + self.data.low + self.data.high) / 3.0
            mfraw = tprice * self.data.volume
        else:
            # if more than 1 data feed, individual components in OHLCV order
            tprice = (self.data0 + self.data1 + self.data2) / 3.0
            mfraw = tprice * self.data3

        # No changes with regards to previous implementation
        flowpos = bt.ind.SumN(mfraw * (tprice > tprice(-1)), period=self.p.period)
        flowneg = bt.ind.SumN(mfraw * (tprice < tprice(-1)), period=self.p.period)

        mfiratio = bt.ind.DivByZero(flowpos, flowneg, zero=100.0)
        self.l.mfi = 100.0 - 100.0 / (1.0 + mfiratio)

注意

請注意各個元件的參考方式(self.dataXself.data0self.data1

這與使用self.datas[x]相同,如 self.datas[0] ...

讓我們以圖形方式看到,此指標產生的結果與規範指標相同,當多個輸入對應於 data feed的原始分量時,產生相同的結果。為此,它將在策略中運行,如下所示

class MyMFIStrategy2(bt.Strategy):

    def __init__(self):
        MFI_Canonical(self.data)
        MFI_MultipleInputs(self.data, plotname='MFI Single Input')
        MFI_MultipleInputs(self.data.high,
                           self.data.low,
                           self.data.close,
                           self.data.volume,
                           plotname='MFI Multiple Inputs')

無需檢查每個值,從圖片中可以明顯看出,三者的結果相同。

讓我們最終看看如果把更多的權重放在上面close會發生什麼。讓我們這樣運行。

class MyMFIStrategy2(bt.Strategy):
    def __init__(self):

        MFI_MultipleInputs(self.data)
        MFI_MultipleInputs(self.data.high,
                           self.data.low,
                           self.data.close * 5.0,
                           self.data.volume,
                           plotname='MFI Close * 5.0')

這是否有意義留給讀者,但人們可以清楚地看到,增加重量close 已經改變了模式。

結論

通過簡單地使用pythoniclen,可以將使用具有多個元件(和固定名稱)的 data feed 的指標轉換為接受多個通用輸入的指標。

推薦閱讀

相關文章

Backtrader按日線交易

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

BacktraderPython Hidden Powers 2

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

Backtrader對逐筆報價數據重新取樣

backtrader 已經可以從分鐘數據中重新採樣。接受價格變動數據不是問題,只需將 4 個常用欄位(open、 high、 low、 close)設置為價格變動值。 但是傳遞要重新採樣的逐筆報價數據再次生成相同的數據。作為或版本 1.1.11.88,情況已不再如此。

Backtrader觀察員和統計

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

BacktraderOCO訂單

Release1.9.34.116 將 OCO (又名One Cancel Others)添加到回溯測試武器庫中。 注意 這僅在回溯測試中實現,並且還沒有針對即時代理的實現 注意 隨版本1.9.36.116更新。盈透證券支援 StopTrail和 StopTrailLimit OCO。

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

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

Backtrader條形同步

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

Backtrader混合時間幀

1.3.0.92版本帶來了混合來自不同時間幀的數據(來自 data feeds 和/或指標)的可能性。 到版本:https://github.com/mementum/backtrader/發佈/標籤/1.3.0.92 背景:指示器是智慧啞物件。 他們很聰明,因為他們可以進行複雜的計算。

Backtrader信號策略

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

Backtrader終極振蕩器

backtrader開發啟動時的目標之一是使開發新的指標變得非常容易(至少對作者本人而言),以在數學和視覺上測試想法。 門票#102 是關於將 UltimateOscillator 添加到 backtrader 注意 它將在下一個版本中添加,同時可以使用下面的代碼使用它。 票證中所示的參考: 以及: 無需在這裡重複。