添加背离计算

This commit is contained in:
jackyu66git
2025-09-02 01:14:09 +08:00
parent 684c035eff
commit 5c0ad516a3
7 changed files with 199 additions and 117 deletions
+66 -39
View File
@@ -1,7 +1,8 @@
from ChanEnum import Chan_MACDHISTSET_DIR
from ChanEnum import Chan_MACDHISTSET_DIR, Chan_MACDUNITTF_DIV
class ChanMACDHistSet():
def __init__(self, start_time, start_klu, pre_histset, dir):
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 = []
@@ -10,42 +11,80 @@ class ChanMACDHistSet():
self.next = None
self.pre = pre_histset
self.peak_klu = None
self.div_klu = None
self.second_peak_klu = None
self.area = start_klu.macdhist
self.unittf_div = False
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)
if self.histset_dir == Chan_MACDHISTSET_DIR.ABOVE:
if self.peak_klu:
if klu.macdhist > self.peak_klu.macdhist:
self.peak_klu = klu
if klu.macdhist > self.klu_list[-1].macdhist and klu.macdhist < self.peak_klu.macdhist:
self.div_klu = klu
else:
if len(self.klu_list) > 0:
pre_klu = self.klu_list[-1]
if pre_klu.macdhist < klu.macdhist:
self.peak_klu = klu
else:
if self.peak_klu:
if klu.macdhist < self.peak_klu.macdhist:
self.peak_klu = klu
if klu.macdhist < self.klu_list[-1].macdhist and klu.macdhist > self.peak_klu.macdhist:
self.div_klu = klu
else:
if len(self.klu_list) > 0:
pre_klu = self.klu_list[-1]
if pre_klu.macdhist > klu.macdhist:
self.peak_klu = klu
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)
@@ -53,16 +92,4 @@ class ChanMACDHistSet():
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)
"""
def find_peak_from(self, from_klu):
peak_klu = None
if from_klu in self.klu_list:
for i in range(from_klu.index + 1, len(self.klu_list)):
klu = self.klu_list[i]
if peak_klu:
if abs(peak_klu.macdhist) < abs(klu.macdhist):
peak_klu = klu
else:
if abs(self.klu_list[i-1].macdhist) < abs(klu.macdhist):
peak_klu = klu
return peak_klu
"""