官网
https://github.com/ematvey/pybacktest
官网的用例
https://github.com/ematvey/pybacktest/blob/master/examples/tutorial.ipynb
非常棒的教程
回测框架pybacktest简介(一)_lawme的博客-CSDN博客_回测框架
数据格式的一点释疑
回测框架pybacktest简介(二)_lawme的博客-CSDN博客
修改源码中的错误
performance.py 第79行
否则会出现
module 'numpy' has no attribute 'asscalar'
return np.asscalar(v)
修改为
return v.item() #难为我了看了半天numpy的文档猜出来的
backtest.py,verification.py
pandas 已经不支持 .ix 方法 需要修改为 loc
backtest.py 188行,206行,226行
verification.py 31行,61行
例如
eq = self.equity.ix[subset].cumsum()
修改为
eq = self.equity.loc[subset].cumsum()
删除已经安装的 pybacktest
删除源码目录的pybacktest-master\dist\pybacktest-0.1.1-py3.10.egg
打开 Anaconda3\Lib\site-packages\easy-install.pth
删除第一行 ./pybacktest-0.1.1-py3.10.egg
删除本地文件Anaconda3\Lib\site-packages\pybacktest-0.1.1-py3.10.egg
重新在修改好的源码中运行 python setup.py install
解决python3安装库报use_2to3 is invalid的错误
解决python3安装库报use_2to3 is invalid的错误 - 码农教程
pip uninstall nbformat
pip uninstall clyent
pip uninstall setuptools
pip install nbformat==5.4.0
pip install clyent==1.2.1
pip install setuptools==57.5.0 # 以上3项都是改成能用的版本
pip install pandas_datareader # 编码的时候要用到
python setup.py install
ohlc = pybacktest.load_from_yahoo('SPY') 中国无法使用,用下面这段代码替换
import akshare as ak
code = '600519'
df=ak.stock_zh_a_hist(period='daily',symbol=code,adjust="qfq")
df=df[['日期','开盘','最低','最高','收盘','成交量']]
df.rename(columns={df.columns[0]:'date'},inplace=True)
df.rename(columns={df.columns[1]:'O'},inplace=True)
df.rename(columns={df.columns[2]:'L'},inplace=True)
df.rename(columns={df.columns[3]:'H'},inplace=True)
df.rename(columns={df.columns[4]:'C'},inplace=True)
df.rename(columns={df.columns[5]:'V'},inplace=True)
df['date'] = pd.to_datetime(df['date'])
df.set_index('date',inplace=True)
df.sort_index()
ohlc = df
让matplotlib支持中文字体
import matplotlib.pyplot as plt 下面增加两行
import matplotlib.pyplot as plt
# 设置字体 显示汉字
plt.rcParams["font.sans-serif"] = "SimHei"
# 取消使用 unicode 的负号
plt.rcParams["axes.unicode_minus"] = False