INVESTAR / StockAnalysisInPython

456 stars 412 forks source link

6.3.1 볼린저 밴드 typeerror 질문입니다 p269 #66

Open iMichaelChu opened 3 years ago

iMichaelChu commented 3 years ago
  1. 이동 평균선, 상단 볼린저, 하단 볼린저를 지정하고 그래프를 그리려 하는데 plt.fill_between(df.index, df['upper'], df['lower'], color='0.9') 이부분에서 TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 와 같은 오류가 발생하는데 어찌 처리해야할지 모르겠습니다.

  2. df = df[19:] 까지 실행해보고 df 출력해보니 빈 데이터 프레임이라고 뜨는데 정상적으로 실행된건지 궁금합니다 이것도 데이터베이스에 데이터가 없어서 생기는 문제인건가요?

코드 전문은 아래와 같습니다.

import matplotlib.pyplot as plt from Investar import Analyzer

6.3.1 볼린저 밴드 구하기

mk = Analyzer.MarketDB() df = mk.get_daily_price('NAVER','2019-01-02') df df['MA20'] = df['close'].rolling(window=20).mean() #20개 종가를 이용해서 평균 출력 df['stddev'] = df['close'].rolling(window=20).std() #표준편차 출력 df['upper'] = df['MA20'] + (df['stddev']2) #상단 볼린저 밴드 df['lower'] = df['MA20'] - (df['stddev']2) # 하단 볼린저 밴드 df = df[19:] #19번째 행까지 NaN이므로 값이 있는 20번째 행부터 사용

plt.figure(figsize=(9,5)) plt.plot(df.index, df['close'], color='#0000ff', label='Close') plt.plot(df.index, df['upper'],'r--',label = 'Upper band') plt.plot(df.index, df['MA20'], 'k--', label = 'Moving average 20') plt.plot(df.index, df['lower'], 'c--',label = 'Lower band')

plt.fill_between(df.index, df['upper'], df['lower'], color='0.9')#영역 칠하기 plt.legend(loc='best') plt.title('NAVER Bollinger Band (20 day, 2std)') plt.show()

INVESTAR commented 3 years ago

df = df[19:]까지 실행한 후 df를 출력했을 때 빈 데이터 프레임이 출력되는 것은 DB에 주식 데이터가 없기 때문에 발생하는 문제입니다. 아래 코드를 실행했을 때 2019-01-02 이후의 네이버 주식 데이터가 출력되는지부터 확인해 보시기 바랍니다.

from Investar import Analyzer
mk = Analyzer.MarketDB()
df = mk.get_daily_price('NAVER','2019-01-02')
print(df)

config.json 파일의 pages_to_fetch 값을 50 정도로 늘린 후 DBUpdaterEx를 재시작 하셔서 DB에 NAVER 주식 데이터를 업데이트 하시면, 1번 문제도 같이 해결될 것으로 보입니다.