init
This commit is contained in:
54
stockpredictor/analysis/BolingerBand.py
Normal file
54
stockpredictor/analysis/BolingerBand.py
Normal file
@@ -0,0 +1,54 @@
|
||||
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
|
||||
Reference in New Issue
Block a user