import ChanKLC from ChanEnum import Chan_BI_DIR class ChanBI(): def __init__(self, klc: ChanKLC, index, ddir=Chan_BI_DIR.UP): self.start_klc = klc self.end_klc = None self.next = None self.pre = None self.dir = ddir self.index = index self.is_sure = False self.high = klc.high self.low = klc.low self.sure_time = None self.klc_list = [] self.klc_list.append(klc) self.end_time = None self.start_time = klc.start_time self.macd_hist = 0 self.macd_div = 0 def set_macdhist(self, macd_hist): self.macd_hist = macd_hist def set_macd_div(self, macd_div): self.macd_div = macd_div def cal_macd_div(self): self.macd_div = 0.0 if self.pre and self.pre.pre: if self.pre.pre.macd_hist == 0: self.macd_div = 0.0 else: self.macd_div = self.macd_hist / self.pre.pre.macd_hist def cal_macdhist(self): self.macd_hist = 0 for klc in self.klc_list: for klu in klc.klus: if self.dir == Chan_BI_DIR.UP and klu.macdhist > 0: self.macd_hist += klu.macdhist if self.dir == Chan_BI_DIR.DOWN and klu.macdhist < 0: self.macd_hist -= klu.macdhist def check_overlap(self): if self.next and self.next.next: if self.dir == Chan_BI_DIR.UP: return self.high > self.next.low and self.high < self.next.next.high else: return self.high > self.next.high and self.low > self.next.next.low else: return False def set_end_klc(self, klc, sure_klc): if self.dir == Chan_BI_DIR.UP and klc.high > self.high: self.high = klc.high if self.dir == Chan_BI_DIR.DOWN and klc.low < self.low: self.low = klc.low self.end_klc = klc self.set_is_sure(True, sure_klc.end_time) self.end_time = klc.end_time #print(self.start_time, klc.start_time, klc.fx, "This bi is ended") def set_is_sure(self, is_sure, time): self.is_sure = is_sure self.sure_time = time def set_start_klc(self, klc, ddir): self.start_klc = klc self.klc_list = [] self.klc_list.append(klc) self.high = klc.high self.low = klc.low self.dir = ddir def set_pre(self, bi): self.pre = bi def set_next(self, bi): self.next = bi def add_klc(self, klc): added = False if len(self.klc_list) > 0: for index in range(0, len(self.klc_list)): if self.klc_list[index].index == klc.index: added = True break if not added: self.klc_list.append(klc) self.cal_macdhist() self.cal_macd_div() def append_klc_list(self, klc_list): self.klc_list.append(klc_list) def update_bi(self, klc): self.end_klc = None if self.dir == Chan_BI_DIR.UP and klc.high > self.high: self.high = klc.high if self.dir == Chan_BI_DIR.DOWN and klc.low < self.low: self.low = klc.low self.is_sure = False self.sure_time = None #print(self.start_time, klc.start_time, klc.fx, "This bi is extended")