import pandas as pd from stockpredictor.analysis.Common import Common import plotly.graph_objs as go from plotly import tools, subplots import plotly.io as po class BolingerBand: common = None def __init__(self): self.common = Common() return def apply(self, df, n=10, m=6, t=6): # 입력받은 값이 dataframe이라는 것을 정의해줌 df = pd.DataFrame(df) max20 = df["close"].rolling(window=20).mean() stddev = df["close"].rolling(window=20).std() upper = max20 + (stddev * 2) # 상단 볼리저 밴드 lower = max20 - (stddev * 2) # 하단 볼리저 밴드 middle = (upper + lower ) / 2 # dataframe에 컬럼 추가 #df = df.assign(fast_k=fast_k, slow_k=slow_k, slow_d=slow_d).dropna() df = df.assign(upper=upper, middle=middle, lower=lower) return df def analyze(self, stock): df = pd.DataFrame() df = df.from_dict(stock['PRICE']) df = self.apply(df) for i in range(len(df.upper)): stock['PRICE'][i]['upper'] = df.upper.values[i] stock['PRICE'][i]['middle'] = df.middle.values[i] stock['PRICE'][i]['lower'] = df.lower.values[i] # 0: 중립, 1: 매수, -1: 매도 stock['PRICE'][i]['bolingerband_buy'] = 0 if i > 0: stock['PRICE'][i]['bolingerband_buy'] = self.common.getBolingerBandScore(stock['PRICE'], i) results = [] for day in stock['PRICE']: results.append({'DATE': day['DATE'], 'upper': day['upper'], 'middle': day['middle'], 'lower': day['lower'], 'bolingerband_buy': day['bolingerband_buy']}) return results