mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-13 15:57:01 +08:00
fix: 修復 Hyperliquid CancelStopOrders 編譯錯誤
- OpenOrder 結構不暴露 trigger 字段 - 改為取消該幣種的所有掛單(安全做法)
This commit is contained in:
@@ -511,32 +511,25 @@ func (t *HyperliquidTrader) CancelStopOrders(symbol string) error {
|
|||||||
return fmt.Errorf("获取挂单失败: %w", err)
|
return fmt.Errorf("获取挂单失败: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 过滤出止盈止损单并取消
|
// 注意:Hyperliquid SDK 的 OpenOrder 结构不暴露 trigger 字段
|
||||||
|
// 因此暂时取消该币种的所有挂单(包括止盈止损单)
|
||||||
|
// 这是安全的,因为在设置新的止盈止损之前,应该清理所有旧订单
|
||||||
canceledCount := 0
|
canceledCount := 0
|
||||||
for _, order := range openOrders {
|
for _, order := range openOrders {
|
||||||
if order.Coin == coin {
|
if order.Coin == coin {
|
||||||
// Hyperliquid 的止损止盈订单通常是 trigger 订单
|
_, err := t.exchange.Cancel(t.ctx, coin, order.Oid)
|
||||||
// 检查是否有 triggerPx 字段(表示触发价格)
|
if err != nil {
|
||||||
isTriggerOrder := order.TriggerPx != "" && order.TriggerPx != "0"
|
log.Printf(" ⚠ 取消订单失败 (oid=%d): %v", order.Oid, err)
|
||||||
|
continue
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
|
canceledCount++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if canceledCount == 0 {
|
if canceledCount == 0 {
|
||||||
log.Printf(" ℹ %s 没有止盈/止损单需要取消", symbol)
|
log.Printf(" ℹ %s 没有挂单需要取消", symbol)
|
||||||
} else {
|
} else {
|
||||||
log.Printf(" ✓ 已取消 %s 的 %d 个止盈/止损单", symbol, canceledCount)
|
log.Printf(" ✓ 已取消 %s 的 %d 个挂单(包括止盈/止损单)", symbol, canceledCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user