Backtrader擴展指標

  |  

在面向對象編程中,當然在 Python 本身中,現有類的擴展可以通過兩種方式實現。

  • 繼承(或子類化)

  • 組合(或嵌入)

在開髮指標中,僅用幾代碼開發了指標TrixChartSchool - Trix參考文獻有一個帶有信號Trix ,顯示與 MACD 的相似性。

讓我們使用已經開發的Trix “組合” MyTrixSignal

class MyTrixSignalComposed(bt.Indicator):

    lines = ('trix', 'signal')
    params = (('period', 15), ('sigperiod', 9))

    def __init__(self):
        self.lines.trix = MyTrix(self.data, period=self.p.period)
        self.lines.signal = btind.EMA(self.lines.trix, period=self.p.sigperiod)

有些東西必須在定義中重複,例如trix的名稱和用於計算的period 。已定義新的線路signal和相應的sigperiod參數。

2-liner是一個很好的結果。

現在讓我們開始繼承,但首先回顧一下Trix的樣子:

class MyTrix(bt.Indicator):

    lines = ('trix',)
    params = (('period', 15),)

    def __init__(self):
        ema1 = btind.EMA(self.data, period=self.p.period)
        ema2 = btind.EMA(ema1, period=self.p.period)
        ema3 = btind.EMA(ema2, period=self.p.period)

        self.lines.trix = 100.0 * (ema3 - ema3(-1)) / ema3(-1)

使用Trix作為基類,這是TrixSignal的方面

class MyTrixSignalInherited(MyTrix):

    lines = ('signal',)
    params = (('sigperiod', 9),)

    def __init__(self):
        super(MyTrixSignalInherited, self).__init__()
        self.lines.signal = btind.EMA(self.lines.trix, period=self.p.sigperiod)

繼承的指標最終也是一個 2 線,但是:

  • 無需重新定義trix

  • 不需要重新定義period參數

兩者都繼承自基類Trix 。並且trix的計算是在基類的__init__方法中完成的:

  • 超級(MyTrixSignalInherited,自我)。初始化()

組合繼承的選擇是一個經典。這個例子並不是為了澄清哪個更好,而是更多地表明:

筆記

即使存在參數的元定義,繼承也有效,它們也繼承自基類的元定義

最後是兩個版本的代碼和圖表在付諸實施時。

  1. 第一個顯示繼承的版本
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import backtrader as bt
import backtrader.feeds as btfeeds

from mytrix import MyTrixSignalInherited


class NoStrategy(bt.Strategy):
    params = (('trixperiod', 15),
              ('analyzer', False),)

    def __init__(self):
        MyTrixSignalInherited(self.data, period=self.p.trixperiod)


if __name__ == '__main__':
    # Create a cerebro entity
    cerebro = bt.Cerebro()

    # Add a strategy
    cerebro.addstrategy(NoStrategy, trixperiod=15)

    # Create a Data Feed
    datapath = ('../datas/2006-day-001.txt')
    data = bt.feeds.BacktraderCSVData(dataname=datapath)

    # Add the Data Feed to Cerebro
    cerebro.adddata(data)

    # Run over everything
    cerebro.run()

    # Plot the result
    cerebro.plot()
  1. 第一個顯示組合版本
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import backtrader as bt
import backtrader.feeds as btfeeds

from mytrix import MyTrixSignalComposed


class NoStrategy(bt.Strategy):
    params = (('trixperiod', 15),
              ('analyzer', False),)

    def __init__(self):
        MyTrixSignalComposed(self.data, period=self.p.trixperiod)


if __name__ == '__main__':
    # Create a cerebro entity
    cerebro = bt.Cerebro()

    # Add a strategy
    cerebro.addstrategy(NoStrategy, trixperiod=15)

    # Create a Data Feed
    datapath = ('../datas/2006-day-001.txt')
    data = bt.feeds.BacktraderCSVData(dataname=datapath)

    # Add the Data Feed to Cerebro
    cerebro.adddata(data)

    # Run over everything
    cerebro.run()

    # Plot the result
    cerebro.plot()

推薦閱讀

相關文章

Backtrader做空現金

從一開始,反向交易者就可以做空任何東西,包括類似股票和類似期貨的工具。當做空時,現金減少,被賣空資產的價值用於總淨清算價值。從一側移除並添加到另一側可以保持平衡。人們似乎更喜歡增加現金,這可能會增加支出。在1.9.7.105版本中,經紀人已將默認行為更改為添加現金和移除價值。

Backtrader 教程:佣金計劃

不可知論在繼續之前,讓我們記住, backtrader者試圖對數據代表什麼保持不可知論。不同的佣金方案可以應用於相同的數據集。讓我們看看它是如何做到的。使用代理快捷方式這使最終用戶遠離CommissionInfo對象,因為可以通過單個函數調用創建/設置佣金方案。

Backtrader追踪訂單

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

Backtrader逃離 OHLC 土地

在backtrader的概念和開發過程中應用的關鍵概念之一是靈活性。 Python 的元編程和自省功能曾經是(現在仍然是)保持許多東西靈活同時仍然能夠交付的基礎。一篇舊帖子顯示了擴展概念。

Backtrader擴展數據饋送

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

Backtrader策略選擇

最初的策略選擇方法使用兩個策略,手動註冊和一個簡單的[0, 1]列表來決定哪個是策略的目標。因為 Python 為元類提供了許多自省的可能性,所以實際上可以自動化該方法。

Backtrader 教程:策略 - 參考

內置策略的參考MA_CrossOver別名: * SMA_CrossOver 這是一個多頭策略,

Backtrader傭金計劃

發佈 backtrader 使用示例使我對缺失的東西有了深刻的瞭解。

Backtrader動量策略

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

Backtrader終極振蕩器

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