Hi guys,
I'm trying to use pyfolio but I am stuck at the first step of importing data. Would appreciate any help. thank you in advance
when executing this line:
benchmark_rets = pf.utils.get_symbol_rets('SPY')
I get the following error:
UserWarning: Yahoo Finance read failed: mktime argument out of range, falling back to Google
UserWarning)
OverflowError Traceback (most recent call last)
~\Anaconda3\lib\site-packages\empyrical\utils.py in get_symbol_returns_from_yahoo(symbol, start, end)
389 try:
--> 390 px = web.get_data_yahoo(symbol, start=start, end=end)
391 rets = px[['Adj Close']].pct_change().dropna()
~\Anaconda3\lib\site-packages\pandas_datareader\data.py in get_data_yahoo(*args, **kwargs)
39 def get_data_yahoo(*args, **kwargs):
---> 40 return YahooDailyReader(*args, **kwargs).read()
41
~\Anaconda3\lib\site-packages\pandas_datareader\yahoo\daily.py in read(self)
114 try:
--> 115 df = super(YahooDailyReader, self).read()
116 if self.ret_index:
~\Anaconda3\lib\site-packages\pandas_datareader\base.py in read(self)
180 df = self._read_one_data(self.url,
--> 181 params=self._get_params(self.symbols))
182 # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
~\Anaconda3\lib\site-packages\pandas_datareader\yahoo\daily.py in _get_params(self, symbol)
98 def _get_params(self, symbol):
---> 99 unix_start = int(time.mktime(self.start.timetuple()))
100 day_end = self.end.replace(hour=23, minute=59, second=59)
OverflowError: mktime argument out of range
During handling of the above exception, another exception occurred:
RemoteDataError Traceback (most recent call last)
in ()
----> 1 benchmark_rets = pf.utils.get_symbol_rets('SPY')
~\Anaconda3\lib\site-packages\pyfolio\utils.py in get_symbol_rets(symbol, start, end)
598 return SETTINGS['returns_func'](symbol,
599 start=start,
--> 600 end=end)
~\Anaconda3\lib\site-packages\pyfolio\deprecate.py in wrapper(*args, **kwargs)
41 stacklevel=stacklevel
42 )
---> 43 return fn(*args, **kwargs)
44 return wrapper
45 return deprecated_dec
~\Anaconda3\lib\site-packages\pyfolio\utils.py in default_returns_func(symbol, start, end)
399 - See full explanation in tears.create_full_tear_sheet (returns).
400 """
--> 401 return empyrical.utils.default_returns_func(symbol, start=None, end=None)
402
403
~\Anaconda3\lib\site-packages\empyrical\utils.py in default_returns_func(symbol, start, end)
440 symbol='SPY',
441 start='1/1/1970',
--> 442 end=datetime.now())
443 rets = rets[start:end]
444 else:
~\Anaconda3\lib\site-packages\empyrical\utils.py in get_returns_cached(filepath, update_func, latest_dt, kwargs)
283
284 if update_cache:
--> 285 returns = update_func(kwargs)
286 try:
287 ensure_directory(cache_dir())
~\Anaconda3\lib\site-packages\empyrical\utils.py in get_symbol_returns_from_yahoo(symbol, start, end)
394 'Yahoo Finance read failed: {}, falling back to Google'.format(e),
395 UserWarning)
--> 396 px = web.get_data_google(symbol, start=start, end=end)
397 rets = px[['Close']].pct_change().dropna()
398
~\Anaconda3\lib\site-packages\pandas_datareader\data.py in get_data_google(*args, **kwargs)
34
35 def get_data_google(*args, **kwargs):
---> 36 return GoogleDailyReader(*args, **kwargs).read()
37
38
~\Anaconda3\lib\site-packages\pandas_datareader\base.py in read(self)
179 if isinstance(self.symbols, (compat.string_types, int)):
180 df = self._read_one_data(self.url,
--> 181 params=self._get_params(self.symbols))
182 # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
183 elif isinstance(self.symbols, DataFrame):
~\Anaconda3\lib\site-packages\pandas_datareader\base.py in _read_one_data(self, url, params)
77 """ read one data from specified URL """
78 if self._format == 'string':
---> 79 out = self._read_url_as_StringIO(url, params=params)
80 elif self._format == 'json':
81 out = self._get_response(url, params=params).json()
~\Anaconda3\lib\site-packages\pandas_datareader\base.py in _read_url_as_StringIO(self, url, params)
88 Open url (and retry)
89 """
---> 90 response = self._get_response(url, params=params)
91 text = self._sanitize_response(response)
92 out = StringIO()
~\Anaconda3\lib\site-packages\pandas_datareader\base.py in _get_response(self, url, params, headers)
137 if params is not None and len(params) > 0:
138 url = url + "?" + urlencode(params)
--> 139 raise RemoteDataError('Unable to read URL: {0}'.format(url))
140
141 def _get_crumb(self, *args):
RemoteDataError: Unable to read URL: http://www.google.com/finance/historical?q=SPY&startdate=Jan+01%2C+1970&enddate=Dec+15%2C+2017&output=csv