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.second_peak_klu = None self.area = start_klu.macdhist self.unittf_div = Chan_MACDUNITTF_DIV.UNDIV self.middle_klu = None self.middle_peak = None self.second_middle_peak = None self.div_count = 0 self.last_klu = start_klu self.low_klu = None self.start_klu = start_klu def set_next(self, next_histset): self.next = next_histset def set_middle_klu(self, middle_klu): self.middle_klu = middle_klu 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 += 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 else: if self.last_klu: self.cal_peak_klu(klu) self.last_klu = klu def cal_peak_klu(self, klu): if self.middle_klu: if self.low_klu is None and abs(klu.macdhist) > abs(self.last_klu.macdhist): self.low_klu = self.last_klu return else: if self.peak_klu is None and self.low_klu and abs(klu.macdhist) < abs(self.last_klu.macdhist): self.peak_klu = self.last_klu self.low_klu = None elif self.low_klu and self.peak_klu: if abs(self.last_klu.macdhist) > abs(self.peak_klu.macdhist): self.peak_klu = self.last_klu self.low_klu = None elif abs(self.last_klu.macdhist) > abs(klu.macdhist): self.second_peak_klu = self.last_klu self.div_count += 1 self.low_klu = None else: if self.peak_klu is None and abs(klu.macdhist) < abs(self.last_klu.macdhist): self.peak_klu = self.last_klu return else: if self.low_klu is None and self.peak_klu and abs(klu.macdhist) > abs(self.last_klu.macdhist): self.low_klu = self.last_klu return else: if self.peak_klu and self.low_klu: if abs(self.last_klu.macdhist) > abs(self.peak_klu.macdhist): self.peak_klu = self.last_klu self.low_klu = None elif abs(self.last_klu.macdhist) > abs(klu.macdhist): self.second_peak_klu = self.last_klu self.div_count += 1 self.low_klu = None def set_end_klu(self, end_klu): self.end_klu = end_klu self.end_time = end_klu.time 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.div_count > 0: #print("Continue:", self.index, self.start_time, self.second_peak_klu.time, self.div_count) """ if self.div_klu: print(self.start_time, self.peak_klu.time, self.div_klu.time, self.klu_list[-1].time, len(self.klu_list), self.histset_dir) elif self.peak_klu: print(self.start_time, "Peak:", self.peak_klu.time, self.klu_list[-1].time, len(self.klu_list), self.histset_dir) else: print(self.start_time, "None", self.klu_list[-1].time, len(self.klu_list), self.histset_dir) """