Limit Chaser (Chase)
Chase is a third order type in the Trade Ticket, next to Market and Limit. Instead of resting at one fixed price, a Chase order posts at the best maker price and reprices itself as the book moves, so it keeps chasing a fill without ever crossing the spread.
Every order the Chaser places is post-only. It never takes liquidity, so you keep maker fees — the trade-off is that a fill is not guaranteed.
Chase runs in the Terminal (/main) only. It is not a webhook field — triggers cannot start a Chase. See Triggers for what webhooks support.
When Chase Appears
The Chase tab shows up in the Trade Ticket when both are true:
- Your exchange supports it — Blofin, Bitunix, Bybit, Bitget, OKX, and Hyperliquid all do
- Crodl's Chaser worker is online and has free capacity
If the worker is unavailable, the Chase tab disappears and Market/Limit keep working normally. Nothing you do is lost — Chase is an addition to the ticket, never a dependency of it.
Settings
| Field | Values | Description |
|---|---|---|
| Max duration | 30 seconds, 1 minute, 2 minutes, 5 minutes | How long the Chaser may keep working. Defaults to 1 minute |
| Max reprices | 1–300 | How many times it may move the order. Defaults to 30 |
| Buy ceiling | price | Never buy above this price |
| Sell floor | price | Never sell below this price |
Buy ceiling vs. sell floor
Only one of the two applies, decided by what the order actually does:
| What you are doing | Direction | Field used |
|---|---|---|
| Open long | Buys | Buy ceiling |
| Close short | Buys | Buy ceiling |
| Open short | Sells | Sell floor |
| Close long | Sells | Sell floor |
The relevant field is required — a Chase always runs with a price limit. This is the guarantee that a runaway market cannot drag your fill somewhere you never agreed to.
The ticket rejects a limit that cannot work before you submit:
- It must use the exchange's price increment (tick size)
- A buy ceiling below the current market is refused — there would be nothing to chase
- A sell floor above the current market is refused, for the same reason
The price limit is a hard boundary, not a target. If the book moves past it, the Chaser stops and cancels rather than filling you at a worse price.
How It Works
- You pick Chase, set your size, duration, max reprices, and price limit, then submit
- Crodl places a post-only limit order at the best maker price on your side of the book
- As the book moves, the Chaser reprices the order to stay at the best maker price
- It stops on the first of: filled, max duration reached, max reprices used, price limit reached, or you cancel
While a session is running, the ticket shows a progress card with the live status, the resting price, filled-vs-requested quantity, the reprice count, and a Cancel Limit Chaser button.
Only one Chase session can be active per account at a time. Cancel or wait for the current one to finish before starting another.
Session Status
| Status | Meaning |
|---|---|
| Starting | Session accepted, first order not yet resting |
| Resting | An order is live on the book |
| Partially filled | Some quantity filled; the remainder is still being chased |
| Cancel requested | Your cancel is in flight |
| Filled | Fully filled — done |
| Cancelled | Stopped by you |
| Time limit reached | Max duration elapsed |
| Price protection reached | The book moved past your ceiling or floor |
| Stopped: stale market data | Crodl stopped trusting the price feed and stood down |
| Stopped: connection lost | The exchange connection dropped |
| Failed | The session could not continue |
Every non-filled ending also reports a stop reason in plain language — for example "Maximum reprice attempts reached", "The market moved through every safe post-only retry", or "The exchange could not keep the order post-only".
A Chaser can end partially filled. If it stops at 60% filled, you hold that 60% — the rest was never bought or sold. Check the progress card and your Positions panel before assuming a size.
Safety Behavior
Chase is deliberately conservative. It stops instead of guessing whenever it cannot prove what happened:
- Stale book — if the price feed goes stale, the Chaser stops rather than repricing against numbers it does not trust
- Unconfirmed reprice — if the exchange does not confirm a reprice, the resting order is cancelled safely instead of risking a duplicate
- Post-only rejection — if the market moves through every safe post-only retry, the Chaser stops rather than crossing the spread and paying taker fees
Limits
Chase does not support allocation_id. Allocation buckets are fill-based and cannot track a resting order, so a Chase with an allocation ID is rejected with allocation_limit_chaser_not_supported. Use Market orders for allocation-tracked strategies.
Also note:
- Chase is Terminal-only — no webhook or trigger equivalent
- Hyperliquid requires an order value of at least $10
- Bitget repricing needs UTA trade-write permission on the API key; without it the reprice is rejected and the resting order is cancelled safely
Chase vs. Market vs. Limit
| Market | Limit | Chase | |
|---|---|---|---|
| Fills immediately | Yes | No | No |
| Fee side | Taker | Maker (if it rests) | Maker (always post-only) |
| Follows the book | — | No | Yes |
| Fill guaranteed | Yes | No | No |
| Worst price you can get | Whatever the book gives | Your limit price | Your ceiling / floor |
Use Market when getting in matters more than the price. Use Limit when you want one specific price and are happy to wait. Use Chase when you want a maker fill near the current price and are willing to give it a bounded amount of time to get there.