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