获取 JSONDecodeError:期望值:第 1 行第 1 列(字符 0)与 Python + Zipline + Docker + Jupyter

Cas*_*ils 2 python zipline docker jupyter

我使用 Docker 安装了 Zipline 和 Jupyter:https : //github.com/quantopian/zipline/blob/master/Dockerfile

我现在正在尝试在 Jupyter 下运行以下 Zipline 代码

%%zipline --bundle quantopian-quantl --start 2008-1-1 --end 2012-1-1 -o strat.pickle

from zipline.api import symbol, order, record

def initialize(context):
    pass

def handle_data(context, data):
    order(symbol('AAPL'), 10)
    record(AAPL=data[symbol('AAPL')].price)
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息是:

**JSONDecodeError: Expecting value: line 1 column 1 (char 0)**
Run Code Online (Sandbox Code Playgroud)

这是错误的图片: 在此处输入图片说明

同样,当我尝试运行程序时会发生这种情况。

可能是什么问题?任何帮助、提示或建议~非常~感谢!

TIA

附录: 我也试过这个:https : //docs.google.com/document/d/1mvZO_JDirbJNXJfM0bTS9uMipHE5cfSGFj0sUpJicsw/edit?usp=sharing

小智 12

我知道这个问题已经解决了,但是我尝试了他们在 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:]
Run Code Online (Sandbox Code Playgroud)

此代码取自 shlomikushchi github 页面关于该问题的答案。这里shlomikushchi将数据源从iex切换到了pandas,yahoo。

2.接下来,打开文件: loaders.py ,也在 zipline 的某个地方:

那里有一行调用函数:(在代码中查找)

数据 = get_benchmark_returns(符号

将其更改为:

 data = get_benchmark_returns(symbol,first_date, last_date)
Run Code Online (Sandbox Code Playgroud)

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'):
Run Code Online (Sandbox Code Playgroud)

输入这些行:

start_session = pd.Timestamp(start_session).tz_localize(tz='US/Central')
    end_session = pd.Timestamp(end_session).tz_localize(tz='US/Central')
Run Code Online (Sandbox Code Playgroud)

现在当你在这里运行代码时它应该可以工作:

https://www.zipline.io/beginner-tutorial.html

  • 除了“3”之外,这就是答案。不要做“3”! (5认同)
  • 我认为该文件是“benchmarks.py”而不是“benchmark.py”(grep 没有找到后者)。 (2认同)