pybacktest库hello world错误:builtins.AttributeError:“Series”对象没有属性“ix”

2024-10-04 05:31:24 发布

您现在位置:Python中文网/ 问答频道 /正文

运行以下pybacktest代码:

import matplotlib
import matplotlib.pyplot as plt
import pybacktest
import pandas as pd

short_ma = 50
long_ma = 200

ohlc = pybacktest.load_from_yahoo('AAPL', start=2000)
ohlc.tail()

ms = ohlc.C.rolling(short_ma).mean()
ml = ohlc.C.rolling(long_ma).mean()

buy = cover = (ms > ml) & (ms.shift() < ml.shift())  # ma cross up
sell = short = (ms < ml) & (ms.shift() > ml.shift())  # ma cross down

bt = pybacktest.Backtest(locals(), 'ma_cross')

print(bt.summary())

bt.plot_equity()

我在标题中看到了错误,有关更多信息,请参见此屏幕截图:

pybacktest hello world error

有人知道解决这个问题的方法吗


Tags: importshiftmatplotlibasmeanmllongms
1条回答
网友
1楼 · 发布于 2024-10-04 05:31:24

因此,按照这一思路:

AttributeError: 'DataFrame' object has no attribute 'ix'

我使用WingWare的调用堆栈来备份调用__getattribute__

我换了一行:

    eq = self.equity.ix[subset].cumsum()

(backtest.py的第188行)带有:

    eq = self.equity.loc[subset].cumsum()

感谢commenter@GustiAdli的确认

该代码也适用于Jupyter笔记本,正确的代码应为:

import matplotlib
import matplotlib.pyplot as plt
import pybacktest
import pandas as pd

short_ma = 50
long_ma = 200

ohlc = pybacktest.load_from_yahoo('AAPL', start=2000)
ohlc.tail()

ms = ohlc.C.rolling(short_ma).mean()
ml = ohlc.C.rolling(long_ma).mean()

buy = cover = (ms > ml) & (ms.shift() < ml.shift())  # ma cross up
sell = short = (ms < ml) & (ms.shift() > ml.shift())  # ma cross down

bt = pybacktest.Backtest(locals(), 'ma_cross')

print(bt.summary())

fig,ax = bt.plot_equity()
plt.show()

正确的输出应为:

matplotlib output

我正在为此更改(以及需要执行的其他修复)创建一个新的存储库:

https://github.com/enjoysmath/pybacktest

因为最初的消息似乎被忽略了(最近一期消息来自去年)

相关问题 更多 >