[英]Converting a GenericCSVData object to a backtrader 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
或者實際上只是對數據執行min
, max
類的操作。
在我的指標中,我有:
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.data0
或self.data
,這可以簡化事情,但這不是重點。
關鍵點在這里
minr = datas[0].min()
第一:
self.datas[0]
並對其進行處理時,您就是在指close
價。 為什么? 由於業界定居在一個很久以前,它也使中沒有引用一個特定領域(當你有指標上的指示燈 ,可以很明顯指標是通用的是要走的路)通用指標的制定 第二:
顯然,您要求的是已完成的整個系列中的最小系列。
設想的指標具有回溯期,並且(通常,但您可能)不會回頭看整個系列。
第三:
Dataframe
作為輸入, 回傳程序也無法在內部使用此結構(這是有意識的設計決策),並且構成價格欄或指標輸出的每個元素都是單獨的數組。 不可以。backtrader不是Dataframe
,也不能用作一個Dataframe
。 您始終可以對所需的線進行切片,並根據它們創建一個數據Dataframe
或Series
。
請參閱: 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.