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:
@@ -145,22 +145,7 @@ func (h *HyperLiquidTrade) PlaceMarketOrder(coin, side, sz string) (string, erro
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
||||
defer cancel()
|
||||
|
||||
mids, err := h.info.AllMids(ctx)
|
||||
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)
|
||||
result, err := h.exchange.MarketOpen(ctx, coin, isBuy, size, nil, 0.05, nil, nil)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("market open: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user