Backtrader教程:日期時間 - 管理

  |  

在 1.5.0 版之前, backtrader 使用直接的方法來進行時間管理,因為數據源計算的任何日期時間都只是按面值使用。

對於任何使用者輸入也是如此,例如可以提供給任何數據源的參數fromdate (或 sessionstart)的情況

考慮到直接控制凍結的數據源以進行回溯測試,這種方法很好。很容易假設輸入日期時間在進入系統之前已經得到處理。

但是在 1.5.0 中,支持實時 數據源,這強制考慮 日期時間管理。如果始終 true以下情況,則不需要進行此類管理:

  • 紐約的一位交易者交易ES-Mini。(或其中一個別名)的US/Eastern 時區

  • 柏林的一位交易者交易DAX期貨。在這種情況下,CET 對於兩個(或 Europe/Berling)時區都適用

上面的直接輸入輸出日期時間方法將起作用,例如,在柏林的交易者總是可以做這樣的事情:

class Strategy(bt.Strategy):

    def next(self):

        # The DAX future opens at 08:00 CET
        if self.data.datetime.time() < datetime.time(8, 30):
            # don't operate until the market has been running 30 minutes
            return  #

當柏林的同一交易者決定進行交易時,直接接近的問題就浮出水面了ES-Mini。因為從 DST 更改為 DST 發生在一年中的不同時間點,這會導致時差在一年中的幾個星期內不同步。以下方法並不總是有效:

class Strategy(bt.Strategy):

    def next(self):

        # The SPX opens at 09:30 US/Eastern all year long
        # This is most of the year 15:30 CET
        # But it is sometimes 16:30 CET or 14:30 CET if a DST switch on-off
        # has happened in the USA and not in Europe

        # That's why the code below is unreliable

        if self.data.datetime.time() < datetime.time(16, 0):
            # don't operate until the market has been running 30 minutes
            return  #

使用時區進行操作

為了解決上述情況,同時仍與直接輸入輸出時間方法相容,backtrader 為最終使用者提供以下功能

  • 默認情況下,平臺不會觸及數據源提供的日期時間

    • 最終使用者可以透過以下方式覆寫此輸入:

    • 向數據源提供tzinput 參數。這必須是與介面相容的物件 datetime.tzinfo 。最有可能的是,使用者將提供一個 pytz.timezone 實例

    有了這個決定,內部backtrader 使用的時間被認為是格式的 UTC-like ,即:

    • 如果數據源已將其UTC 格式存儲

    • 轉換後通過tzinput

    • 它不是真的UTC ,但它是用戶的參考,因此 UTC-like

  • 如果 data feed 可以自動確定輸出的時區,這將是預設值

    這在即時饋送的情況下是有意義的,特別是在像柏林(CET 時區)的交易者使用 US/Eastern 時區交易產品這樣的用例中。

    因為交易者總是得到正確的時間,在上面的例子中,開盤時間保持不變09:30 US/Eastern,而不是 15:30 CET 一年中的大部分時間都,但有時 16:30 CET 和有時 14:30 CET

  • 如果無法確定,則輸出將是輸入(該)時間內確定的任何內容。UTC-like

  • 最終使用者可以覆蓋和確定輸出的實際時區

    • 向數據源提供 tz 參數。這必須是與介面相容的物件 datetime.tzinfo 。最有可能的是,使用者將提供一個 pytz.timezone 實例

注意

使用者輸入的參數fromdatesessionstart 期望與實際 tz參數同步,由數據源自動計算,由使用者提供或保留為預設值(None這意味著日期時間的直接輸入輸出)

考慮到所有這些,讓我們回想一下柏林交易者,交易:US/Eastern

import pytz

import bt

data = bt.feeds.MyFeed('ES-Mini', tz=pytz.timezone('US/Eastern'))

class Strategy(bt.Strategy):

    def next(self):

        # This will work all year round.
        # The data source will return in the frame of the 'US/Eastern' time
        # zone and the user is quoting '10:00' as reference time
        # Because in the 'US/Eastern' timezone the SPX index always starts
        # trading at 09:30, this will always work

        if self.data.datetime.time() < datetime.time(10, 0):
            # don't operate until the market has been running 30 minutes
            return  #

對於可以自動確定輸出時區的數據來源:

import bt

data = bt.feeds.MyFeedAutoTZ('ES-Mini')

class Strategy(bt.Strategy):

    def next(self):

        # This will work all year round.
        # The data source will return in the frame of the 'US/Eastern' time
        # zone and the user is quoting '10:00' as reference time
        # Because in the 'US/Eastern' timezone the SPX index always starts
        # trading at 09:30, this will always work

        if self.data.datetime.time() < datetime.time(10, 0):
            # don't operate until the market has been running 30 minutes
            return  #

甚至比上面更少的工作。

顯然MyFeedMyFeedAuto 在上面的例子中只是虛擬的名字。

注意

在撰寫本文時,分配中包含的唯一可以自動確定時區的數據源是連接到盈透證券的數據源

推薦閱讀

相關文章

Backtrader教程:指標 - 開發

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

Backtrader教程:安裝

要求和版本 backtrader 是獨立的,沒有外部依賴關係(除非要繪圖) 基本要求是: Python 2.7 Python 3.2 / 3.3/ 3.4 / 3.5 pypy/pypy3 如果需要繪圖,則其他要求: Matplotlib >= 1.4.

Backtrader教程:操作平臺

Line 反覆運算器 為了參與操作,plaftorm使用 line 反覆運算器的概念。它們已經鬆散地模仿了Python的反覆運算器,但實際上與它們無關。 策略和指標是 line 反覆運算器。

Backtrader教程:數據饋送 - 擴展 (Extending DataFeed)

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

Backtrader教程:Cerebro - 優化 - 改進

backtrader版本1.8.12.99改進了在多處理過程中管理data feeds和結果的方式。

Backtrader教程:日期時間 - 管理

在 1.5.0 版之前, backtrader 使用直接的方法來進行時間管理,因為數據源計算的任何日期時間都只是按面值使用。 對於任何使用者輸入也是如此,例如可以提供給任何數據源的參數fromdate (或 sessionstart)的情況 考慮到直接控制凍結的數據源以進行回溯測試,這種方法很好。

Backtrader蟒蛇隱藏的力量3

Last,但並非最不重要的一點是,在這個系列中,關於如何在 backtrader 中使用Python的隱藏功能是一些神奇變數是如何出現的。

Backtrader教程:數據饋送 - 熊貓

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

Backtrader教程:分析儀 - PyFolio

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

Backtrader信貸利息

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