簡體   English   中英

從backtrader中的pandas datafeed提取數據幀

[英]extract dataframe from pandas datafeed in backtrader

我通過以下方式創建並傳遞了我的熊貓回購者數據供稿:

data = bt.feeds.PandasData(dataname= **my_data.candles_to_backtrader(pandas))
cerebro.adddata(data)

我正在創建一個新indicator ,該indicator需要從data feed獲取dataframe

或者實際上只是對數據執行minmax類的操作。

在我的指標中,我有:

def next(self):
    ...
    minr = datas[0].min()
    ...

這不起作用,提到:

AttributeError: 'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' object has no attribute 'min'

有什么線索嗎?

backtrader不是pandas ,也不被認為是用作Dataframe

從您的示例:

def next(self):
    ...
    minr = datas[0].min()
    ...

它實際上應該是self.datas[0]或更好的self.data0self.data ,這可以簡化事情,但這不是重點。

關鍵點在這里

    minr = datas[0].min()

第一:

  • 當您引用self.datas[0]並對其進行處理時,您就是在指close價。 為什么? 由於業界定居在一個很久以前,它也使中沒有引用一個特定領域(當你有指標上的指示燈 ,可以很明顯指標是通用的是要走的路)通用指標的制定

第二:

  • 顯然,您要求的是已完成的整個系列中的最小系列。

    設想的指標具有回溯期,並且(通常,但您可能)不會回頭看整個系列。

第三:

  • 即使您已使用數據Dataframe作為輸入, 回傳程序也無法在內部使用此結構(這是有意識的設計決策),並且構成價格欄或指標輸出的每個元素都是單獨的數組。

不可以。backtrader不是Dataframe ,也不能用作一個Dataframe 您始終可以對所需的線進行切片,並根據它們創建一個數據DataframeSeries

請參閱: Backtrader文檔-平台概念和部分: 切片

我從幾筆資料中得知,backtrader不支持(也不打算支持)pandas數據框的計算。

這是將self.datas[0]轉換為熊貓數據幀並傳遞len(self)以支持適當的回測的方法。

這是代碼:

def __bt_to_pandas__(self, btdata, len):
    get = lambda mydata: mydata.get(ago=0, size=len)

    fields = {
        'open': get(btdata.open),
        'high': get(btdata.high),
        'low': get(btdata.low),
        'close': get(btdata.close),
        'volume': get(btdata.volume)
    }
    time = [btdata.num2date(x) for x in get(btdata.datetime)]

    return pd.DataFrame(data=fields, index=time)

其中btdata可以只是self.datas[0]len可以是len(self)

希望這可以幫助

AttributeError:“ Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst”對象沒有屬性“ min”

這意味着您正在嘗試獲取一個或多個Abst對象的最小值

這個問題的原因也許

您可能有一個2.0帳戶,並且代碼無法從服務器接收合同明細。 您需要一個舊帳戶。

qutoe來自: backtrader鏈接

所以解決方案是找到正確的序列以得到最小

minr = datas [“ something different”]。min()

如果您可以提供數據樣本,我可以幫助您提供詳細信息

或者,如果您真的想對datetime進行排序,那么您始終可以先嘗試將其轉換為unix時間戳

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM