fmilthaler / FinQuant

A program for financial portfolio management, analysis and optimisation.
MIT License
1.38k stars 190 forks source link

Plotting error #68

Closed leaf918 closed 1 year ago

leaf918 commented 3 years ago

`import os

import numpy as np import pandas as pd from finquant.portfolio import build_portfolio from finquant.moving_average import compute_ma, ema

names = ['GOOG', 'AMZN', 'MCD', 'DIS'] pf = build_portfolio(names=names, data_api="yfinance")

get stock data for Disney

dis = pf.get_stock("DIS").data.copy(deep=True)

dis.index = dis.index.map(str)

np.save("dis_data.npz", dis)

dis.to_csv("dis.csv")

spans = [10, 50, 100, 150, 200]

computing and visualising a band of moving averages

ma = compute_ma(dis, ema, spans, plot=True) print(ma.tail()) `


`ssh://leef_wsl_u18@localhost:22/home/leef_wsl_u18/miniconda3/envs/py36/bin/python -u /home/leef_wsl_u18/.pycharm_helpers/pydev/pydevd.py --cmd-line --multiproc --qt-support=auto --client 0.0.0.0 --port 55053 --file /tmp/rd_finquant/rd_leef/rd2.py Connected to pydev debugger (build 211.7142.13) [*100%***] 4 of 4 completed Traceback (most recent call last): File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/contextlib.py", line 99, in exit self.gen.throw(type, value, traceback) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/pandas/plotting/_matplotlib/converter.py", line 85, in pandas_converters yield File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/pandas/plotting/_matplotlib/converter.py", line 65, in wrapper return func(*args, kwargs) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/pandas/plotting/_matplotlib/core.py", line 668, in _plot return ax.plot(*args, *kwds) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/init.py", line 1892, in inner return func(ax, args, kwargs) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/axes/_axes.py", line 1407, in plot self.add_line(line) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 1787, in add_line self._update_line_limits(line) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/axes/_base.py", line 1809, in _update_line_limits path = line.get_path() File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/lines.py", line 989, in get_path self.recache() File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/lines.py", line 672, in recache xconv = self.convert_xunits(self._xorig) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/artist.py", line 199, in convert_xunits return ax.xaxis.convert_units(x) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/axis.py", line 1472, in convert_units ret = self.converter.convert(x, self.units, self) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/pandas/plotting/_matplotlib/converter.py", line 256, in convert values = DatetimeConverter._convert_1d(values, unit, axis) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/pandas/plotting/_matplotlib/converter.py", line 291, in _convert_1d values = dates.date2num(values) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/dates.py", line 362, in date2num return _to_ordinalf_np_vectorized(d) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2108, in call return self._vectorize_call(func=func, args=vargs) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2186, in _vectorize_call ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/numpy/lib/function_base.py", line 2146, in _get_ufunc_and_otypes outputs = func(*inputs) File "/home/leef_wsl_u18/miniconda3/envs/py36/lib/python3.6/site-packages/matplotlib/dates.py", line 220, in _to_ordinalf python-BaseException base = float(dt.toordinal()) AttributeError: 'numpy.datetime64' object has no attribute 'toordinal'

Process finished with exit code 1 `

fmilthaler commented 1 year ago

Hi @leaf918, apologies for the very late reply.

Thank you for reporting the issue. I just tried to replicate the error by following your code snippet, but it works out as it should. It also provides appropriate error messages in case the DataFrame/Series dis is empty.

Thus I'm closing this now.