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)
|
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)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user