Backtrader遞歸指標

  |  

backtrader的最初目標之一是:

  • 能夠快速製作指標原型以測試新想法

它不一定是一個完美的指標,但能夠快速輕鬆地開發它們確實會有所幫助。為了確認設計是正確的,反向交易者標準庫中的第一個指標是指數移動平均線(又名 EMA),其定義為:遞歸

筆記

瑣事:正如您想像的那樣,一個指標是 SimpleMovingAverage

由於如何開發遞歸指標的問題已發佈在反向交易者社區中,讓我們開發一個快速的ExponentialMovingAverage指標。

遞歸指標,如

  • 它使用先前的值來計算當前值

例如,您可以在Wikipedia - Exponential Moving Average中查看數學

如果您有足夠的勇氣閱讀所有內容,您就會發現該週期是用來計算指數平滑的。我們會使用它。

為了解決計算第一個值的難題,行業決定使用前一period值的簡單平均值。

作為槓桿,我們將使用bt.indicators.PeriodN

  • 已經定義了一個period參數

  • 通知框架最終用戶使用的實際period

參見其定義: Docs - Indicator Reference

然後讓我們開發我們的EMA

import backtrader as bt

class EMA(bt.indicators.PeriodN):
    params = {'period': 30}  # even if defined, we can redefine the default value
    lines = ('ema',)  # our output line

    def __init__(self):
        self.alpha = 2.0 / (1.0 + self.p.period)  # period -> exp smoothing factor

    def nextstart(self):  # calculate here the seed value
        self.lines.ema[0] = sum(self.data.get(size=self.p.period)) / self.p.period

    def next(self):
        ema1 = self.lines.ema[-1]  # previous EMA value
        self.lines.ema[0] = ema1 * (1.0 - self.alpha) + self.data[0] * self.alpha

做起來幾乎比說的容易。關鍵是在nextstart中提供種子值,其中

  • 當達到指標的最短預熱期時,將調用一次。

    next不同,它將為傳遞到系統中的每個新數據值調用

nextstart的默認實現只是將任務委託給next ,對於大多數指標(例如簡單移動平均線)來說,這是正確的做法。但在這種情況下,覆蓋和提供種子值是關鍵。

沿著數據繪製

作為移動平均線,如果指標繪製在與其計算平均值的數據相同的軸上,那就太好了。因為我們繼承自PeriodN ,所以繪圖的默認值是(參見文檔):

subplot=True

這當然意味著將為我們的指標創建一個subplot (圖表上的另一個軸)。這很容易被覆蓋。

import backtrader as bt

class EMA(bt.indicators.PeriodN):
    plot = dict(subplot=False)

並做了。如果您想控制更多繪圖選項,請查看Docs - Plotting

祝你好運!

推薦閱讀

相關文章

BacktraderPython Hidden Powers 2

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

Backtrader 教程:繪圖 - 同一軸

上一篇future-spot 將原始數據和稍微(隨機)修改的數據繪製在同一空間上,但不在同一軸上。從該帖子中恢復第一張圖片。有人能看見:圖表左右兩側有不同的刻度當查看在原始數據周圍振盪+- 50點的擺動紅線(隨機數據)時,這一點最為明顯。在圖表上,視覺印像是這些隨機數據大多總是高於原始數據。

Backtrader回溯

在一些關於改進的ShapeRatio的提示之後, backtrader 已將此分析儀添加到其武器庫中。 文獻位於: 從對數回報的好處開始,並遵循在SharpeRatio方程的分母中具有標準偏差的副作用,本文檔開發了該分析儀的公式和期望。

Backtrader條形同步

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

Backtrader 教程:交易

交易的定義:當工具中的頭寸從 0 變為大小 X 時,交易打開,對於多頭/空頭頭寸可能為正/負)當頭寸從 X 變為 0 時,交易平倉。以下兩個動作:正轉負負轉正實際上被視為:一筆交易已關閉(倉位從 X 變為 0)新交易已開立(倉位從 0 變為 Y)交易只是提供信息,沒有用戶可調用的方法。

Backtrader教程:觀察者 - 統計

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

Backtrader教程:尺寸調整器

智慧質押 策略提供了交易方法,即:buy和 sell close。

Backtrader多數據範例

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

Backtrader現實咬合

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

Backtrader動量策略

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