From c85f370e32176d9b2809df1fd6a2b90cb83fce06 Mon Sep 17 00:00:00 2001 From: ddrwode Date: Fri, 30 Jan 2026 14:51:51 +0800 Subject: [PATCH] hahaa --- me/bitmart-三分之一策略交易.py | 56 +++++++++++++++++++++++++--------- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/me/bitmart-三分之一策略交易.py b/me/bitmart-三分之一策略交易.py index 573995d..73cc983 100644 --- a/me/bitmart-三分之一策略交易.py +++ b/me/bitmart-三分之一策略交易.py @@ -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