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