优化逻辑
This commit is contained in:
5
1111
5
1111
@@ -23,9 +23,10 @@ Abc12345678
|
||||
|
||||
bitmart\框架.py 读取这个代码文件夹
|
||||
|
||||
基础开仓逻辑
|
||||
基于前一根有效 K 线(实体 ≥ 0.1):
|
||||
做多触发价 = 当前 k 线开盘价 + 上一根实体 / 3(收盘价向上 1/3 实体)
|
||||
做空触发价 = 当前 k 线开盘价 - 上一根实体 / 3(收盘价向下 1/3 实体)
|
||||
做多触发价 = 当前 k 线开盘价 + 上一根实体 / 4
|
||||
做空触发价 = 当前 k 线开盘价 - 上一根实体 / 4
|
||||
|
||||
反手信号:
|
||||
持空反手做多:价格涨到 当前k线开仓价 + 前一根实体 / 3
|
||||
|
||||
@@ -292,28 +292,36 @@ class BitmartFuturesTransaction:
|
||||
logger.info(f"触发做空信号!价格 {current_price:.2f} <= 触发价(上1/4) {short_trigger:.2f}")
|
||||
return ('short', short_trigger)
|
||||
|
||||
# ========== 反手逻辑 ==========
|
||||
# ========== 止盈/止损逻辑(四分之一触发价)==========
|
||||
# 计算基于当前K线开盘价的止盈止损触发价
|
||||
current_open = current_kline['open']
|
||||
stop_long_trigger = current_open + prev_entity / 4 # 止盈做多触发价 = 当前开盘价 + 上一根实体/4
|
||||
stop_short_trigger = current_open - prev_entity / 4 # 止损做空触发价 = 当前开盘价 - 上一根实体/4
|
||||
|
||||
logger.info(f"止盈止损触发价: 做多止盈={stop_long_trigger:.2f}, 做空止损={stop_short_trigger:.2f}")
|
||||
|
||||
# 持多仓时检查止损信号(只平仓,不反手)
|
||||
if self.start == 1:
|
||||
if current_price <= stop_short_trigger and not skip_short_by_upper_third:
|
||||
logger.info(f"【止损平仓】持多仓, 价格 {current_price:.2f} <= 止损价 {stop_short_trigger:.2f}")
|
||||
return ('close_long', stop_short_trigger)
|
||||
|
||||
# 持空仓时检查止盈信号(只平仓,不反手)
|
||||
elif self.start == -1:
|
||||
if current_price >= stop_long_trigger and not skip_long_by_lower_third:
|
||||
logger.info(f"【止盈平仓】持空仓, 价格 {current_price:.2f} >= 止盈价 {stop_long_trigger:.2f}")
|
||||
return ('close_short', stop_long_trigger)
|
||||
|
||||
# ========== 反手逻辑(影线条件)==========
|
||||
# 检查当前K线是否已执行过反手(每根K线只执行一次)
|
||||
current_kline_id = current_kline['id']
|
||||
if self.reverse_executed_kline_id == current_kline_id:
|
||||
logger.debug(f"当前K线 {current_kline_id} 已执行过反手,跳过反手检测")
|
||||
return None
|
||||
|
||||
# 计算基于当前K线开盘价的触发价(用于反手)
|
||||
current_open = current_kline['open']
|
||||
reverse_long_trigger = current_open + prev_entity / 4 # 反手做多触发价 = 当前开盘价 + 上一根实体/4
|
||||
reverse_short_trigger = current_open - prev_entity / 4 # 反手做空触发价 = 当前开盘价 - 上一根实体/4
|
||||
|
||||
logger.info(f"反手触发价: 做多={reverse_long_trigger:.2f}, 做空={reverse_short_trigger:.2f}")
|
||||
|
||||
# 持多仓时检查反手做空信号
|
||||
if self.start == 1:
|
||||
# 反手条件1: 四分之一触发价 - 价格跌到 当前开盘价 - 上一根实体/4
|
||||
if current_price <= reverse_short_trigger and not skip_short_by_upper_third:
|
||||
logger.info(f"【四分之一反手做空】价格 {current_price:.2f} <= 触发价 {reverse_short_trigger:.2f}")
|
||||
return ('reverse_short', reverse_short_trigger)
|
||||
|
||||
# 反手条件2: 新逻辑 - 上一根阳线 + 下影线>=0.1% + 当前先涨后跌到上一根最低价
|
||||
# 反手条件: 上一根阳线 + 下影线>=0.1% + 当前先涨后跌到上一根最低价
|
||||
if prev_is_bullish: # 上一根是阳线
|
||||
lower_shadow_pct = self.calculate_lower_shadow(prev_kline)
|
||||
current_went_up_first = current_kline['high'] > current_kline['open']
|
||||
@@ -323,18 +331,13 @@ class BitmartFuturesTransaction:
|
||||
f"当前价格={current_price:.2f}, 上一根最低价={prev_kline['low']:.2f}")
|
||||
|
||||
if lower_shadow_pct >= 0.1 and current_went_up_first and current_price <= prev_kline['low']:
|
||||
logger.info(f"【影线反手做空】上一根阳线, 下影线跌幅 {lower_shadow_pct:.4f}% >= 0.1%, "
|
||||
logger.info(f"【反手做空】上一根阳线, 下影线跌幅 {lower_shadow_pct:.4f}% >= 0.1%, "
|
||||
f"当前K线先涨过, 价格 {current_price:.2f} <= 上一根最低价 {prev_kline['low']:.2f}")
|
||||
return ('reverse_short', prev_kline['low'])
|
||||
|
||||
# 持空仓时检查反手做多信号
|
||||
elif self.start == -1:
|
||||
# 反手条件1: 四分之一触发价 - 价格涨到 当前开盘价 + 上一根实体/4
|
||||
if current_price >= reverse_long_trigger and not skip_long_by_lower_third:
|
||||
logger.info(f"【四分之一反手做多】价格 {current_price:.2f} >= 触发价 {reverse_long_trigger:.2f}")
|
||||
return ('reverse_long', reverse_long_trigger)
|
||||
|
||||
# 反手条件2: 新逻辑 - 上一根阴线 + 上影线>=0.1% + 当前先跌后涨到上一根最高价
|
||||
# 反手条件: 上一根阴线 + 上影线>=0.1% + 当前先跌后涨到上一根最高价
|
||||
if prev_is_bearish: # 上一根是阴线
|
||||
upper_shadow_pct = self.calculate_upper_shadow(prev_kline)
|
||||
current_went_down_first = current_kline['low'] < current_kline['open']
|
||||
@@ -344,7 +347,7 @@ class BitmartFuturesTransaction:
|
||||
f"当前价格={current_price:.2f}, 上一根最高价={prev_kline['high']:.2f}")
|
||||
|
||||
if upper_shadow_pct >= 0.1 and current_went_down_first and current_price >= prev_kline['high']:
|
||||
logger.info(f"【影线反手做多】上一根阴线, 上影线涨幅 {upper_shadow_pct:.4f}% >= 0.1%, "
|
||||
logger.info(f"【反手做多】上一根阴线, 上影线涨幅 {upper_shadow_pct:.4f}% >= 0.1%, "
|
||||
f"当前K线先跌过, 价格 {current_price:.2f} >= 上一根最高价 {prev_kline['high']:.2f}")
|
||||
return ('reverse_long', prev_kline['high'])
|
||||
|
||||
@@ -437,6 +440,36 @@ class BitmartFuturesTransaction:
|
||||
logger.error("开空后持仓验证失败")
|
||||
return False
|
||||
|
||||
elif signal_type == 'close_long':
|
||||
# 止损平多仓(只平仓,不反手)
|
||||
logger.info(f"执行止损平多仓,触发价: {trigger_price:.2f}")
|
||||
self.平仓()
|
||||
time.sleep(3) # 等待订单执行
|
||||
|
||||
# 验证平仓是否成功
|
||||
if self.get_position_status() and self.start == 0:
|
||||
logger.success("止损平多仓成功")
|
||||
time.sleep(20) # 额外等待避免频繁交易
|
||||
return True
|
||||
else:
|
||||
logger.error("止损平多仓后验证失败")
|
||||
return False
|
||||
|
||||
elif signal_type == 'close_short':
|
||||
# 止盈平空仓(只平仓,不反手)
|
||||
logger.info(f"执行止盈平空仓,触发价: {trigger_price:.2f}")
|
||||
self.平仓()
|
||||
time.sleep(3) # 等待订单执行
|
||||
|
||||
# 验证平仓是否成功
|
||||
if self.get_position_status() and self.start == 0:
|
||||
logger.success("止盈平空仓成功")
|
||||
time.sleep(20) # 额外等待避免频繁交易
|
||||
return True
|
||||
else:
|
||||
logger.error("止盈平空仓后验证失败")
|
||||
return False
|
||||
|
||||
elif signal_type == 'reverse_long':
|
||||
# 平空 + 开多(反手做多)- 优化:平仓后立即开仓
|
||||
logger.info(f"执行反手做多,触发价: {trigger_price:.2f}")
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user