import pandas as pd from stock.analysis.Common import Common # [청송촌놈] 파생을 알아야 시장이 보인다. 청송이 종목 고르는법! https://www.youtube.com/watch?v=weABtgZDeGg # 6. Pandas와 Plotly를 이용한 MACD 차트 그리기 https://excelsior-cjh.tistory.com/110 # 첫번째. MACD 지표를 이용한 차트분석: https://post.naver.com/viewer/postView.nhn?volumeNo=7435935&memberNo=32471429 # MACD (Moving Average Conver gence Divergence) # 빨간 네모박스권으로 MACD가 MACD-Sign 을 골든크로스하며, 상승하였을때, 주가는 상승추세를 유지하며, MACD가 MACD-Sign(분홍색)을 데드크로스 할때 주가는 하락의 추세를 보이게 됩니다. # 즉, MSCD가 0이상에서 MACD-Sign 위에서 상승하는 그림이어야 class MACD: common = None def __init__(self): self.common = Common() return # macd 0선 위에서 매수를 한다. 0이하는 절대 처다보지 않는다. # 장기 지수평균 (long): 26, 단기 지수평균 (short): 12, 시그널 (t): 9 def apply(self, df, short=5, long=20, t=2): # 입력받은 값이 dataframe이라는 것을 정의해줌 df = pd.DataFrame(df) # MACD 관련 수식 ma_short = df.close.ewm(span=short).mean() # 단기(12) EMA(지수이동평균) ma_long = df.close.ewm(span=long).mean() # 장기(26) EMA macd = ma_short - ma_long # MACD macds = macd.ewm(span=t).mean() # Signal macdo = macd - macds # Oscillator #df = df.assign(macd=macd, macds=macds, macdo=macdo).dropna() df = df.assign(macd=macd, macds=macds, macdo=macdo) return df """ # 기존 stock에 삽입 # macd 0선 위에서 매수를 한다. 0이하는 절대 처다보지 않는다. def analyze(self, stock): df = pd.DataFrame() df = df.from_dict(stock['PRICE']) df = self.apply(df) for i in range(len(df.macd)): stock['PRICE'][i]['macd_buy'] = 0 stock['PRICE'][i]['macd'] = df.macd.values[i] stock['PRICE'][i]['macds'] = df.macds.values[i] stock['PRICE'][i]['macdo'] = df.macdo.values[i] if df.macd.values[i] > 0 and self.common.checkUpward('close', stock['PRICE'][i - 4: i + 1]): stock['PRICE'][i]['macd_buy'] = df.macd.values[i] return """ def analyze(self, stock): df = pd.DataFrame() df = df.from_dict(stock['PRICE']) df = self.apply(df) for i in range(len(df.macd)): stock['PRICE'][i]['macd'] = df.macd.values[i] stock['PRICE'][i]['macds'] = df.macds.values[i] stock['PRICE'][i]['macdo'] = df.macdo.values[i] return