This commit is contained in:
Administrator
2026-02-04 13:29:29 +08:00
parent fdc43477d0
commit 995ef6122b

View File

@@ -1,6 +1,5 @@
import time
from tqdm import tqdm
from loguru import logger
from bit_tools import openBrowser
@@ -169,7 +168,7 @@ class BitmartFuturesTransaction:
return False
ele.scroll.to_see(center=True)
time.sleep(sleep)
ele.click()
ele.click(by_js=True)
return True
except:
return False
@@ -238,7 +237,7 @@ class BitmartFuturesTransaction:
# 阴线(收盘<开盘):实体上边=开盘价,实体下边=收盘价
return {
'upper': max(kline['open'], kline['close']), # 实体上边
'lower': min(kline['open'], kline['close']) # 实体下边
'lower': min(kline['open'], kline['close']) # 实体下边
}
def check_signal(self, current_price, prev_kline, current_kline):
@@ -260,7 +259,7 @@ class BitmartFuturesTransaction:
prev_entity_lower = prev_entity_edge['lower'] # 实体下边
# 计算触发价基于上一根K线实体位置
long_trigger = prev_entity_lower + prev_entity / 3 # 做多触发价 = 实体下边 + 实体/3下三分之一处
long_trigger = prev_entity_lower + prev_entity / 3 # 做多触发价 = 实体下边 + 实体/3下三分之一处
short_trigger = prev_entity_upper - prev_entity / 3 # 做空触发价 = 实体上边 - 实体/3上三分之一处
logger.info(f"当前价格: {current_price:.2f}, 上一根实体: {prev_entity:.4f}")
@@ -287,7 +286,7 @@ class BitmartFuturesTransaction:
upper_shadow_pct = self.calculate_upper_shadow(prev_kline)
if upper_shadow_pct > 0.01 and current_price <= prev_entity_lower:
logger.info(f"持多反手做空!上阴线涨幅 {upper_shadow_pct:.4f}% > 0.01%"
f"价格 {current_price:.2f} <= 实体下边 {prev_entity_lower:.2f}")
f"价格 {current_price:.2f} <= 实体下边 {prev_entity_lower:.2f}")
return ('reverse_short', prev_entity_lower)
elif self.start == -1: # 持空仓
@@ -300,7 +299,7 @@ class BitmartFuturesTransaction:
lower_shadow_pct = self.calculate_lower_shadow(prev_kline)
if lower_shadow_pct > 0.01 and current_price >= prev_entity_upper:
logger.info(f"持空反手做多!下阴线跌幅 {lower_shadow_pct:.4f}% > 0.01%"
f"价格 {current_price:.2f} >= 实体上边 {prev_entity_upper:.2f}")
f"价格 {current_price:.2f} >= 实体上边 {prev_entity_upper:.2f}")
return ('reverse_long', prev_entity_upper)
return None
@@ -316,12 +315,13 @@ class BitmartFuturesTransaction:
logger.info(f"确认无持仓,可以开仓")
return True
else:
logger.warning(f"仍有持仓 (方向: {self.start}),等待 {retry_interval} 秒后重试 ({i+1}/{max_retries})")
logger.warning(
f"仍有持仓 (方向: {self.start}),等待 {retry_interval} 秒后重试 ({i + 1}/{max_retries})")
time.sleep(retry_interval)
else:
logger.warning(f"查询持仓状态失败,等待 {retry_interval} 秒后重试 ({i+1}/{max_retries})")
logger.warning(f"查询持仓状态失败,等待 {retry_interval} 秒后重试 ({i + 1}/{max_retries})")
time.sleep(retry_interval)
logger.error(f"经过 {max_retries} 次重试仍有持仓或查询失败,放弃开仓")
return False
@@ -346,7 +346,7 @@ class BitmartFuturesTransaction:
"""执行交易"""
signal_type, trigger_price = signal
size = 25
if signal_type == 'long':
# 开多前先确认无持仓
logger.info(f"准备开多,触发价: {trigger_price:.2f}")
@@ -356,11 +356,11 @@ class BitmartFuturesTransaction:
if self.start != 0:
logger.warning(f"开多前发现已有持仓 (方向: {self.start}),放弃开仓避免双向持仓")
return False
logger.info(f"确认无持仓,执行开多")
self.开单(marketPriceLongOrder=1, size=size)
time.sleep(3) # 等待订单执行
# 验证开仓是否成功
if self.verify_position_direction(1):
logger.success("开多成功")
@@ -378,11 +378,11 @@ class BitmartFuturesTransaction:
if self.start != 0:
logger.warning(f"开空前发现已有持仓 (方向: {self.start}),放弃开仓避免双向持仓")
return False
logger.info(f"确认无持仓,执行开空")
self.开单(marketPriceLongOrder=-1, size=size)
time.sleep(3) # 等待订单执行
# 验证开仓是否成功
if self.verify_position_direction(-1):
logger.success("开空成功")
@@ -396,17 +396,17 @@ class BitmartFuturesTransaction:
logger.info(f"执行反手做多,触发价: {trigger_price:.2f}")
self.平仓()
logger.info("反手等待平仓完成...")
time.sleep(15)
# time.sleep(15)
# 验证平仓是否成功(必须无持仓才能开新仓)
if not self.verify_no_position(max_retries=5, retry_interval=3):
logger.error("平仓未完成,放弃开多避免双向持仓")
return False
logger.info("平仓完成,执行开多")
self.开单(marketPriceLongOrder=1, size=size)
time.sleep(3) # 等待订单执行
# 验证开仓是否成功
if self.verify_position_direction(1):
logger.success("反手做多成功")
@@ -421,17 +421,17 @@ class BitmartFuturesTransaction:
logger.info(f"执行反手做空,触发价: {trigger_price:.2f}")
self.平仓()
logger.info("反手等待平仓完成...")
time.sleep(15)
# time.sleep(15)
# 验证平仓是否成功(必须无持仓才能开新仓)
if not self.verify_no_position(max_retries=5, retry_interval=3):
logger.error("平仓未完成,放弃开空避免双向持仓")
return False
logger.info("平仓完成,执行开空")
self.开单(marketPriceLongOrder=-1, size=size)
time.sleep(3) # 等待订单执行
# 验证开仓是否成功
if self.verify_position_direction(-1):
logger.success("反手做空成功")
@@ -440,7 +440,7 @@ class BitmartFuturesTransaction:
else:
logger.error("反手做空后持仓验证失败")
return False
return False
def action(self):
@@ -483,7 +483,7 @@ class BitmartFuturesTransaction:
logger.warning("获取持仓状态失败,等待重试...")
time.sleep(2)
continue
logger.debug(f"当前持仓状态: {self.start} (0=无, 1=多, -1=空)")
# 4. 检查信号
@@ -496,7 +496,7 @@ class BitmartFuturesTransaction:
logger.success(f"交易执行完成: {signal[0]}, 当前持仓状态: {self.start}")
else:
logger.warning(f"交易执行失败或被阻止: {signal[0]}")
# 交易后等待一段时间再继续监控(无论成功失败)
time.sleep(3)
continue # 立即进入下一次循环继续监控