from ChanEnum import Chan_MACDHISTSET_DIR, Chan_MACDUNITTF_DIV class ChanMACDHistSet(): def __init__(self, index, start_time, start_klu, pre_histset, dir): self.index = index self.start_time = start_time self.end_time = None self.klu_list = [] self.klu_list.append(start_klu) self.histset_dir = dir self.next = None self.pre = pre_histset self.peak_klu = None self.area = start_klu.macdhist self.unittf_div = Chan_MACDUNITTF_DIV.UNDIV self.middle_klu = None self.div_count = 0 self.last_klu = start_klu self.start_klu = start_klu self.peak_div_list = [] self.middle_area = 0 def set_next(self, next_histset): self.next = next_histset def set_pre(self, pre_histset): self.pre = pre_histset def set_middle_klu(self, middle_klu): #self.middle_klu = middle_klu #self.middle_area = abs(middle_klu.macdhist) self.middle_klu = None def set_unittf_div(self, unittf_div): self.unittf_div = unittf_div def add_klu(self, klu): klu.set_histset(self) self.klu_list.append(klu) self.area += abs(klu.macdhist) if self.middle_klu: self.middle_area += abs(klu.macdhist) if self.middle_klu and self.middle_klu.index + 1 == klu.index: self.low_klu = None self.peak_klu = None self.div_count = 0 self.peak_div_list = [] else: if self.last_klu: self.cal_macdhist_klu(klu) self.last_klu = klu def cal_macdhist_klu(self, klu): if self.middle_klu: if klu.index >= self.middle_klu.index + 2: if klu.pre.pre: if abs(klu.pre.macdhist) > abs(klu.pre.pre.macdhist) and abs(klu.pre.macdhist) > abs(klu.macdhist): if self.peak_klu: if abs(klu.pre.macdhist) > abs(self.peak_klu.macdhist): self.peak_klu = klu.pre self.div_count = 0 self.peak_div_list = [] else: self.peak_div_list.append(klu.pre) self.div_count += 1 else: self.peak_klu = klu.pre else: if len(self.klu_list) >= 3: if klu.pre.pre: if abs(klu.pre.macdhist) > abs(klu.pre.pre.macdhist) and abs(klu.pre.macdhist) > abs(klu.macdhist): if self.peak_klu: if abs(klu.pre.macdhist) > abs(self.peak_klu.macdhist): self.peak_klu = klu.pre self.div_count = 0 self.peak_div_list = [] else: self.peak_div_list.append(klu.pre) self.div_count += 1 else: self.peak_klu = klu.pre def set_end_klu(self, end_klu): self.end_klu = end_klu self.end_time = end_klu.time if len(self.peak_div_list) > 0: klu = self.peak_div_list[-1] if klu.macd * klu.macdhist > 0: klu.continue_div = True if self.start_klu.index == end_klu.index: self.peak_klu = self.start_klu if self.start_klu.index + 1 == end_klu.index: if abs(self.start_klu.macdhist) > abs(end_klu.macdhist): self.peak_klu = self.start_klu else: self.peak_klu = end_klu if self.start_klu.index + 2 == end_klu.index: peak = self.klu_list[0] for klu in self.klu_list: if abs(klu.macdhist) > abs(peak.macdhist): peak = klu self.peak_klu = peak peak_str = "" for peak_div in self.peak_div_list: peak_str += f"{peak_div.time}, " #if self.peak_klu and len(self.peak_div_list) > 0: #print("Continue Div: ",self.start_time, "Peak:", self.peak_klu.time, "Div: ", peak_str, self.histset_dir, self.div_count)