def cal_dmi(self,data, n=14,n_ADX=14):
    i = 0
    UpI = [0]
    DoI = [0]
    data["UpI"]=0
    data["DoI"]=0
    while i + 1 <= data.index[-1] :
        UpMove = data.loc[i + 1, "high"] - data.loc[i, "high"]
        DoMove = data.loc[i, "low"] - data.loc[i+1, "low"]
        if UpMove > DoMove and UpMove > 0 :
            UpD = UpMove
        else :
            UpD = 0
        data["UpI"].iloc[i] = UpD
        # UpI.append(UpD)
        if DoMove > UpMove and DoMove > 0 :
            DoD = DoMove
        else :
            DoD = 0
        # DoI.append(DoD)
        data["DoI"].iloc[i] = DoD
        i = i + 1
    i = 0
    TR_l = [0]
    data["TR_l"]=0
    while i < data.index[-1]:
        TR = max(data.loc[i + 1, 'high'], data.loc[i, 'y']) - min(data.loc[i + 1, 'low'], data.loc[i, 'y'])
        # TR_l.append(TR)
        data["TR_l"].iloc[i]=TR
        i = i + 1
    TR_s = pd.Series(TR_l)
    # ATR = pd.Series(TR_s.ewm(span=n, min_periods=1).mean())
    ATR = pd.Series(data["TR_l"].ewm(span=n, min_periods=1).mean())
    # UpI = pd.Series(UpI)
    # DoI = pd.Series(DoI)
    # PosDI = pd.Series(UpI.ewm(span=n, min_periods=1).mean() / ATR)
    # NegDI = pd.Series(DoI.ewm(span=n, min_periods=1).mean() / ATR)
    PosDI = pd.Series(data["UpI"].ewm(span=n, min_periods=1).mean() / ATR)
    NegDI = pd.Series(data["DoI"].ewm(span=n, min_periods=1).mean() / ATR)
    ADX = pd.Series((abs(PosDI - NegDI) / (PosDI + NegDI)).ewm(span=n_ADX, min_periods=1).mean(), name='ADX_' + str(n) + '_' + str(n_ADX))
    data["DIMinus"] =round(NegDI*100,2)
    data["DIPlus"] = round(PosDI*100,2)
    data["ADX"] =round(ADX*100,2)
######실시간용과 전체용
def 계산DMI(self,data, n=14,n_ADX=14):
    data["UpI"]=0
    data["DoI"]=0
    data["TR_l"]=0
    # first_index = 803
    # print("111:[%s] 222:[%s]"%(data.index[-1],len(data)-1))
    # i = first_index
    i=0
    while i + 1 <= len(data)-1:
        # UpMove = data.loc[i+1 , "high"] - data.loc[i, "high"]
        # DoMove = data.loc[i, "low"] - data.loc[i+1, "low"]
        # print("i:[%s][%s]"%(i,data["ds"].iloc[i]))
        UpMove = data["high"].iloc[i + 1] - data["high"].iloc[i]
        DoMove = data["low"].iloc[i] - data["low"].iloc[i + 1]
        if UpMove > DoMove and UpMove > 0 :
            UpD = UpMove
        else :
            UpD = 0
        data["UpI"].iloc[i+1] = UpD
        if DoMove > UpMove and DoMove > 0 :
            DoD = DoMove
        else :
            DoD = 0
        data["DoI"].iloc[i+1] = DoD
        i = i + 1
    i = 0
    while i < len(data)-1:
        TR = max(data["high"].iloc[i + 1], data["y"].iloc[i]) - min(data["low"].iloc[i + 1], data["y"].iloc[i])
        data["TR_l"].iloc[i+1]=TR
        i = i + 1
    ATR = pd.Series(data["TR_l"].ewm(span=n, min_periods=1).mean())
    PosDI = pd.Series(data["UpI"].ewm(span=n, min_periods=1).mean() / ATR)
    NegDI = pd.Series(data["DoI"].ewm(span=n, min_periods=1).mean() / ATR)
    ADX = pd.Series((abs(PosDI - NegDI) / (PosDI + NegDI)).ewm(span=n_ADX, min_periods=1).mean(), name='ADX_' + str(n) + '_' + str(n_ADX))
    data["DIMinus"] =round(NegDI*100,2)
    data["DIPlus"] = round(PosDI*100,2)
    data["ADX"] =round(ADX*100,2)
def 실시간dmi(self,code,n=14,n_ADX=14):
    i = len(self.실시간차트용데이터[code])-5
    while i + 1 <= len(self.실시간차트용데이터[code]) - 1:
        UpMove = self.실시간차트용데이터[code]["high"].iloc[i + 1] - self.실시간차트용데이터[code]["high"].iloc[i]
        DoMove = self.실시간차트용데이터[code]["low"].iloc[i] - self.실시간차트용데이터[code]["low"].iloc[i + 1]
        if UpMove > DoMove and UpMove > 0:
            UpD = UpMove
        else:
            UpD = 0
        # self.실시간차트용데이터[code]["UpI"].iloc[i + 1] = UpD
        if DoMove > UpMove and DoMove > 0:
            DoD = DoMove
        else:
            DoD = 0
        # self.실시간차트용데이터[code]["DoI"].iloc[i + 1] = DoD
        ##마지막값만 변경
        if i+1 == len(self.실시간차트용데이터[code]) - 1:
            print("여기안타나??? [%s %s ]"%(self.실시간차트용데이터[code]["ds"].iloc[i+1],i))
            print("UpD:[%s]"%UpD)
            print("Dod:[%s]"%DoD)
            print("UpMove DoMove:[%s,%s]"%(UpMove,DoMove))
            self.실시간차트용데이터[code]["UpI"].iloc[i+1] = UpD
            self.실시간차트용데이터[code]["DoI"].iloc[i+1] = DoD
        i = i + 1
    i = len(self.실시간차트용데이터[code])-5
    while i < len(self.실시간차트용데이터[code]) - 1:
        TR = max(self.실시간차트용데이터[code]["high"].iloc[i + 1], self.실시간차트용데이터[code]["y"].iloc[i]) - min(self.실시간차트용데이터[code]["low"].iloc[i + 1], self.실시간차트용데이터[code]["y"].iloc[i])
        if i==len(self.실시간차트용데이터[code])-2:
            self.실시간차트용데이터[code]["TR_l"].iloc[i+1] = TR
        i = i + 1
    ATR = pd.Series(self.실시간차트용데이터[code]["TR_l"].ewm(span=n, min_periods=1).mean())
    PosDI = pd.Series(self.실시간차트용데이터[code]["UpI"].ewm(span=n, min_periods=1).mean() / ATR)
    NegDI = pd.Series(self.실시간차트용데이터[code]["DoI"].ewm(span=n, min_periods=1).mean() / ATR)
    print("NegDI%s"%NegDI.tail(5))
    print()
    ADX = pd.Series((abs(PosDI - NegDI) / (PosDI + NegDI)).ewm(span=n_ADX, min_periods=1).mean(),
                    name='ADX_' + str(n) + '_' + str(n_ADX))
    self.실시간차트용데이터[code]["DIMinus"].iloc[len(self.실시간차트용데이터[code]) - 1] = round(NegDI.iloc[len(NegDI) - 1] * 100, 2)
    self.실시간차트용데이터[code]["DIPlus"].iloc[len(self.실시간차트용데이터[code]) - 1] = round(PosDI.iloc[len(PosDI) - 1] * 100, 2)
    self.실시간차트용데이터[code]["ADX"].iloc[len(self.실시간차트용데이터[code]) - 1] = round(ADX.iloc[len(ADX) - 1] * 100, 2)