INVESTAR / StockAnalysisInPython

456 stars 413 forks source link

Backtrader 실행했을 때 에러 #121

Open babihong opened 2 years ago

babihong commented 2 years ago

안녕하세요? 제가 초보라서 구글링해봐도 잘 못찾겠습니다. 위에 실행 했을 시 아래와 같이 에러가 나는데 도움 주시면 감사하겠습니다. 아래 에러가 뜨는데 어떤것을 봐야 하는지 잘 모르겠습니다.

raise IndexError("GridSpec slice would result in no space " IndexError: GridSpec slice would result in no space allocated for subplot


Traceback (most recent call last): File "C:/PythonStock/myPackage/ch07_09_Backtrader_RSI_SMA.py", line 88, in cerebro.plot(style='candlestick') # ⑥ File "C:\Anaconda3\envs\py37_32\lib\site-packages\backtrader\cerebro.py", line 991, in plot start=start, end=end, use=use) File "C:\Anaconda3\envs\py37_32\lib\site-packages\backtrader\plot\plot.py", line 228, in plot downinds=self.dplotsdown[ind]) File "C:\Anaconda3\envs\py37_32\lib\site-packages\backtrader\plot\plot.py", line 395, in plotind ax = masterax or self.newaxis(ind, rowspan=self.pinf.sch.rowsminor) File "C:\Anaconda3\envs\py37_32\lib\site-packages\backtrader\plot\plot.py", line 361, in newaxis rowspan=rowspan, sharex=self.pinf.sharex) File "C:\Anaconda3\envs\py37_32\lib\site-packages\matplotlib\pyplot.py", line 1230, in subplot2grid colspan=colspan) File "C:\Anaconda3\envs\py37_32\lib\site-packages\matplotlib\gridspec.py", line 90, in new_subplotspec subplotspec = self[loc1:loc1+rowspan, loc2:loc2+colspan] File "C:\Anaconda3\envs\py37_32\lib\site-packages\matplotlib\gridspec.py", line 230, in getitem [_normalize(k1, nrows, 0), _normalize(k2, ncols, 1)], File "C:\Anaconda3\envs\py37_32\lib\site-packages\matplotlib\gridspec.py", line 210, in _normalize raise IndexError("GridSpec slice would result in no space " IndexError: GridSpec slice would result in no space allocated for subplot

INVESTAR commented 2 years ago

제 PC에는 anaconda가 설치되어 있지 않고 backtrader==1.9.76.123와 matplotlib==3.3.4이 설치된 상태인데 아래 코드처럼 데이터 피드를 변경했을 때, 정상적으로 그래프가 출력됩니다.

import yfinance as yf
#data = bt.feeds.YahooFinanceData(dataname='036570.KS',  fromdate=datetime(2017, 1, 1), todate=datetime(2019, 12, 1))
data = bt.feeds.PandasData(dataname=yf.download('036570.KS', '2017-01-01', '2019-12-01', auto_adjust=True))

IndexError: GridSpec slice would result in no space allocated for subplot 위 에러는 저도 처음 보는 에러인데, 검색을 해봐도 딱히 도움이 될 만한 내용은 없었습니다. anaconda를 제거하시고 backtrader와 matplotlib을 새로 설치해 보심이 어떨까 싶습니다.

babihong commented 2 years ago

작가님,

빠른 답변 감사합니다.

제가 다른 계시판의 글보고 yahoo finance가 아닌 아래 DB에서 가져오는 방식으로 알려주신 것으로 한 것을 말씀 못 드렸네요. 다른 계시판에 yfinance에서 에러 날 경우 코드 변경하는 법이 있던데 그게 좀 어려워 보이는 것 같아서 db에서 가져오는 코드로 작성 해봤을 때 에러 난 것을 문의 드렸구요. Anaconda는 제가 다른 코딩 사용하는 것이 있어서 제거하면 어떻게 될 지 몰라서 조심스럽고 yfinance 로 가져오는 코드로 다시 시도 해보도록 하겠습니다.


backtrader에서 pandas의 DataFrame 형태로 데이터를 입력(feed)하기 위해서는 아래 코드처럼 PandasData라는 클래스를 사용해야 합니다.

mk = Analyzer.MarketDB() df = mk.get_daily_price('036570', '2017-01-01', '2019-12-01') df.date = pd.to_datetime(df.date) data = bt.feeds.PandasData(dataname=df, datetime='date') cerebro.adddata(data)