基本上完成了高低点的识别

This commit is contained in:
jackyu66git
2025-09-20 02:49:54 +08:00
parent 4766e38125
commit 272e2522ea
4 changed files with 38 additions and 70 deletions
+27 -64
View File
@@ -20,6 +20,7 @@ import numpy as np
from ChanMACD import ChanMACD
class ChanLun():
time1 = 1
time3 = 3
time5 = 5
time15 = 15
@@ -38,79 +39,40 @@ class ChanLun():
df = resample_to_interval(dataframe, ticker_indicator*self.times[timeframe])
all_data[timeframe] = df
return all_data
def print_zs(self, zs_list):
for zs in zs_list:
if zs.end_klc:
print(zs.start_klc.start_time, zs.end_klc.end_time, zs.sure_time, zs.zg, zs.zd, zs.bi_out_count)
else:
print(zs.start_klc.start_time, zs.zg, zs.zd, zs.bi_out_count)
def print_seg(self, seg_list):
for seg in seg_list:
if seg.is_sure:
print(seg.start_bi.start_time, seg.end_bi.end_time, seg.dir, seg.sure_time, "SEG")
else:
print(seg.start_bi.start_time, seg.dir, "SEG")
def print_bsp_list(self, bsp_list):
for bsp in bsp_list:
if bsp.is_sure:
print(bsp.klc.start_time, bsp.type, bsp.dir, bsp.sure_time, bsp.zs_count, len(bsp.zs.bi_out_list), bsp.dir, bsp.seg.dir, bsp.bi.dir)
else:
print(bsp.klc.start_time, bsp.type, bsp.dir, bsp.zs_count, len(bsp.zs.bi_out_list), bsp.dir, bsp.seg.dir, bsp.bi.dir)
def print_bi(self, bi_list):
for bi in bi_list:
if bi.end_klc:
if bi.sure_time:
print(bi.start_klc.end_time, bi.end_klc.end_time, bi.dir)
else:
print(bi.start_klc.end_time, bi.end_klc.end_time, bi.dir)
else:
print(bi.start_klc.end_time, bi.dir, bi.is_sure)
def calculate_bsp(self, dataframe, ticker_indicator):
klu1, klc1, bi1 = self.get_list_by_time(dataframe, self.time1)
klu3, klc3, bi3 = self.get_list_by_time(dataframe, self.time3)
klu5, klc5, bi5 = self.get_list_by_time(dataframe, self.time5)
klu15, klc15, bi15 = self.get_list_by_time(dataframe, self.time15)
return dataframe
def get_list_by_time(self, dataframe, ticker_indicator, time):
df = None
if time > 1:
df = resample_to_interval(dataframe, ticker_indicator)
else:
df = dataframe
klu_list = self.get_klu_list(df)
klc_list = self.get_klc_list(klc_list)
bi_list = self.cal_bi_list(klc_list)
return klu_list, klc_list, bi_list
def check_fx(self, klc):
if klc.pre and klc.next:
if klc.high > klc.pre.high and klc.high > klc.next.high:
if klc.pre.pre and klc.high > klc.pre.pre.high and klc.next.next and klc.high > klc.next.next.high:
klc.set_fx(Chan_FX_TYPE.TOP)
if klc.pre.pre.pre and klc.high > klc.pre.pre.pre.high and klc.next.next.next and klc.high > klc.next.next.next.high:
klc.set_fx(Chan_FX_TYPE.TOP)
#print(klc.start_time, klc.end_time,klc.next.start_time, klc.next.end_time,klc.fx, "TOP")
return Chan_FX_TYPE.TOP
if klc.macd > 0 and klc.macd > klc.signal and klc.signal > klc.macdhist:
klc.set_fx(Chan_FX_TYPE.TOP)
#print(klc.start_time, klc.end_time,klc.next.start_time, klc.next.end_time,klc.fx, "TOP")
return Chan_FX_TYPE.TOP
elif klc.low < klc.pre.low and klc.low < klc.next.low:
if klc.pre.pre and klc.low < klc.pre.pre.low and klc.next.next and klc.low < klc.next.next.low:
klc.set_fx(Chan_FX_TYPE.BOTTOM)
if klc.pre.pre.pre and klc.low < klc.pre.pre.pre.low and klc.next.next.next and klc.low < klc.next.next.next.low:
klc.set_fx(Chan_FX_TYPE.BOTTOM)
#print(klc.start_time, klc.end_time,klc.next.start_time, klc.next.end_time,klc.fx, "BOTTOM")
return Chan_FX_TYPE.BOTTOM
if klc.macd < 0 and klc.macd < klc.signal and klc.signal < klc.macdhist:
klc.set_fx(Chan_FX_TYPE.BOTTOM)
#print(klc.start_time, klc.end_time,klc.next.start_time, klc.next.end_time,klc.fx, "BOTTOM")
return Chan_FX_TYPE.BOTTOM
return Chan_FX_TYPE.UNKNOWN
def plot_dataframe(self, dataframe):
klc_list = self.get_klc_list(dataframe)
bi_list= self.cal_bi_list(klc_list)
def get_klu_state_list(self, dataframe):
dataframe3 = resample_to_interval(dataframe, self.time3)
dataframe5 = resample_to_interval(dataframe, self.time5)
dataframe15 = resample_to_interval(dataframe, self.time15)
dataframe30 = resample_to_interval(dataframe, self.time30)
dataframe60 = resample_to_interval(dataframe, self.time60)
dataframe2h = resample_to_interval(dataframe, self.time2h)
dataframe6h = resample_to_interval(dataframe, self.time6h)
dataframe8h = resample_to_interval(dataframe, self.time8h)
dataframe12h = resample_to_interval(dataframe, self.time12h)
dataframe4h = resample_to_interval(dataframe, self.time4h)
dataframe1d = resample_to_interval(dataframe, self.time1d)
dataframe = self.add_indicators(dataframe)
dataframe3 = self.add_indicators(dataframe3)
dataframe5 = self.add_indicators(dataframe5)
dataframe15 = self.add_indicators(dataframe15)
dataframe30 = self.add_indicators(dataframe30)
dataframe60 = self.add_indicators(dataframe60)
dataframe2h = self.add_indicators(dataframe2h)
dataframe6h = self.add_indicators(dataframe6h)
dataframe8h = self.add_indicators(dataframe8h)
dataframe12h = self.add_indicators(dataframe12h)
dataframe4h = self.add_indicators(dataframe4h)
dataframe1d = self.add_indicators(dataframe1d)
return state_list
def add_indicators(self, df):
fast = 12
slow = 26
@@ -660,6 +622,7 @@ class ChanLun():
# Do nothing
if fx == Chan_FX_TYPE.UNKNOWN:
continue
if len(bi_list) > 0 and klc.end_klu:
last_bi = bi_list[-1]
#print(klc.start_time, last_bi.start_time, last_bi.end_time, last_bi.dir, last_bi.high, last_bi.low, last_bottom.end_time, "last bi")