Backtrader開發指標

  |  

經過 backtrader 微調(因為它已經運行了一段時間),我決定不僅通過GitHub分享它,還告訴世界它在那裡,並在“Reddit”中發佈它的存在。

在評論了為什麼交易/演算法交易平臺會彈出,以及關於支持許多同時交易的即時交易的平臺的私人問題之後,我得出的結論是,我自己的孩子應該擁有自己的博客。

我們來了。但讓我們專注於業務。

backtrader 旨在讓我快速嘗試一些想法,並檢查我的眼睛可能告訴我這可能是一個機會。

backtrader (現在)完全是關於回溯測試的,還沒有連接到任何即時交易平臺,甚至可能沒有(儘管我相信技術實現會允許它)

當我使用「嘗試想法」這個表達時,我的意思是兩件事:

  1. 能夠快速起草指標並能夠直觀地評估其行為

  2. 無論是這種情況,都可以圍繞該指標或與他人的組合制定潛在的戰略。

我的個人交易是100%判斷性的,因為自動化系統不會做出任何一個決定。但我看看指標有什麼要說明的。無論這些「跡象」是否真的是一個信號,它都留給了我錯誤的人類思維。

但是讓我們來試試吧。在Reddit上發佈了第一 次之後,我添加了一個眾所周知的指標:

  • 特裡克斯

Stockcharts在Trix上有一個很好的討論:ChartSchool - Trix

讓我們嘗試一下如何做到這一點,以最小可能 lines

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import backtrader as bt
import backtrader.indicators as btind


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指標已啟動並運行。看著這一點,作為該平臺的作者,我確實相信我的目標是能夠快速嘗試易於使用的新想法......已達到。

開發細分:

  • lines = ('trix',)

    此元組定義指標的輸出 lines (在本例中僅為一個)。類聲明開頭的此語句在類創建和物件實例化期間生成大量後台操作。

    足以說該物件具有一個屬性“lines”,該屬性包含“trix”。

    作為獎勵,如果在指標本身內部不使用名稱“trix”,則“line”也可以通過“self.trix”到達。但為了清楚起見,我更喜歡“自我”。lines.trix”

    其他存取方法:

    • self.l.trix

    • 自我。lines[0] ...作為索引是對應於元組中位置的索引

  • 參數 = (('句點', 15),)

    這個元組元組(也可以是字典或 OrderedDict)定義指標接受的參數並聲明預設值。

    解析 kwargs 的負擔從使用者的肩上卸下來。

    可以使用“self.params.xxxxx”表示法或速記“self.p.xxxxx”訪問參數

  • 計算(其中 EMA 代表 ExponentialMovingAverage)

    • ema1 = btind.EMA(self.data, period=self.p.period)

      顯示新的獎金...“自我數據”。這似乎是突然出現的,但這又是在指標的後台完成的預處理。

      傳遞給指標進行計算的任何「數據」都會被攔截並放置在數位self.datas 中,其中通常 self.datas[0] 可用於訪問第一個數據。

      速記確實存在,如下所示:self.data 和 self.data0 表示陣列中的第一個數據。從那時起,self.data1,self.data2。

      Trix只需要一個數據

    • ema2 = btind.EMA(ema1, period=self.p.period)

      沒什麼可說的。EMA 使用 ema1 作為輸入數據

    • ema3 = btind.EMA(ema2, period=self.p.period)

      更不用說

    • 自我。lines.trix = 100.0 * (ema3 - ema3(-1)) / ema3(-1)

      首先,完成一個簡單的1週期百分比差異計算。

      魔術 ema3(-1) 是一種表示法,用於表示:ema 的前一個值。

      計算結果被分配給在類創建期間定義的輸出“line”“trix”。

簡單易用。但是,如果我沒有獲得Trix正在做什麼的視覺反饋,「實驗」就不會完成(即使Stockcharts有一篇很好的文章)。

注意

實際的Trix實施有一些額外的花裡胡哨的東西,主要是為了美化情節而結束的,這與這篇文章無關。

我們假設我們已經將MyTrix 指標放在一個 mytrix.py 檔中。

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import backtrader as bt
import backtrader.feeds as btfeeds

from mytrix import MyTrix


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

    def __init__(self):
        MyTrix(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()

視覺輸出如下(open 圖表在新視窗/選項卡中查看全尺寸圖像),希望顯示創建指標和可視化評估的速度和簡便性backtrader

推薦閱讀

相關文章

Backtrader傭金計劃

backtrader 的誕生是出於必要。我自己的...有一種感覺,我控制著自己的回溯測試平臺,可以嘗試新的想法。但是,在這樣做並且從一開始就完全 open 採購它時,很明顯它必須有一種方法來滿足他人的需求和願望。 作為未來的交易者,我本可以選擇基於點的計算和每輪傭金的固定價格,但這將是一個錯誤。

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智慧質押

版本 1.6.4.93 標誌著 backtrader 的一個重要里程碑,即使版本號的更改很小。 職位大小調整是閱讀Van K. Tharp的《Trade Your Way To Financial Freedom 》後,為這個專案奠定基礎的事情之一。

Backtrader混合時間幀

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

Backtrader卡爾曼等

注意 對以下指令的支援從提交開始 發佈1.9.30.x 將是包含它的第1個版本 。 backtrader的原始目標之一是成為純python,即:僅使用標準發行版中可用的軟體包。只有一個例外是matplotlib在沒有重新發明輪子的情況下進行繪圖。

Backtrader現實咬合

上一篇文章設法複製了該BTFD 策略,發現真正的收益 16x 而不是 31x。 但正如複製期間所指出的: 不收取傭金 使用2x 槓桿不收取利息 這就提出了一個顯而易見的問題: 當收取傭金和利息時,這16x中有多少會存在? 幸運的是,前面的示例足夠靈活,可以對其進行試驗。

Backtrader教程:分析儀 - PyFolio

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

Backtrader教程:策略 - 信號

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

Backtrader終極振蕩器

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