Skip to main content

Basic Order Types

Market Order

Executes immediately at the best available price.
  • Use case: When you need immediate execution and price is less important
  • Example: Market buy 100 contracts → fills at current best ask price

Limit Order

Rests on the order book at a specified price.
  • Use case: When you want price control and can wait for execution
  • Example: Limit buy 100100 @ 0.650.65 → only fills at $0.65 or better

Time in Force

  • IOC : Immediate or Cancel - executes immediately for any available quantity, and cancels any unfilled remainder.
    • Example: IOC buy 10 contracts; if only 6 are available now, 6 fill and 4 are canceled.
  • FOK : Fill-Or-Kill - must be filled completely and immediately, or the entire order is canceled.
    • Example: FOK buy 10 contracts; if all 10 cannot fill right now, nothing is executed.
  • GTD : Good-Till-Date - stays active until a specific date/time, unless filled or canceled earlier.
    • Example: GTD limit buy valid until 2026-02-20 15:00 UTC.
  • GTC : Good-Till-Cancelled - stays active until fully filled or manually canceled (subject to platform-level max lifetime limits).
    • Example: Rest a GTC limit order on the book until market reaches your price.

Conditional Order Types

Conditional orders are not placed immediately. They activate (“trigger”) when specific conditions are met.

Stop Orders

Stop orders trigger when price moves to a predefined stop price, using the traded price. On a buy stop order, the order is triggered if someone trades at or above the stop price. On a sell stop order, the order is triggered if someone trades at or below the stop price.
Triggers when market trades at or through your stop price, then executes as a market order (immediate fill at best available price).
Directional logic:
  • BUY stop: Triggers at or above stop price (breakout entry or short exit)
  • SELL stop: Triggers at or below stop price (stop loss or long exit)

Reverse Stop Orders

Reverse stop orders trigger when price moves in your desired direction. Used exclusively for take profit scenarios. A “reverse stop” is called “reverse” because it triggers in the opposite direction of a normal stop order.
Triggers when market trades at or through your target price (opposite direction from normal stop), then executes as a market order.
Directional logic (reversed from normal stop):
  • BUY reverse stop: Triggers at or below target (opposite of normal buy stop)
  • SELL reverse stop: Triggers at or above target (opposite of normal sell stop)
Why “reverse”?
  • Normal SELL stop @ 0.60triggerswhenprice0.60 triggers when price ≤ 0.60 (price falling)
  • SELL reverse stop @ 0.80triggerswhenprice0.80 triggers when price ≥ 0.80 (price rising)
  • The trigger direction is reversed!

Take Profit Orders (TP)

Parent-child orders: Automatically triggers a child order when a parent order fills.
Triggers when parent order is fully filled, then activates a reverse stop market order.

Stop Loss Orders (SL)

Parent-child orders: Automatically triggers a child order when a parent order fills.
Triggers when parent order is fully filled, then activates a stop market order.

Algorithmic Order Types

Algorithmic orders execute over time as a sequence of automatically-managed child orders. They live on River’s side, not the exchange’s — a background worker manages the lifecycle and you cancel the parent to cancel everything. Placed via the Complex Orders API.

Iceberg

Splits a large order into smaller tranches so the full size is never visible on the book. Only displayed_qty is posted at any moment; when a tranche fully fills, the next is placed at the same limit_price until total_qty is exhausted. Parameters:
FieldDescription
total_qtyTotal quantity across all tranches
displayed_qtyTranche size — quantity shown to the market at a time
limit_priceStatic price used for every tranche (between 0 and 1)
post_onlyIf true, every tranche is posted maker-only
reload_delay_sOptional seconds to wait between tranches (0 = immediate)
expiry_ts_utcOptional GTD expiry for every tranche; venue expiry cancels the iceberg
Child tranches arrive on the orders WebSocket as ordinary order frames — clients can group them by parent_iceberg_order_id if needed.

