Backtrader教程:數據饋送 - 重新取樣

  |  

如果數據僅在單個時間範圍內可用,並且必須在不同的時間範圍內進行分析,則是時候進行一些重新採樣了。

“重採樣”實際上應該稱為“上採樣”,因為一個人從源時間幀到更大的時間幀(例如:幾天到幾周)

backtrader 內置支持通過篩選器對象傳遞原始數據,從而進行重採樣。雖然有幾種方法可以實現這一點,但存在一個簡單的介面來實現這一點:

  • 而不是使用cerebro.adddata(data),把data

    cerebro.resampledata(data, **kwargs)

有兩個主要選項可以控制

  • 更改時間範圍

  • 壓縮條形圖

為此,請在調用resampledata時使用以下參數:

  • timeframe (預設值:bt.時間幀.天)

    有用的目標時間幀必須等於或大於源

  • compression (預設值:1)

    將所選值“n”壓縮為 1 bar

讓我們看一個從「每日」到「每周」的示例,其中包含一個手工製作的腳本:

$ ./resampling-example.py --timeframe weekly --compression 1

輸出:

我們可以將其與原始每日數據進行比較:

$ ./resampling-example.py --timeframe daily --compression 1

輸出:

魔術是通過執行以下步驟來完成的:

  • 像往常一樣載入數據

  • 使用所需參數將數據饋送到cerebroresampledata

    • timeframe

    • compression

範例中的代碼(底部的整個腳本)。

    # Load the Data
    datapath = args.dataname or '../../datas/2006-day-001.txt'
    data = btfeeds.BacktraderCSVData(dataname=datapath)

    # Handy dictionary for the argument timeframe conversion
    tframes = dict(
        daily=bt.TimeFrame.Days,
        weekly=bt.TimeFrame.Weeks,
        monthly=bt.TimeFrame.Months)

    # Add the resample data instead of the original
    cerebro.resampledata(data,
                         timeframe=tframes[args.timeframe],
                         compression=args.compression)

一個 last 示例,其中我們首先將時間範圍從每天更改為每周,然後應用 3 到 1 的壓縮:

$ ./resampling-example.py --timeframe weekly --compression 3

輸出:

從最初的 256 個每日柱線中,我們最終得到 18 個 3 周柱。細分:

  • 52 周

  • 52 / 3 = 17.33,因此 18 根柱

這並不需要更多的時間。當然,日內數據也可以重新採樣。

重採樣過濾器支援其他參數,在大多數情況下不應觸及這些參數:

  • bar2edge (預設值: True

    使用時間邊界作為目標進行重新採樣。例如,對於“逐筆報價 -> 5 秒”,生成的 5 秒柱線將對齊為 xx:00、xx:05、xx:10 ...

  • adjbartime (預設值: True

    使用邊界處的時間來調整傳遞的重新採樣條的時間,而不是 last 看到的時間戳。如果重新採樣為“5 秒”,則條形的時間將調整為 hh:mm:05,即使 last 看到的時間戳為 hh:mm:04.33

    注意

    只有當“bar2edge” True時,時間才會調整。如果條形圖未與邊界對齊,則調整時間是沒有意義的

  • rightedge (預設值: True

    使用時間邊界的右邊緣來設置時間。

    如果 False 並壓縮到 5 秒,則在 hh:mm:00 和 hh:mm:04 之間重新採樣的條形的時間將為 hh:mm:00(起始邊界

    如果 True 則時間的已用邊界將為 hh:mm:05(結束邊界)

  • boundoff (預設值: 0

    將重採樣/重放的邊界按單位數量推動。

    例如,如果重採樣從 1 分鐘到 15 分鐘,則預設行為是從 00:01:00 到 00:15:00 獲取 1 分鐘條形圖,以生成 15 分鐘的重播/重採樣條形圖。

    如果boundoff 設置為 1,則邊界向前 1 unit 推。在本例中,原始單位是 1 分鐘條形圖。因此,重新採樣/重放現在將:

    • 使用00:00:00到00:14:00之間的條形圖生成15分鐘條形圖

重採樣測試腳本的範例代碼。

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

import argparse

import backtrader as bt
import backtrader.feeds as btfeeds


def runstrat():
    args = parse_args()

    # Create a cerebro entity
    cerebro = bt.Cerebro(stdstats=False)

    # Add a strategy
    cerebro.addstrategy(bt.Strategy)

    # Load the Data
    datapath = args.dataname or '../../datas/2006-day-001.txt'
    data = btfeeds.BacktraderCSVData(dataname=datapath)

    # Handy dictionary for the argument timeframe conversion
    tframes = dict(
        daily=bt.TimeFrame.Days,
        weekly=bt.TimeFrame.Weeks,
        monthly=bt.TimeFrame.Months)

    # Add the resample data instead of the original
    cerebro.resampledata(data,
                         timeframe=tframes[args.timeframe],
                         compression=args.compression)

    # Run over everything
    cerebro.run()

    # Plot the result
    cerebro.plot(style='bar')


def parse_args():
    parser = argparse.ArgumentParser(
        description='Pandas test script')

    parser.add_argument('--dataname', default='', required=False,
                        help='File Data to Load')

    parser.add_argument('--timeframe', default='weekly', required=False,
                        choices=['daily', 'weekly', 'monhtly'],
                        help='Timeframe to resample to')

    parser.add_argument('--compression', default=1, required=False, type=int,
                        help='Compress n bars into 1')

    return parser.parse_args()


if __name__ == '__main__':
    runstrat()

推薦閱讀

相關文章

Backtrader教程:觀察者 - 參考

基準 backtrader類 .observers.基準() 此 observer 存儲策略的回報和參考資產的回報,參考資產是傳遞到系統的數據之一。

Backtrader按日線交易

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

Backtrader教程:安裝

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

Backtrader教程:數據饋送 - 重新取樣

如果數據僅在單個時間範圍內可用,並且必須在不同的時間範圍內進行分析,則是時候進行一些重新採樣了。 “重採樣”實際上應該稱為“上採樣”,因為一個人從源時間幀到更大的時間幀(例如:幾天到幾周) backtrader 內置支持通過篩選器對象傳遞原始數據,從而進行重採樣。

Backtrader教程:過濾器 - 參考

工作階段篩檢程式 類 backtrader.filters。

Backtrader教程:繪圖 - 日期範圍

該版本1.9.31.x 增加了製作部分繪圖的功能。 使用策略實例中保存的完整時間戳陣列的索引 或者使用實際datetime.date 或 datetime.datetime 實例來限制必須繪製的內容。 一切都超過標準cerebro.plot。

Backtrader節省記憶體

1.3.1.92版本已經重新設計並完全實現了以前到位的記憶體節省方案,儘管沒有太多的吹捧和使用。

Backtrader教程:觀察者 - 統計

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

Backtrader教程:尺寸調整器

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

Backtrader現實咬合

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