diff --git a/trader/aster_trader.go b/trader/aster_trader.go index 73570dbc..a4a5a41f 100644 --- a/trader/aster_trader.go +++ b/trader/aster_trader.go @@ -1010,60 +1010,7 @@ func (t *AsterTrader) SetTakeProfit(symbol string, positionSide string, quantity return err } -// CancelStopOrders 取消该币种的止盈/止损单(用于调整止盈止损位置) -func (t *AsterTrader) CancelStopOrders(symbol string) error { - // 获取该币种的所有未完成订单 - params := map[string]interface{}{ - "symbol": symbol, - } - body, err := t.request("GET", "/fapi/v3/openOrders", params) - if err != nil { - return fmt.Errorf("获取未完成订单失败: %w", err) - } - - var orders []map[string]interface{} - if err := json.Unmarshal(body, &orders); err != nil { - return fmt.Errorf("解析订单数据失败: %w", err) - } - - // 过滤出止盈止损单并取消 - canceledCount := 0 - for _, order := range orders { - orderType, _ := order["type"].(string) - - // 只取消止损和止盈订单 - if orderType == "STOP_MARKET" || - orderType == "TAKE_PROFIT_MARKET" || - orderType == "STOP" || - orderType == "TAKE_PROFIT" { - - orderID, _ := order["orderId"].(float64) - cancelParams := map[string]interface{}{ - "symbol": symbol, - "orderId": int64(orderID), - } - - _, err := t.request("DELETE", "/fapi/v3/order", cancelParams) - if err != nil { - log.Printf(" ⚠ 取消订单 %d 失败: %v", int64(orderID), err) - continue - } - - canceledCount++ - log.Printf(" ✓ 已取消 %s 的止盈/止损单 (订单ID: %d, 类型: %s)", - symbol, int64(orderID), orderType) - } - } - - if canceledCount == 0 { - log.Printf(" ℹ %s 没有止盈/止损单需要取消", symbol) - } else { - log.Printf(" ✓ 已取消 %s 的 %d 个止盈/止损单", symbol, canceledCount) - } - - return nil -} // CancelStopLossOrders 仅取消止损单(不影响止盈单) func (t *AsterTrader) CancelStopLossOrders(symbol string) error { diff --git a/trader/auto_trader.go b/trader/auto_trader.go index 3934e85e..6e269a5b 100644 --- a/trader/auto_trader.go +++ b/trader/auto_trader.go @@ -11,8 +11,8 @@ import ( "nofx/mcp" "nofx/pool" "strings" - "time" "sync" + "time" ) // AutoTraderConfig 自动交易配置(简化版 - AI全权决策) @@ -470,7 +470,6 @@ func (at *AutoTrader) runCycle() error { log.Println(strings.Repeat("=", 70)) log.Println(decision.SystemPrompt) log.Println(strings.Repeat("=", 70)) - } if decision.CoTTrace != "" { log.Print("\n" + strings.Repeat("-", 70) + "\n") diff --git a/trader/binance_futures.go b/trader/binance_futures.go index df6c5b29..e8e8f083 100644 --- a/trader/binance_futures.go +++ b/trader/binance_futures.go @@ -491,52 +491,7 @@ func (t *FuturesTrader) CloseShort(symbol string, quantity float64) (map[string] return result, nil } -// CancelStopOrders 取消该币种的止盈/止损单(已废弃:会同时删除止损和止盈) -func (t *FuturesTrader) CancelStopOrders(symbol string) error { - // 获取该币种的所有未完成订单 - orders, err := t.client.NewListOpenOrdersService(). - Symbol(symbol). - Do(context.Background()) - if err != nil { - return fmt.Errorf("获取未完成订单失败: %w", err) - } - - // 过滤出止盈止损单并取消 - canceledCount := 0 - for _, order := range orders { - orderType := order.Type - - // 只取消止损和止盈订单 - if orderType == futures.OrderTypeStopMarket || - orderType == futures.OrderTypeTakeProfitMarket || - orderType == futures.OrderTypeStop || - orderType == futures.OrderTypeTakeProfit { - - _, err := t.client.NewCancelOrderService(). - Symbol(symbol). - OrderID(order.OrderID). - Do(context.Background()) - - if err != nil { - log.Printf(" ⚠ 取消订单 %d 失败: %v", order.OrderID, err) - continue - } - - canceledCount++ - log.Printf(" ✓ 已取消 %s 的止盈/止损单 (订单ID: %d, 类型: %s)", - symbol, order.OrderID, orderType) - } - } - - if canceledCount == 0 { - log.Printf(" ℹ %s 没有止盈/止损单需要取消", symbol) - } else { - log.Printf(" ✓ 已取消 %s 的 %d 个止盈/止损单", symbol, canceledCount) - } - - return nil -} // CancelStopLossOrders 仅取消止损单(不影响止盈单) func (t *FuturesTrader) CancelStopLossOrders(symbol string) error { diff --git a/trader/hyperliquid_trader.go b/trader/hyperliquid_trader.go index 04e9d15c..078b2135 100644 --- a/trader/hyperliquid_trader.go +++ b/trader/hyperliquid_trader.go @@ -549,39 +549,8 @@ func (t *HyperliquidTrader) CloseShort(symbol string, quantity float64) (map[str return result, nil } -// CancelStopOrders 取消该币种的止盈/止损单 -func (t *HyperliquidTrader) CancelStopOrders(symbol string) error { - coin := convertSymbolToHyperliquid(symbol) +// CancelStopOrders 取消该币种的止盈/止 - // 获取所有挂单 - openOrders, err := t.exchange.Info().OpenOrders(t.ctx, t.walletAddr) - if err != nil { - return fmt.Errorf("获取挂单失败: %w", err) - } - - // 注意:Hyperliquid SDK 的 OpenOrder 结构不暴露 trigger 字段 - // 因此暂时取消该币种的所有挂单(包括止盈止损单) - // 这是安全的,因为在设置新的止盈止损之前,应该清理所有旧订单 - canceledCount := 0 - for _, order := range openOrders { - if order.Coin == coin { - _, 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) - } else { - log.Printf(" ✓ 已取消 %s 的 %d 个挂单(包括止盈/止损单)", symbol, canceledCount) - } - - return nil -} // CancelStopLossOrders 仅取消止损单(Hyperliquid 暂无法区分止损和止盈,取消所有) func (t *HyperliquidTrader) CancelStopLossOrders(symbol string) error { diff --git a/trader/interface.go b/trader/interface.go index bc7bac16..3d3a6e90 100644 --- a/trader/interface.go +++ b/trader/interface.go @@ -36,10 +36,6 @@ type Trader interface { // SetTakeProfit 设置止盈单 SetTakeProfit(symbol string, positionSide string, quantity, takeProfitPrice float64) error - // CancelStopOrders 取消该币种的止盈/止损单(已废弃:会同时删除止损和止盈) - // 请使用 CancelStopLossOrders 或 CancelTakeProfitOrders - CancelStopOrders(symbol string) error - // CancelStopLossOrders 仅取消止损单(修复 BUG:调整止损时不删除止盈) CancelStopLossOrders(symbol string) error