From cfcf8f3136a221b2bff7ed9cd4ab6b4684bd482a Mon Sep 17 00:00:00 2001 From: ddrwode <34234@3来 34> Date: Fri, 6 Feb 2026 11:37:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=8D=E6=94=B9=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bitmart/保守模式参数优化/README.md | 2 +- .../四分之一,五分钟,反手条件充足_保守模式.py | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/bitmart/保守模式参数优化/README.md b/bitmart/保守模式参数优化/README.md index b8610a4..b5c7b21 100644 --- a/bitmart/保守模式参数优化/README.md +++ b/bitmart/保守模式参数优化/README.md @@ -81,7 +81,7 @@ python3 "/Users/ddrwode/code/lm_code/bitmart/保守模式参数优化/四分之 默认 WebSocket 订阅: - `wss://openapi-ws-v2.bitmart.com/api?protocol=1.1` -- topic: `futures/ticker:ETHUSDT` +- topic: `futures/bookticker:ETHUSDT`(实时推送,默认更快) 如果你本机没有 WebSocket 依赖,会自动回退 API。安装方式: diff --git a/bitmart/保守模式参数优化/四分之一,五分钟,反手条件充足_保守模式.py b/bitmart/保守模式参数优化/四分之一,五分钟,反手条件充足_保守模式.py index 02abdf7..ead2fb8 100644 --- a/bitmart/保守模式参数优化/四分之一,五分钟,反手条件充足_保守模式.py +++ b/bitmart/保守模式参数优化/四分之一,五分钟,反手条件充足_保守模式.py @@ -81,7 +81,8 @@ class BitmartFuturesTransactionConservative: # WebSocket 实时价格(优先使用,失败自动回退 API) self.ws_enabled = os.getenv("BITMART_WS_ENABLED", "1").strip().lower() not in {"0", "false", "off", "no"} self.ws_url = os.getenv("BITMART_WS_URL", "wss://openapi-ws-v2.bitmart.com/api?protocol=1.1") - self.ws_topic = os.getenv("BITMART_WS_TOPIC", f"futures/ticker:{self.contract_symbol}") + # 使用 bookticker 实时推送(比 ticker 的 1s 推送更及时) + self.ws_topic = os.getenv("BITMART_WS_TOPIC", f"futures/bookticker:{self.contract_symbol}") self.ws_price_ttl_seconds = float(os.getenv("BITMART_WS_PRICE_TTL", "2.0")) self.ws_reconnect_seconds = float(os.getenv("BITMART_WS_RECONNECT_SECONDS", "2.0")) self.ws_last_price = None @@ -212,6 +213,12 @@ class BitmartFuturesTransactionConservative: return payload = json.loads(message) + if isinstance(payload, dict) and payload.get("success") is False: + logger.warning( + f"WebSocket 订阅失败: group={payload.get('group')} error={payload.get('error')}" + ) + return + price = self._extract_price_from_ws_payload(payload) if price is not None: with self.ws_lock: