优化反手

This commit is contained in:
27942
2026-02-04 00:29:56 +08:00
parent d1e0361dec
commit 9785c46fec

View File

@@ -254,54 +254,54 @@ class BitmartFuturesTransaction:
logger.info(f"上一根K线实体过小: {prev_entity:.4f},跳过信号检测")
return None
# 当前K线开盘价
current_open = current_kline['open']
# 获取上一根K线的实体上下边
prev_entity_edge = self.get_entity_edge(prev_kline)
prev_entity_upper = prev_entity_edge['upper'] # 实体上边
prev_entity_lower = prev_entity_edge['lower'] # 实体下边
# 计算触发价
long_trigger = current_open + prev_entity / 3 # 做多触发价
short_trigger = current_open - prev_entity / 3 # 做空触发价
# 计算触发价基于上一根K线实体位置
long_trigger = prev_entity_lower + prev_entity / 3 # 做多触发价 = 实体下边 + 实体/3下三分之一处
short_trigger = prev_entity_upper - prev_entity / 3 # 做空触发价 = 实体上边 - 实体/3上三分之一处
logger.info(f"当前价格: {current_price:.2f}, 开盘价: {current_open:.2f}, "
f"上一根实体: {prev_entity:.4f}")
logger.info(f"做多触发价: {long_trigger:.2f}, 做空触发价: {short_trigger:.2f}")
logger.info(f"当前价格: {current_price:.2f}, 上一根实体: {prev_entity:.4f}")
logger.info(f"上一根实体上边: {prev_entity_upper:.2f}, 下边: {prev_entity_lower:.2f}")
logger.info(f"做多触发价(下1/3): {long_trigger:.2f}, 做空触发价(上1/3): {short_trigger:.2f}")
# 无持仓时检查开仓信号
if self.start == 0:
if current_price >= long_trigger:
logger.info(f"触发做多信号!价格 {current_price:.2f} >= 触发价 {long_trigger:.2f}")
logger.info(f"触发做多信号!价格 {current_price:.2f} >= 触发价(下1/3) {long_trigger:.2f}")
return ('long', long_trigger)
elif current_price <= short_trigger:
logger.info(f"触发做空信号!价格 {current_price:.2f} <= 触发价 {short_trigger:.2f}")
logger.info(f"触发做空信号!价格 {current_price:.2f} <= 触发价(上1/3) {short_trigger:.2f}")
return ('short', short_trigger)
# 持仓时检查反手信号
elif self.start == 1: # 持多仓
# 反手条件1: 价格跌到 当前K线开盘价 - 前一根实体/3
# 反手条件1: 价格跌到上一根K线的上三分之一处做空触发价
if current_price <= short_trigger:
logger.info(f"持多反手做空!价格 {current_price:.2f} <= 触发价 {short_trigger:.2f}")
logger.info(f"持多反手做空!价格 {current_price:.2f} <= 触发价(上1/3) {short_trigger:.2f}")
return ('reverse_short', short_trigger)
# 反手条件2: 上一根K线上阴线涨幅>0.01%,当前跌到上一根实体下边
upper_shadow_pct = self.calculate_upper_shadow(prev_kline)
prev_entity_edge = self.get_entity_edge(prev_kline)
if upper_shadow_pct > 0.01 and current_price <= prev_entity_edge['lower']:
if upper_shadow_pct > 0.01 and current_price <= prev_entity_lower:
logger.info(f"持多反手做空!上阴线涨幅 {upper_shadow_pct:.4f}% > 0.01%"
f"价格 {current_price:.2f} <= 实体下边 {prev_entity_edge['lower']:.2f}")
return ('reverse_short', prev_entity_edge['lower'])
f"价格 {current_price:.2f} <= 实体下边 {prev_entity_lower:.2f}")
return ('reverse_short', prev_entity_lower)
elif self.start == -1: # 持空仓
# 反手条件1: 价格涨到 当前K线开盘价 + 前一根实体/3
# 反手条件1: 价格涨到上一根K线的下三分之一处做多触发价
if current_price >= long_trigger:
logger.info(f"持空反手做多!价格 {current_price:.2f} >= 触发价 {long_trigger:.2f}")
logger.info(f"持空反手做多!价格 {current_price:.2f} >= 触发价(下1/3) {long_trigger:.2f}")
return ('reverse_long', long_trigger)
# 反手条件2: 上一根K线下阴线跌幅>0.01%,当前涨到上一根实体上边
lower_shadow_pct = self.calculate_lower_shadow(prev_kline)
prev_entity_edge = self.get_entity_edge(prev_kline)
if lower_shadow_pct > 0.01 and current_price >= prev_entity_edge['upper']:
if lower_shadow_pct > 0.01 and current_price >= prev_entity_upper:
logger.info(f"持空反手做多!下阴线跌幅 {lower_shadow_pct:.4f}% > 0.01%"
f"价格 {current_price:.2f} >= 实体上边 {prev_entity_edge['upper']:.2f}")
return ('reverse_long', prev_entity_edge['upper'])
f"价格 {current_price:.2f} >= 实体上边 {prev_entity_upper:.2f}")
return ('reverse_long', prev_entity_upper)
return None