Heerozh / spectre

GPU-accelerated Factors analysis library and Backtester
GNU General Public License v3.0
627 stars 108 forks source link

pandas tz issue #2

Closed jibanes closed 3 years ago

jibanes commented 4 years ago

using "pandas 0.25.1", I get the following stack trace when running the backtest example in README.md with:

import pyfolio as pf pf.create_full_tear_sheet(results.returns, positions=results.positions.value, transactions=results.transactions, live_start_date='2017-01-03')

Traceback (most recent call last):
  File "example1.py", line 55, in <module>
    pf.create_full_tear_sheet(results.returns, positions=results.positions.value, transactions=results.transactions, live_start_date='2017-01-03')
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/pyfolio/tears.py", line 161, in create_full_tear_sheet
    benchmark_rets = utils.get_symbol_rets('SPY')
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/pyfolio/utils.py", line 600, in get_symbol_rets
    end=end)
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/pyfolio/deprecate.py", line 43, in wrapper
    return fn(*args, **kwargs)
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/pyfolio/utils.py", line 401, in default_returns_func
    return empyrical.utils.default_returns_func(symbol, start=None, end=None)
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/empyrical/utils.py", line 444, in default_returns_func
    end=datetime.now())
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/empyrical/utils.py", line 281, in get_returns_cached
    returns.index = returns.index.tz_localize("UTC")
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/pandas/core/accessor.py", line 93, in f
    return self._delegate_method(name, *args, **kwargs)
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/datetimelike.py", line 813, in _delegate_method
    result = operator.methodcaller(name, *args, **kwargs)(self._data)
  File "/home/jibanes/anaconda3/lib/python3.7/site-packages/pandas/core/arrays/datetimes.py", line 1145, in tz_localize
    raise TypeError("Already tz-aware, use tz_convert to convert.")
TypeError: Already tz-aware, use tz_convert to convert.
Heerozh commented 4 years ago

Thank you for your report, this is not related to the pandas version, but related to the pyfolio version.

pyfolio.create_full_tear_sheet needs to pass in the benchmark_rets parameter, but it can be ignored from 0.9.

See change log:

Previously, pyfolio has required a benchmark, usually the U.S. market returns SPY. In order to provide support for international equities and alternative data sets, pyfolio is now completely independent of benchmarks. If a benchmark is passed, all benchmark-related analyses will be performed; if not, they will simply be skipped. By George Ho