首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从backtrader中的pandas datafeed中提取数据帧

从backtrader中的pandas datafeed中提取数据帧
EN

Stack Overflow用户
提问于 2018-11-15 22:26:44
回答 3查看 3.1K关注 0票数 0

我创建了我的pandas backtrader数据,并通过以下方式传递:

代码语言:javascript
复制
data = bt.feeds.PandasData(dataname= **my_data.candles_to_backtrader(pandas))
cerebro.adddata(data)

我正在创建一个新的indicator,它需要从data feed中取出dataframe

或者实际上只是对数据执行minmax等操作。

在我的指标中,我有:

代码语言:javascript
复制
def next(self):
    ...
    minr = datas[0].min()
    ...

这是不起作用的,提到:

代码语言:javascript
复制
AttributeError: 'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst' object has no attribute 'min'

有什么线索吗?

EN

回答 3

Stack Overflow用户

发布于 2018-11-21 02:27:15

我从几个来源得到,backtrader不(也不会)支持使用pandas数据帧进行计算。

下面是将self.datas[0]转换为pandas数据帧的方法,同时传入len(self),以支持正确的回测。

代码如下:

代码语言:javascript
复制
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)

希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2018-11-20 22:23:05

backtrader不是pandas,也不打算用作Dataframe

从您的示例中可以看出:

代码语言:javascript
复制
def next(self):
    ...
    minr = datas[0].min()
    ...

它实际上应该是self.datas[0],甚至更好的self.data0self.data,这简化了事情,但这不是重点。

关键点在这里

代码语言:javascript
复制
    minr = datas[0].min()

首先:

  • 当你提到self.datas[0]并用它做一些事情时,你指的是close价格。为什么?因为这个行业很久以前就确定了这一点,而且它还支持开发不需要引用特定字段的通用指标(当您在指标上有指标时,很明显,通用化是可行的)

第二:

  • 很明显,你要求的是已经完成的整个系列中的最低限度。

所设想的指标有一个回顾周期,并且不会(通常,但你也可以)回顾整个系列。

第三:

  • 即使您使用Dataframe作为输入,backtrader在内部也无法使用此结构(这是有意识的设计决策),并且构成价格栏或指标输出的每个元素都是单独的数组。

不是的。backtrader不是Dataframe,也不打算用作backtrader。您始终可以对所需的行进行切片,并根据它们创建DataframeSeries

请参阅:Backtrader Documentation - Platform Concepts和节:切片

票数 0
EN

Stack Overflow用户

发布于 2018-11-15 22:40:49

min对象:'Lines_LineSeries_DataSeries_OHLC_OHLCDateTime_Abst‘对象没有属性“

AttributeError”

这意味着您正在尝试获取一个或多个Abst对象的最小值

这个问题的原因可能是

您可能有一个2.0帐户,但代码无法从服务器接收到契约详细信息。您需要一个传统帐户。

qutoe来源:backtrader link

因此,解决方案是找到正确的级数来获得最小值

minr =datas“不同的东西”.min()

如果你能提供数据样本,我可以提供细节。

或者,如果您真的想对日期时间进行排序,您可以尝试先将其转换为unix时间戳。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53321608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档