![](/img/trans.png)
[英]Zipline + Quandl JSONDecodeError: Expecting value: line 1 column 1 (char 0)
[英]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 : //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.