Conditional Orders Playbook
A practical guide to BULK's conditional order types — the tools that let you manage risk and take profit without watching the screen. For the formal specification, see docs.bulk.trade/bulk-exchange/conditional-orders.
The one thing to know before anything else[edit]
Every conditional order on BULK triggers off the mark price (see Mark Price) — never the last traded price — and every conditional order type is reduce-only by default. If you've ever watched a "last price" tick through your stop level on another exchange and wondered why BULK's version didn't fire (or fired at a seemingly different moment), this is why: a single outlier trade can move the last-traded price without moving the more manipulation-resistant mark price at all.
Stop[edit]
Closes (or reduces) your position once the mark price moves against you: below your trigger for a long, above your trigger for a short. On trigger, it submits a reduce-only market order by default, or a reduce-only GTC limit order if you specified a limit price. Set it when you open a position, not after it's already moved against you.
Take-Profit[edit]
The mirror image of a Stop: triggers when the mark price moves in your favor — above your trigger for a long, below it for a short. Same execution logic as Stop (market if no limit price, limit order if you set one). Use it to lock in gains automatically instead of relying on watching the market and reacting manually.
Range (One-Cancels-Other)[edit]
Places a Stop and a Take-Profit as a single linked pair: a lower trigger (your stop-loss) and an upper trigger (your take-profit), each optionally with its own limit price. Whichever leg triggers first executes, and the other is automatically cancelled — the standard "set it and walk away" bracket for a position.
Trigger[edit]
The general-purpose conditional order. Unlike Stop and Take-Profit, it isn't restricted to reduce-only behavior or a single instrument — it holds an arbitrary list of actions (limit orders, cancels, whatever you attach) that all fire together the moment the mark price crosses your threshold, in either direction (`above` or `below`). This is the building block for custom automation beyond simple position protection — anything a Stop or TP can do, Trigger can also do, plus more.
Trailing Stop[edit]
A stop level that follows the price automatically as it moves in your favor. Two parameters control it:
- Trail distance (in basis points) — how far behind the best price your stop level sits.
- Step size (in basis points) — the minimum price movement required before the trail level actually resets to follow. This prevents the stop from constantly recalculating on every tiny tick.
If the market reverses by the trail distance from its best point, the stop triggers like a normal Stop order. Useful for letting a winning position run further while still protecting gains, without manually moving your stop level.
On-Fill[edit]
An order that stays dormant — not even placed on the conditional book — until a different, parent order actually fills. The exact lifecycle matters if you're relying on it for risk management:
- Before the parent fills: the On-Fill child doesn't exist on the conditional book yet. It's not "invisible," it's genuinely not there.
- Parent fills completely: the On-Fill child activates in full and is placed on the conditional book.
- Parent is cancelled before it fills at all: the On-Fill child is cancelled with it — never activates.
- Parent partially fills, then gets cancelled by a margin event: the On-Fill child activates, but only sized to the portion that actually filled.
This is how you chain orders together safely — attach a Stop and Take-Profit to an entry order that hasn't filled yet, and your risk management only ever applies to the position you actually ended up with, not the position you hoped to get.
Worked example: a bracketed entry[edit]
Here's how the pieces above combine into a single, common trade setup — enter a position with protection already attached, so there's no gap between "my order filled" and "my stop is live."
- Submit a limit buy order — say, 1 BTC at $95,000.
- Attach an On-Fill Take-Profit, triggering at $105,000, executing as a market order.
- Attach an On-Fill Stop, triggering at $90,000, with a limit price of $89,500 (rather than a market order, to control your worst-case exit price).
If the $95,000 limit buy fills, both conditional orders activate immediately at their full size. If BTC then reaches $105,000 first, the Take-Profit fires and — because they're linked as a Range/OCO pair in spirit, even when built manually with two On-Fill legs — the Stop is no longer needed and can be cancelled. If BTC drops to $90,000 instead, the Stop's limit order goes out at $89,500. Either way, you were never in the position without protection already queued up.
How the conditional book actually works (useful if something doesn't fire as expected)[edit]
Conditional orders don't sit on BULK's main order book at all — they live on a separate trigger book, organized into two sorted lists: one for orders that fire when price reaches or exceeds a threshold ("above"), and one for orders that fire at or below a threshold ("below"). On every tick, BULK checks the current mark price against both lists and fires everything that's been triggered in a single pass, then cancels any OCO partners of whatever just fired. One practical implication: On-Fill orders can activate up to 32 times per tick in batch — an edge case that only matters if you're running a strategy with a large number of chained parent/child orders firing simultaneously.
See also[edit]
- Order Types on BULK
- How Liquidations Work — what happens if you don't set a stop and the market moves against you
- Auto-Deleveraging (ADL) — the mechanism that activates in the rare case a liquidation itself can't fully resolve
- Official conditional orders documentation
Practice this on a live order book: sign up on BULK Exchange with referral code YETI.