优化反手
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user