From c4e72b124fe9fe3271c0d07ad0789c7b7374a288 Mon Sep 17 00:00:00 2001 From: ZhouYongyou <128128010+zhouyongyou@users.noreply.github.com> Date: Tue, 4 Nov 2025 16:45:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=BE=A9=20Hyperliquid=20Cance?= =?UTF-8?q?lStopOrders=20=E7=B7=A8=E8=AD=AF=E9=8C=AF=E8=AA=A4=20-=20OpenOr?= =?UTF-8?q?der=20=E7=B5=90=E6=A7=8B=E4=B8=8D=E6=9A=B4=E9=9C=B2=20trigger?= =?UTF-8?q?=20=E5=AD=97=E6=AE=B5=20-=20=E6=94=B9=E7=82=BA=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E8=A9=B2=E5=B9=A3=E7=A8=AE=E7=9A=84=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=8E=9B=E5=96=AE=EF=BC=88=E5=AE=89=E5=85=A8=E5=81=9A=E6=B3=95?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trader/hyperliquid_trader.go | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/trader/hyperliquid_trader.go b/trader/hyperliquid_trader.go index 4311734d..d59a419e 100644 --- a/trader/hyperliquid_trader.go +++ b/trader/hyperliquid_trader.go @@ -511,32 +511,25 @@ func (t *HyperliquidTrader) CancelStopOrders(symbol string) error { return fmt.Errorf("获取挂单失败: %w", err) } - // 过滤出止盈止损单并取消 + // 注意:Hyperliquid SDK 的 OpenOrder 结构不暴露 trigger 字段 + // 因此暂时取消该币种的所有挂单(包括止盈止损单) + // 这是安全的,因为在设置新的止盈止损之前,应该清理所有旧订单 canceledCount := 0 for _, order := range openOrders { if order.Coin == coin { - // Hyperliquid 的止损止盈订单通常是 trigger 订单 - // 检查是否有 triggerPx 字段(表示触发价格) - isTriggerOrder := order.TriggerPx != "" && order.TriggerPx != "0" - - if isTriggerOrder { - _, err := t.exchange.Cancel(t.ctx, coin, order.Oid) - if err != nil { - log.Printf(" ⚠ 取消止盈/止损单失败 (oid=%d): %v", order.Oid, err) - continue - } - - canceledCount++ - log.Printf(" ✓ 已取消 %s 的止盈/止损单 (订单ID: %d, 触发价: %s)", - symbol, order.Oid, order.TriggerPx) + _, err := t.exchange.Cancel(t.ctx, coin, order.Oid) + if err != nil { + log.Printf(" ⚠ 取消订单失败 (oid=%d): %v", order.Oid, err) + continue } + canceledCount++ } } if canceledCount == 0 { - log.Printf(" ℹ %s 没有止盈/止损单需要取消", symbol) + log.Printf(" ℹ %s 没有挂单需要取消", symbol) } else { - log.Printf(" ✓ 已取消 %s 的 %d 个止盈/止损单", symbol, canceledCount) + log.Printf(" ✓ 已取消 %s 的 %d 个挂单(包括止盈/止损单)", symbol, canceledCount) } return nil