簡體   English   中英

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

[英]Getting JSONDecodeError: Expecting value: line 1 column 1 (char 0) with 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)

我收到的錯誤消息是:

**JSONDecodeError: Expecting value: line 1 column 1 (char 0)**

這是錯誤的圖片: 在此處輸入圖片說明

同樣,當我嘗試運行程序時會發生這種情況。

可能是什么問題? 任何幫助、提示或建議~非常~感謝!

TIA

附錄:我也試過這個: https : //docs.google.com/document/d/1mvZO_JDirbJNXJfM0bTS9uMipHE5cfSGFj0sUpJicsw/edit?usp=sharing

我知道這個問題已經解決了,但是我嘗試了他們在 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

沒關系。 按照此處的信息並解決了問題: https : //github.com/quantopian/zipline/issues/2480

第 3 步應該是:

start_session = pd.Timestamp(start_session).tz_convert('UTC')

end_session = pd.Timestamp(end_session).tz_convert('UTC')

另一個解決方案——在 Github 問題中提到——是從 IEX 注冊一個免費的 API 令牌,並將其插入到你的 zipline 模塊的benchmark.py文件中。 將 request.get 行更改為:

r= requests.get( "https://cloud.iexapis.com/stable/stock/{}/chart/5y?chartCloseOnly=True&token={}".format(symbol, IEX_API_KEY) )

需要是一個字符串,所以用 " " 引號包圍你的鍵

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM