ORDER TYPES · EXECUTION

What is a TWAP order?

A TWAP (time-weighted average price) order splits one large order into smaller slices and sends them at regular intervals over a chosen duration. The goal is to fill at roughly the average price of that window instead of moving the market with a single trade.

Best forSize that would move the book
Trade-offSlower fill, price can drift
ControlsDuration, lots, randomness, pause buffer
VenuesHyperliquid, Binance, Bybit, OKX, BloFin, RISEx, Lighter

How a TWAP order works

You set the total size, a duration, and either a number of lots or let the terminal choose one. The order engine divides the size into equal slices and submits one slice at each interval until the duration ends or the size is filled. A 60-minute TWAP with 12 lots sends one slice every five minutes.

Each slice can be a market order, which fills immediately at the best available price, or a maker-only limit order placed at the best bid or ask. Maker-only slices earn the maker fee and avoid crossing the spread, but a slice can miss if price runs away before it fills. Randomness shifts the timing and size of each slice by a few percent so the pattern is harder to spot in the tape.

When to use one

TWAP is for size, not speed. If your order is a meaningful share of the visible book, a single market order pays for the whole spread and then some. Spreading the same size over an hour lets liquidity refill between slices and usually lands closer to the volume-weighted price of the period.

It also suits positions you want to build without signalling: accumulating a perp position ahead of a catalyst, unwinding a large position without triggering a cascade, or moving exposure between venues for a funding trade. The cost is drift. If price trends against you during the window, the average fill is worse than an immediate market order would have been. A pause buffer stops new slices when price moves against the order by more than a set percentage.

Example: buying 20 BTC over one hour

WORKED EXAMPLE

A trader wants 20 BTC of perpetual exposure on Hyperliquid. The book shows about 4 BTC within 0.1% of the mid, so a single market order would walk several levels deep.

Total size
20 BTC
Duration
60 minutes
Lots
20 (one slice every 3 minutes)
Slice size
1 BTC ± 10% randomness
Pause buffer
0.5% adverse move
Result
Fills between $77,120 and $77,610, average $77,384

The same 20 BTC as one market order would have cleared the book to roughly $77,900. The TWAP paid the spread twenty times but never more than one level deep.

EXECUTION IN TERMINAL

Run it on every exchange
from one order form.

Proliquid runs TWAP, Chase, Iceberg, and Scale orders on every connected exchange from one trade form, with live fill tracking.

  • Same order form on seven exchanges
  • Live fills and remaining size per order
  • No subscription; your keys stay with you
Open the terminalFree to use. Connect your exchange to trade.
ORDER TYPES

TWAP order: common questions

Short answers to the questions traders ask most about this term. For the rest of the glossary, start from the Learn index.

Is a TWAP order better than a market order?

For small size, no: a market order fills instantly and the spread is the whole cost. For size that is a noticeable share of the visible book, a TWAP usually fills closer to the period's average price because liquidity refills between slices. The trade-off is time and the risk that price drifts against you during the window.

What is the difference between TWAP and VWAP?

TWAP paces slices evenly over time. VWAP paces them in proportion to expected volume, sending more when the market is active. Perpetual markets trade around the clock with fewer predictable volume peaks, so TWAP is the common choice on crypto venues.

Can I stop a TWAP before it finishes?

Yes. Stopping the TWAP cancels the remaining slices; anything already filled stays in the position. In Proliquid, active TWAPs are listed in the Open TWAPs panel with filled and remaining size.

Can a TWAP close a position?

Set reduce-only and the slices can only decrease the existing position. This is the usual way to exit a large position without dumping it in one print.