fix: Bitget 平仓必须传 holdSide 参数

- PlaceMarketOrder 新增 holdSide 参数
- 平仓时(closeLeg)根据 leg.Side 传 holdSide="long"/"short"
- 开仓传空字符串,不受影响
- 修复 BG 持续 'No position to close' (22002) 问题
This commit is contained in:
jackyu66git
2026-05-05 00:46:49 +08:00
parent d01a261828
commit fd777e6fe0
2 changed files with 12 additions and 4 deletions
+7 -3
View File
@@ -1168,7 +1168,7 @@ func (t *Trader) placeOrder(leg *PositionLeg, side string, store *PriceStore) (s
if leg.Exchange == ExBitget {
szStr := exchange.GetBitgetSize(leg.Coin+"USDT", t.cfg.TradeAmountUSD, leg.EntryPrice)
log.Printf("[Order] BG %s %s | amountUSD=%.2f entryPrice=%.6f size=%s", side, leg.Coin+"USDT", t.cfg.TradeAmountUSD, leg.EntryPrice, szStr)
oid, err := t.bitget.PlaceMarketOrder(side, leg.Coin+"USDT", szStr, "open")
oid, err := t.bitget.PlaceMarketOrder(side, leg.Coin+"USDT", szStr, "open", "")
if err != nil {
return fmt.Sprintf("BG %s error: %v", side, err), 0
}
@@ -1398,7 +1398,11 @@ func (t *Trader) closeLeg(leg *PositionLeg) string {
if leg.Exchange == ExBitget {
log.Printf("[Order] BG close %s %s | size=%s", side, leg.Coin+"USDT", leg.Size)
resp, err := t.bitget.PlaceMarketOrder(side, leg.Coin+"USDT", leg.Size, "close")
holdSide := "long"
if leg.Side == Short {
holdSide = "short"
}
resp, err := t.bitget.PlaceMarketOrder(side, leg.Coin+"USDT", leg.Size, "close", holdSide)
if err != nil {
return fmt.Sprintf("%v", err)
}
@@ -1584,7 +1588,7 @@ func (t *Trader) placeOrderAt(leg *PositionLeg, side string, store *PriceStore,
if leg.Exchange == ExBitget {
szStr := exchange.GetBitgetSize(leg.Coin+"USDT", t.cfg.TradeAmountUSD, price)
log.Printf("[Order] BG scale %s %s | amountUSD=%.2f price=%.6f size=%s", side, leg.Coin+"USDT", t.cfg.TradeAmountUSD, price, szStr)
_, err := t.bitget.PlaceMarketOrder(side, leg.Coin+"USDT", szStr, "open")
_, err := t.bitget.PlaceMarketOrder(side, leg.Coin+"USDT", szStr, "open", "")
if err != nil {
return fmt.Sprintf("BG %s error: %v", side, err)
}