Limit
Limit orders rest on the book or take liquidity depending on TIF. Full reference: GTC vs ALO vs IOC, MID sync, TP/SL nesting, fees, edge cases.
A limit order tells Hyperliquid: "match my size at this price or better; otherwise, depending on TIF, rest, reject, or cancel." It is the most flexible order type — it can post liquidity, take liquidity, or be a one-shot taker, depending on how you configure it.
Execution Model
A limit order is exactly one OrderRequest. What it does after landing on the exchange depends on the time-in-force flag.
Wire format
{
a: <asset_id>,
b: <true buy / false sell>,
p: <formatted limit price>,
s: <formatted size>,
r: <reduceOnly>,
t: { limit: { tif: "Gtc" | "Alo" | "Ioc" } }
}
Time-in-Force semantics
| TIF | If the order can match immediately | If it can't |
|---|---|---|
GTC | Match what's available, rest the remainder. | Rest entirely on the book. |
ALO | Rejected. ALO refuses to take liquidity. | Rest entirely. |
IOC | Match what's available. | Cancel entirely (no rest). |
ALO is the only TIF that guarantees you pay maker fees. GTC pays maker on the rested portion and taker on the immediately-matched portion if the price crossed. IOC is essentially a price-capped taker.
When to Use
- GTC: You want to camp at a price. Standard limit behaviour. The default.
- ALO: You want to earn the maker rebate / lower fee tier and refuse to ever cross. Common for makers and grid strategies.
- IOC: You want a one-shot take at a specific price — e.g., "I'll take whatever is at or below 2,050, no resting." Used internally by Market, Burst, and the taker leg of Scale.
Inputs
| Input | Required | Notes |
|---|---|---|
Side | Yes | Long/Short or Buy/Sell. |
Price | Yes | The limit price. Snapped to the market's tick on send. |
Size | Yes | Base-asset quantity. |
TIF | Yes | GTC / ALO / IOC. Default GTC. |
Leverage | Perp only | Applied to the position post-fill. |
Reduce Only | Optional | Rejects fills that would increase position absolute. |
MID Sync | Optional | Tracks current mid as your price (see below). |
Chase | Optional | Reposts a post-only order at the best bid or ask until filled (see below). |
Trigger | Optional (Advanced) | Turns the order into a trigger-limit: the limit is placed only when price reaches the trigger. |
Priority fee | Optional (Advanced) | ALO only. Better resting-queue position, paid from your undelegated staking balance. |
Set TP/SL | Optional (Advanced) | Adds reduce-only trigger orders linked to this entry. |
MID Sync
Clicking the MID button next to the price input pegs your price to the current mid. As mid moves, your displayed price tracks it. Useful when you want to enter "at mid" without re-typing.
The dropdown next to MID adds a signed offset — ±0.01% through ±0.5%. For a buy, a positive offset pushes your price below mid (more passive); for a sell, positive means above mid (more passive). Internally:
adjusted = mid × (1 + sign × offset)
sign = side === "buy" ? -1 : +1
When MID sync is on, the price field is read-only. Typing in it disables sync.
This is purely a UI helper — the order sent at submit time is a snapshot. Hyperliquid sees only the final formatted price.
Chase
The Chase toggle (the repeat icon beside MID) turns the limit into a post-only order that reposts at the best bid (buy) or best ask (sell) every 3 seconds until it fills. Your limit price is the cap: a buy never bids above it and a sell never asks below it. The minimum order value is $10.
Chase runs as a strategy, so track it in the Strategies tab. It runs on Borsa Cloud when your default run location is Cloud (it keeps running with the tab closed), otherwise in this browser. Chase is not offered on outcomes.
A cap on the wrong side of the market (a buy limit below the current price, a sell limit above it) could never reach the touch, so Borsa blocks it and suggests a plain limit order instead.
Trigger (Stop / Take-Profit Limit)
When Trigger in Advanced has a price, the order becomes a trigger-limit: t: { trigger: { isMarket: false, triggerPx, tpsl } }. Nothing rests until the mark price reaches the trigger; then a limit at your Price is placed. Whether it counts as a stop or a take-profit follows which side of the current price the trigger sits on, and the hint under the field spells it out.
TP / SL Attachment
Same model as Market TP/SL: extra triggered legs in the same order action, grouped normalTpsl. The trigger is reduce-only and uses mark price as the reference.
The trigger fires a market order by default (isMarket: true). You can think of it as an automatic stop-loss / take-profit that the exchange manages, attached to this entry's fill size. Set TP exit to Limit to rest the take-profit as a maker limit at the TP price instead, and use Size to cover only a percent of the entry. Stops always exit at market.
If the entry leg doesn't fill, the TP/SL legs remain attached as pending triggers tied to no position. Hyperliquid will not fire them until something fills.
Fees
- Rests in full (no immediate match) → maker fee on the eventual fill.
- ALO → always maker (rejects if it would cross).
- Crosses immediately and partially rests → taker on the crossed portion, maker on the rested portion as it fills later.
- IOC → always taker (never rests).
See Fees and Referrals for the exact tier breakdown.
Edge Cases & Failures
- Tick mismatch. Price not aligned to the market's tick step is auto-formatted with
formatPrice(...)before send. If your typed value rounds to zero or the wrong side, you'll get a rejection. - ALO would cross. Hyperliquid rejects the order because it would have matched immediately. Borsa shows "Post-only order would cross the spread." with a Repost at best button that re-sends it at the current best bid (buy) or ask (sell).
- IOC no-match. Same as Market with no fill — your IOC simply cancelled. Resubmit with a worse price or use Burst.
- Reduce-only blocked. If you set RO and your existing position is already 0 or smaller-side, the order will be rejected at fill time.
- GTC stale. A GTC order can sit on the book indefinitely. Funding accrues against margin (if perp). Make sure you check open orders periodically.
Concrete Examples
GTC rest
Buy 1 BTC @ 70,000, current mid 70,200. The order rests on the book at 70,000. When the inside ask drops to 70,000 or lower, it matches. Until then, no fill, no fee.
OrderRequest {
a: 0,
b: true,
p: "70000",
s: "1",
r: false,
t: { limit: { tif: "Gtc" } }
}
ALO at mid
Sell 0.1 BTC @ 70,200 (current mid). With ALO and current best bid 70,199 / best ask 70,201, your sell at 70,200 sits as the new best ask. It earns maker rebate when a buyer crosses to take it.
If you'd entered 70,199 instead (below best ask, would cross best bid), the exchange would reject with the post-only error.
IOC sweep
Buy 0.5 BTC @ 70,250 IOC, current best ask 70,200. Hyperliquid matches what's available at or below 70,250 and cancels any remainder.
OrderRequest {
a: 0,
b: true,
p: "70250",
s: "0.5",
r: false,
t: { limit: { tif: "Ioc" } }
}
Modify Without Cancel
Borsa supports order modification — changing price or size on a resting limit without dropping it. Internally this uses Hyperliquid's modify action. The order's cloid stays the same; only the new parameters move. This avoids losing queue priority on platforms that respect time priority and is preferred over cancel-then-repost.
Related
- Market — when you want immediate fill.
- Scale — when one price isn't enough.
- Trading Fundamentals — mark price, funding, margin context.