fix: HL market order double slippage causing 'Order has invalid size'

Root cause: PlaceMarketOrder manually calculated limitPx=mid*0.5 (sell)
then passed &limitPx to SDK's MarketOpen. SDK treated this as reference
price and applied slippage AGAIN (0.95x), resulting in limitPx=mid*0.475.
Notional value fell below HL's 0 minimum → error.

Fix: pass nil instead of &limitPx, letting SDK get mid price and
apply standard 5% slippage itself.
This commit is contained in:
jackyu66git
2026-05-04 23:35:44 +08:00
parent ce204abc81
commit 866f9906b7
+1 -16
View File
@@ -145,22 +145,7 @@ func (h *HyperLiquidTrade) PlaceMarketOrder(coin, side, sz string) (string, erro
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel() defer cancel()
mids, err := h.info.AllMids(ctx) result, err := h.exchange.MarketOpen(ctx, coin, isBuy, size, nil, 0.05, nil, nil)
if err != nil {
return "", fmt.Errorf("mids: %w", err)
}
priceStr, ok := mids[coin]
if !ok {
return "", fmt.Errorf("coin %s not found", coin)
}
midPx, _ := strconv.ParseFloat(priceStr, 64)
limitPx := midPx * 2.0
if !isBuy {
limitPx = midPx * 0.5
}
result, err := h.exchange.MarketOpen(ctx, coin, isBuy, size, &limitPx, 0.05, nil, nil)
if err != nil { if err != nil {
return "", fmt.Errorf("market open: %w", err) return "", fmt.Errorf("market open: %w", err)
} }