我知道这个问题已经解决了,但是我尝试了他们在 github 问题上提供的内容,但它对我没有帮助,所以我决定展示我是如何解决我的问题的。也许它会帮助你。
问题出在 zipline 的 benchmark.py 文件(和其他几个文件)中,它试图从 iex 获取数据并失败,因为它们的功能发生了变化。
我将向您展示我为运行示例代码所做的工作:
(我假设您已经安装了 zipline 并运行了苹果购买示例代码)
1.benchmark.py:查看您计算机中的 zipline 文件夹(您已下载或安装的 pip/conda)。打开 benchmark.py(先找到它)并编辑它,将那里的整个代码更改为:
import numpy as np
import pandas as pd
import pandas_datareader.data as pd_reader
def get_benchmark_returns(symbol, first_date, last_date):
data = pd_reader.DataReader(
symbol,
'yahoo',
first_date,
last_date
)
data = data['Close']
data[pd.Timestamp('2008-12-15')] = np.nan
data[pd.Timestamp('2009-08-11')] = np.nan
data[pd.Timestamp('2012-02-02')] = np.nan
data = data.fillna(method='ffill')
return data.sort_index().tz_localize('UTC').pct_change(1).iloc[1:]
此代码取自 shlomikushchi github 页面关于该问题的答案。这里 shlomikushchi 将数据源从 iex 切换到 pandas,yahoo。
2.接下来,打开文件:loaders.py,也在zipline的某处:
那里有一行调用函数:(在代码中查找)
数据 = get_benchmark_returns(符号
将其更改为:
data = get_benchmark_returns(symbol,first_date, last_date)
3.打开 trading.py ,也在 zipline 文件夹中的某处,在此行之后:
class SimulationParameters(object):
def __init__(self, start_session, end_session,
trading_calendar,
capital_base=DEFAULT_CAPITAL_BASE,
emission_rate='daily',
data_frequency='daily',
arena='backtest'):
输入这些行:
start_session = pd.Timestamp(start_session).tz_localize(tz='US/Central')
end_session = pd.Timestamp(end_session).tz_localize(tz='US/Central')
现在当你在这里运行代码时它应该可以工作了:
https://www.zipline.io/beginner-tutorial.html