add more strategies

This commit is contained in:
jackyu66git
2025-05-09 21:10:45 +08:00
parent 65a85823b9
commit 2440e896ea
17 changed files with 887 additions and 271 deletions
+13 -99
View File
@@ -97,6 +97,14 @@ class ChanLun():
state_list = []
if len(klc_list) > 0:
klc_index = 0
# 添加趋势强度判断
dataframe['trend_strength'] = abs(dataframe['close'].pct_change(20))
# 添加波动率判断
dataframe['volatility'] = dataframe['close'].pct_change().rolling(window=20).std()
# 添加成交量趋势
dataframe['volume_trend'] = dataframe['volume'].rolling(window=20).mean()
for index in range(0, len(dataframe)):
if klc_index == len(klc_list):
klc_index = len(klc_list) - 1
@@ -1214,105 +1222,9 @@ class ChanLun():
klc.set_end_klu(klu)
return klc_list
def get_bsp_list1(self, big_df):
big_bi_list = self.get_bi_list(big_df)
big_seg_list = self.get_seg_list(big_bi_list)
big_zs_list = self.get_zs_list(big_bi_list, big_seg_list)
big_bi_macd_div_list = self.get_bi_macd_div_list(big_bi_list, big_df)
big_seg_macd_div_list = self.get_seg_macd_div_list(big_seg_list, big_df)
big_bi_macd_hist_list = self.get_bi_macd_hist_list(big_bi_list, big_df)
big_seg_macd_hist_list = self.get_seg_macd_hist_list(big_seg_list, big_df)
for index in range(0, len(big_seg_list)):
big_seg = big_seg_list[index]
if big_seg.end_bi:
if big_seg.dir == Chan_SEG_DIR.UP:
if big_seg.end_bi.index - big_seg.start_bi.index > 1:
max_high = big_seg.start_bi.high
for bi_index in range(big_seg.start_bi.index + 2, big_seg.end_bi.index + 1):
bi = big_bi_list[bi_index]
#print("MACD DIV: ", big_bi_macd_hist_list[index]/big_bi_macd_hist_list[index - 2])
if bi.is_sure and bi.dir == Chan_BI_DIR.UP:
if bi.high > max_high:
max_high = bi.high
if big_bi_macd_hist_list[bi_index - 2] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 2]
if bi_macd_div < 0.01 and len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
if len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
bi_macd_div = 0.0
macd_index = bi.end_klc.end_klu.index
if bi_macd_div < 0.8 and bi_macd_div > 0.01 and big_df['macd'][macd_index] > 0 and big_df['macdsignal'][macd_index] > 0:
print("UP SEG Possible BSP:", bi.start_klc.end_time, bi_macd_div)
else:
if big_seg.end_bi.index - big_seg.start_bi.index > 1:
max_low = big_seg.start_bi.low
for bi_index in range(big_seg.start_bi.index + 2, big_seg.end_bi.index + 1):
bi = big_bi_list[bi_index]
if bi.is_sure and bi.dir == Chan_BI_DIR.DOWN:
#print("DOWN: ", max_low, bi.low)
if bi.low < max_low:
max_low = bi.low
if big_bi_macd_hist_list[bi_index - 2] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 2]
if bi_macd_div < 0.01 and len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
if len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
bi_macd_div = 0.0
macd_index = bi.end_klc.end_klu.index
if bi_macd_div < 0.8 and bi_macd_div > 0.01 and big_df['macd'][macd_index] < 0 and big_df['macdsignal'][macd_index] < 0:
print("DOWN SEG Possible BSP:", bi.start_klc.end_time, bi_macd_div)
else:
print("Not completed segment.", len(big_bi_list) - big_seg.start_bi.index, big_seg.dir)
if big_seg.dir == Chan_SEG_DIR.UP:
if len(big_bi_list) - big_seg.start_bi.index > 1:
max_high = big_seg.start_bi.high
for bi_index in range(big_seg.start_bi.index + 2, len(big_bi_list)):
bi = big_bi_list[bi_index]
#print("MACD DIV: ", big_bi_macd_hist_list[index]/big_bi_macd_hist_list[index - 2])
if bi.is_sure and bi.dir == Chan_BI_DIR.UP:
if bi.high > max_high:
max_high = bi.high
if big_bi_macd_hist_list[bi_index - 2] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 2]
if bi_macd_div < 0.01 and len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
if len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
bi_macd_div = 0.0
macd_index = len(big_df) - 1
if bi_macd_div < 0.8 and bi_macd_div > 0.01 and big_df['macd'][macd_index] > 0 and big_df['macdsignal'][macd_index] > 0:
print("UP SEG Possible BSP:", bi.start_klc.end_time, bi_macd_div)
else:
if len(big_bi_list) - big_seg.start_bi.index > 1:
max_low = big_seg.start_bi.low
for bi_index in range(big_seg.start_bi.index + 2, len(big_bi_list)):
bi = big_bi_list[bi_index]
#print("MACD DIV: ", big_bi_macd_hist_list[index]/big_bi_macd_hist_list[index - 2])
if bi.is_sure and bi.dir == Chan_BI_DIR.DOWN:
if bi.low < max_low:
max_low = bi.low
if big_bi_macd_hist_list[bi_index - 2] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 2]
if bi_macd_div < 0.01 and len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
if len(big_bi_list) - big_seg.start_bi.index > 4 and big_bi_macd_hist_list[bi_index - 4] > 0.0:
bi_macd_div = big_bi_macd_hist_list[bi_index]/big_bi_macd_hist_list[bi_index - 4]
else:
bi_macd_div = 0.0
macd_index = len(big_df) - 1
if bi_macd_div < 0.8 and bi_macd_div > 0.01 and big_df['macd'][macd_index] < 0 and big_df['macdsignal'][macd_index] < 0:
print("DOWN SEG Possible BSP:", bi.start_klc.end_time, bi_macd_div)
# ================================================
# 计算BSP列表
# ================================================
def get_bsp_list(self, big_df):
big_bi_list = self.get_bi_list(big_df)
big_seg_list = self.get_seg_list(big_bi_list)
@@ -1501,6 +1413,8 @@ class ChanLun():
print(bsp.bi.end_klc.end_time, bsp.sure_time, bsp.dir, bsp.seg.dir, bsp.bi.macd_div)
return bi_bsp_list
# ================================================
# 第三类买卖点
def find_third_bsp(self, zs_list):
bsp_list = []
zs_count = 0