Backtrader數據重採樣

  |  

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

“重新採樣”實際上應該稱為“上採樣”,因為從源時間範圍到更大的時間範圍(例如:幾天到幾週)

“下採樣”尚不可能。

backtrader通過將原始數據傳遞給智能命名為DataResampler的過濾器對象,內置了對重採樣的支持。

該類有兩個功能:

  • 更改時間範圍

  • 壓縮桿

為此, DataResampler在構建期間使用標準feed.DataBase參數:

  • timeframe (默認:bt.TimeFrame.Days)

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

  • compression (默認值:1)

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

讓我們看一個使用手工腳本從每日到每週的示例:

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

輸出:

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

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

輸出:

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

  • 像往常一樣加載數據

  • 將數據送入具有所需數據的DataResampler

    • 大體時間

    • 壓縮

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

    # Load the Data
    datapath = args.dataname or '../datas/sample/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)

    # Resample the data
    data_resampled = bt.DataResampler(
        dataname=data,
        timeframe=tframes[args.timeframe],
        compression=args.compression)

    # Add the resample data instead of the original
    cerebro.adddata(data_resampled)

最後一個示例,我們首先將時間範圍從每天更改為每週,然後應用 3 比 1 的壓縮:

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

輸出:

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

  • 52 週

  • 52 / 3 = 17.33 因此 18 個柱

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

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

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/sample/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)

    # Resample the data
    data_resampled = bt.DataResampler(
        dataname=data,
        timeframe=tframes[args.timeframe],
        compression=args.compression)

    # Add the resample data instead of the original
    cerebro.adddata(data_resampled)

    # 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通過將原始數據傳遞給智能命名為DataResampler的過濾器對象,內置了對重採樣的支持。

Backtrader實際使用方式

最後,似乎已經付出了開發 backtrader是值得的。 在觀察 last 周的歐洲市場時,似乎世界末日了,一位朋友問我是否可以看看我們圖表包中的數據,看看與以前類似情況相比,下跌幅度如何。 當然可以,但我說我可以做的不僅僅是查看圖表,因為我可以快速: 創建一個快速LegDown 指示器來測量跌落的範圍。

Backtrader逃離 OHLC 土地

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

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

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

Backtrader教程:觀察者 - 基準測試

工單 #89 是關於針對資產添加基準測試的。明智的是,人們實際上可能有一個策略,即使積極,也低於簡單地跟蹤資產所能提供的策略。

Backtrader節省記憶體

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

Backtrader教程:數據饋送 - 雅虎

2017年5月,雅虎停止了現有的CSV格式歷史數據下載API。 一個新的API(這裡命名v7)很快被標準化並已實現。 這也帶來了實際CSV下載格式的變化。 使用 v7 API/格式 從版本1.9.49.116 開始,這是預設行為。

Backtrader信號策略

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

Backtrader教程:指標 - ta-lib

即使 backtrader 提供了已經 high 數量的內置指標,並且開發指標主要是定義輸入,輸出和以自然的方式編寫公式的問題,有些人也希望使用TA-LIB。

Backtrader教程:數據饋送 - 多個時間幀

有時投資決策是使用不同的時間框架做出的: 每周評估趨勢 每天執行條目 或者5分鐘對60分鐘。 這意味著需要組合多個時間幀的數據backtrader 來支援這種組合。 對它的本機支持已經內置。