修改了bsp state,继续测试

This commit is contained in:
jackyu66git
2026-05-20 00:49:53 +08:00
parent 91148a648a
commit 9b876c45ed
7 changed files with 430 additions and 161 deletions
+7 -40
View File
@@ -157,41 +157,16 @@ class TF_DF():
klu_state_list.append("00")
print(klu_state_list[:20])
return klu_state_list
def get_bsp_signal_data(self, dataframe):
def get_bsp_state(self, dataframe):
klu_list = self.get_klu_list(dataframe)
klc_list = self.get_klc_list(klu_list)
bi_list = self.cal_bi_list(klc_list)
bi_zs_list = self.cal_bi_zs_list_pure(bi_list)
seg_list = self.get_seg_list(bi_list)
bi_zs_list = self.cal_bi_zs(seg_list)
bsp_list = self.find_all_bsp(bi_list, bi_zs_list)
bsp_by_bi_type = {}
for bsp in bsp_list:
if bsp and bsp.bi:
bsp_by_bi_type[(bsp.bi.index, bsp.type)] = bsp
bsp_state_list = [0] * len(dataframe)
bsp_zg_list = [0.0] * len(dataframe)
bsp_zd_list = [0.0] * len(dataframe)
bsp_stop_price_list = [0.0] * len(dataframe)
bsp_risk_ratio_list = [0.0] * len(dataframe)
klc_index = 0
def set_bsp_signal(index, state, bsp):
bsp_state_list[index] = state
if not bsp or not bsp.zs:
return
close = float(dataframe.iloc[index]['close'])
atr = float(dataframe.iloc[index]['atr']) if 'atr' in dataframe.columns and not pd.isna(dataframe.iloc[index]['atr']) else 0.0
atr_ratio = atr / close if close > 0 else 0.0
buffer = atr * 0.1
bsp_zg_list[index] = bsp.zs.zg
bsp_zd_list[index] = bsp.zs.zd
if state == -1:
stop_price = bsp.zs.zg - buffer
risk_ratio = (close - stop_price) / close if close > stop_price else atr_ratio
else:
stop_price = bsp.zs.zd + buffer
risk_ratio = (stop_price - close) / close if close < stop_price else atr_ratio
bsp_stop_price_list[index] = stop_price
bsp_risk_ratio_list[index] = max(0.001, min(float(risk_ratio), 0.02))
for index in range(0, len(dataframe)):
if klc_index == len(klc_list):
klc_index = len(klc_list) - 1
@@ -201,7 +176,7 @@ class TF_DF():
bi = klc.bi.pre
if bi and bi.is_sure and bi.end_klc.bsp_type == Chan_BSP_TYPE.B3:
# 第三类买点
set_bsp_signal(index, -1, bsp_by_bi_type.get((bi.index, Chan_BSP_TYPE.B3)))
bsp_state_list[index] = -1
#print(klc.end_time, "B3")
else:
bsp_state_list[index] = 0
@@ -209,22 +184,14 @@ class TF_DF():
bi = klc.bi.pre
if bi and bi.is_sure and bi.end_klc.bsp_type == Chan_BSP_TYPE.S3:
# 第三类卖点
set_bsp_signal(index, 1, bsp_by_bi_type.get((bi.index, Chan_BSP_TYPE.S3)))
bsp_state_list[index] = 1
#print(klc.end_time, "S3")
else:
bsp_state_list[index] = 0
klc_index += 1
else:
bsp_state_list[index] = 0
return {
'bsp_state': bsp_state_list,
'bsp_zg': bsp_zg_list,
'bsp_zd': bsp_zd_list,
'bsp_stop_price': bsp_stop_price_list,
'bsp_risk_ratio': bsp_risk_ratio_list,
}
def get_bsp_state(self, dataframe):
return self.get_bsp_signal_data(dataframe)['bsp_state']
return bsp_state_list
def get_ema_state(self, dataframe):
klu_list = self.get_klu_list(dataframe)
klc_list = self.get_klc_list(klu_list)