Files
Chan/ChanMACDHistSet.py
T
2025-09-10 00:59:13 +08:00

101 lines
4.2 KiB
Python

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)