This commit is contained in:
ddrwode
2026-01-30 14:51:51 +08:00
parent dbf76fe385
commit c85f370e32

View File

@@ -10,6 +10,7 @@ BitMart 三分之一回归策略交易(双向触发版)
2. 信号触发条件:
- 当前K线最高价 >= 做多触发价格 → 做多信号
- 当前K线最低价 <= 做空触发价格 → 做空信号
- 方向以当前收盘相对前一根收盘为准:当前收盘在前一根之上偏多(只开多/不开空),之下偏空(只开空/不开多);双触时也按此选方向,避免先探后拉/先拉后砸误开反手。
3. 执行逻辑:
- 做多时遇到做空信号 -> 平多并反手开空
@@ -169,25 +170,37 @@ class BitmartOneThirdStrategy:
# 使用影线部分high/low来判断
c_high = float(curr['high'])
c_low = float(curr['low'])
c_close = float(curr['close'])
p_close = float(prev['close'])
# 检测是否触发
long_triggered = c_high >= long_trigger
short_triggered = c_low <= short_trigger
# 如果两个方向都触发,判断哪个先触发
# 当前价格相对前一根收盘的方向:已在前一根之上偏多,之下偏空
if long_triggered and short_triggered:
# 两个方向都触达时,以当前收盘相对前一根收盘为准,不按“谁先触达”
if c_close > p_close:
return 'long', long_trigger, valid_prev_idx
elif c_close < p_close:
return 'short', short_trigger, valid_prev_idx
c_open = float(curr['open'])
dist_to_long = abs(long_trigger - c_open)
dist_to_short = abs(short_trigger - c_open)
if dist_to_short <= dist_to_long:
return 'short', short_trigger, valid_prev_idx
else:
return 'long', long_trigger, valid_prev_idx
return 'long', long_trigger, valid_prev_idx
if short_triggered:
# 仅触达做空价:若当前收盘已在前一根之上,说明已拉回偏多,不开空
if c_close > p_close:
return None, None, None
return 'short', short_trigger, valid_prev_idx
if long_triggered:
# 仅触达做多价:若当前收盘已在前一根之下,说明已回落偏空,不开多
if c_close < p_close:
return None, None, None
return 'long', long_trigger, valid_prev_idx
return None, None, None
@@ -219,32 +232,45 @@ class BitmartOneThirdStrategy:
# 使用当前K线的实时高低点来判断
c_high = float(curr['high'])
c_low = float(curr['low'])
c_close = float(curr['close'])
p_close = float(prev['close'])
# 检测是否触发
long_triggered = c_high >= long_trigger
short_triggered = c_low <= short_trigger
# 确定触发方向
# 确定触发方向:当前价格已在前一根之上偏多、之下偏空时,以当前方向为准
direction = None
trigger_price = None
if long_triggered and short_triggered:
# 两个方向都触发,判断哪个先(距离开盘价更近的先触
c_open = float(curr['open'])
dist_to_long = abs(long_trigger - c_open)
dist_to_short = abs(short_trigger - c_open)
if dist_to_short <= dist_to_long:
# 两个方向都触达时,以当前收盘相对前一根收盘为准(不按谁先触
if c_close > p_close:
direction = 'long'
trigger_price = long_trigger
elif c_close < p_close:
direction = 'short'
trigger_price = short_trigger
else:
c_open = float(curr['open'])
dist_to_long = abs(long_trigger - c_open)
dist_to_short = abs(short_trigger - c_open)
if dist_to_short <= dist_to_long:
direction = 'short'
trigger_price = short_trigger
else:
direction = 'long'
trigger_price = long_trigger
elif short_triggered:
# 仅触达做空价:若当前收盘已在前一根之上,说明已拉回偏多,不开空
if c_close <= p_close:
direction = 'short'
trigger_price = short_trigger
elif long_triggered:
# 仅触达做多价:若当前收盘已在前一根之下,说明已回落偏空,不开多
if c_close >= p_close:
direction = 'long'
trigger_price = long_trigger
elif short_triggered:
direction = 'short'
trigger_price = short_trigger
elif long_triggered:
direction = 'long'
trigger_price = long_trigger
if direction is None:
return None, None, None, None