Peg

Rests a single child order at the top of book and automatically repegs it as the book moves, capped by a worst-price limit. Useful for capturing the spread without manually chasing the market.
  • Buy peg: rests at the current best bid, repegs up as bids rise, never pays more than max_price (the ceiling).
  • Sell peg: rests at the current best ask, repegs down as asks fall, never sells below min_price (the floor).
Parameters:
FieldDescription
total_qtyTotal quantity for the peg
min_pricePrice floor — the child never rests below this (binds sell pegs). Optional; unset floors at 0
max_pricePrice ceiling — the child never rests above this (binds buy pegs). Optional; unset ceils at 1
post_onlyIf true, a repeg that would cross the book cancels the peg instead of taking
peg_min_stay_time_sOptional minimum seconds the child must rest before a price-driven repeg fires
max_qty_levelPenny-jump threshold (contracts). If the level the peg would join holds more than this many contracts, rest one tick tighter instead (if not crossing the book and not already quoting the level).
expiry_ts_utcOptional GTD expiry for the resting child
post_only=true is recommended for makers — without it, a fast-moving book could cause a repeg to cross and consume liquidity at your limit price.

Smart Taker

Rests nothing on the book. Instead it watches the opposite side and fires an IOC clip the moment at least min_qty of acceptable liquidity (priced within limit_price) appears, repeating until total_qty is filled. Use it to take size opportunistically — without showing your intent or chasing the market — and only when the fill is worth the taker fee and spread.
  • Buy smart taker: waits for asks at or below limit_price, then takes up to the available size in a single IOC clip.
  • Sell smart taker: waits for bids at or above limit_price, then takes.
Parameters:
FieldDescription
total_qtyTotal quantity to take across all clips
limit_priceWorst price the taker will cross at (max for buy, min for sell), between 0 and 1
min_qtyBook-depth gate: minimum acceptable liquidity resting within limit_price before a clip fires. A depth floor on the book, not a per-clip fill floor — it may exceed total_qty (e.g. take 100 only when ≥500 is resting)
expiry_ts_utcOptional GTD expiry; on expiry the order is torn down
A smart taker places no order until acceptable liquidity appears — an active smart taker with no fills yet is simply waiting, not stuck. Child IOC clips arrive on the orders WebSocket as ordinary order frames — clients can group them by parent_smart_taker_order_id.

Comparison

TypeTriggerExecutionPrimary Use
MarketImmediateBest priceNeed immediate fill
LimitRests on bookAt limit or betterPrice control
Stop MarketPrice moves againstMarket orderStop loss, breakout
Stop LimitPrice moves againstLimit orderStop loss with price protection
TP MarketParent fills + price moves forMarket via reverse stopTake profit
TP LimitParent fills + price moves forLimit via reverse stopTake profit with control
SL MarketParent fills + price moves againstMarket via stopStop loss from entry
SL LimitParent fills + price moves againstLimit via stopStop loss with price floor
IcebergImmediate (per tranche)Sequential limit tranchesHide size on a large order
PegTracks top of bookResting limit, auto-repeggedCapture the spread up to a limit
Smart TakerLiquidity ≥ min_qty within limitIOC clips, nothing restingTake size opportunistically without showing

Key Concepts

Stop vs Reverse Stop

  • Stop: Triggers when price moves AGAINST you (exit losses, enter breakouts)
  • Reverse Stop: Triggers when price moves FOR you (take profits)

Parent-Child Orders

  • TP/SL orders are “meta-orders” that activate child orders when a parent fills
  • The child order itself is usually a stop or reverse stop order
  • This creates a two-step process: Parent fill → Child activation → Price trigger → Execution

Trigger Direction Summary

SideStop (Loss/Breakout)Reverse Stop (Profit)
BUYTriggers ≥ stop priceTriggers ≤ target price
SELLTriggers ≤ stop priceTriggers ≥ target price