Skip to main content

Order types

Three desks share one Hyperliquid venue. This page is the wire map — what BattleGrid actually submits — not a click tour of the ticket.

Distinguish three layers that share vocabulary but are not the same object:

LayerOwnsDoes not own
Venue orderHyperliquid t shape + reduce-only + groupingCandidate geometry, approval UX
Strategy constructionEntry policy trigger → resting shape; Trade levels stop/target bandWhich surface approved the fire
Terminal / approvalWhat you may place or accept on the deskRewriting Radar’s authored trigger

Trade terminal · Entry policy · Trade levels

Venue shapes BattleGrid submits

Hyperliquid’s execution primitive (as BattleGrid persists and wires it) is two discriminators — not the legacy MARKET/STOP/STOP_LIMIT labels some APIs still name:

BattleGrid TradingOrderTypeHyperliquid tWhat it means
LIMIT{ limit: { tif } }Resting or immediate limit; TIF is part of the order
TRIGGER{ trigger: { isMarket, triggerPx, tpsl } }Arms at triggerPx; then market- or limit-executes

“Market” on the ticket is not a third venue type. The adapter submits an aggressive LIMIT with IOC (tif: Ioc) and a chokepoint-computed aggressive price. Same path for reduce-only closes.

App labelWireTypical TIF / flagReduce-only
Market (entry)LIMIT + aggressive priceIOC (fixed)Rejected on the market-entry use case — close is a dedicated command
LimitLIMIT + authored priceGTC (default) · IOC · ALOOptional
Stop Market / Take MarketTRIGGER · isMarket: truePost-activation behaves like market (stored TIF IOC)Optional
Stop Limit / Take LimitTRIGGER · isMarket: false + limit pricePost-activation behaves like limit (stored TIF GTC)Optional
Protection TP / SLTRIGGER · isMarket: true (default) · tpsl: tp|slBracket grouping normalTpsl or positionTpslAlways (r: true)
Close positionLIMIT + aggressive priceIOCAlways

Sources: types/src/trading.ts (TradingOrderType, TimeInForce), types/src/trading-orders.ts (OrderTpsl, OrderPurpose), server/.../hyperliquid-trading.repository.ts (submitMarketOrder, submitLimitOrder, submitTriggerOrder, protection batches).

Time-in-force

TIFWire spellingWhere it appears
GTCGtcDefault for plain LIMIT; agent at-market / pullback entries; trigger-LIMIT post-activation stamp
IOCIocMarket entries and closes; agent breakout TRIGGER post-activation stamp
ALOAloPlain LIMIT only (post-only). Enum + adapter map exist; terminal exposes the selector on LIMIT

Trigger families do not offer a TIF picker — execution type selects market vs limit after the trigger fires. Plain MARKET hides TIF (always IOC under the hood).

Reduce-only

Venue accepts r on every shape. BattleGrid’s ticket policy:

  • MARKET entry — reduce-only off the form; an immediate reduce-only market is the close command
  • LIMIT + Stop/Take variants — reduce-only toggle allowed
  • Protection legs and closes — reduce-only is mandatory on the wire

MCP close_agent_position and the terminal close path both submit that reduce-only market close.

Strategy → resting entry (agent / Radar / accept)

Authoring lives on the strategy (Entry policy). Execution stamps { orderType, tif } once per trigger (RESTING_ORDER_SHAPE_BY_TRIGGER / AT_MARKET_ORDER_SHAPE in types/src/entry-discipline.ts):

Entry triggerResting kindOrder shapePrice the entry rests at
On bar close (ON_CANDLE_CLOSE)AT_MARKETLIMIT / GTCSignal entry price (not an IOC sweep)
On the pullback (ON_RETEST)AT_LEVELLIMIT / GTCDerived Donchian retest level ± offset
On the break (STOP_THROUGH_LEVEL)AT_LEVELTRIGGER / IOC (executionType: MARKET)Derived Donchian break level ± offset
No authored trigger (conversational / Arena provenance-free)AT_MARKETLIMIT / GTCSame at-market shape — not a retired AT_SIGNAL stand-in
At signal (AT_SIGNAL)LIMIT / GTC on legacy rows onlyRetired for authoring; readable history, not a live fire path

Important: “At market” in entry policy means prompt fill intent via resting LIMIT GTC at the signal price, not the terminal’s IOC market ticket. That choice exists so the exchange cannot fill past the TP bracket by construction (LimitGtcEntryStrategy).

Radar auto-fires and terminal accept of a PENDING decision share this same execute path (ExecuteTradingEntryUseCase → entry strategy registry). Approval changes whether the path runs, not which venue shape the trigger already stamped.

Candidate levels vs the order that lands

Trade construction (Trade levels) filters stop/target candidates (ATR band, Min R:R). The decision that survives carries entryPrice, soft stopLoss, takeProfit, and a stamped hard stop.

At submit:

  1. Entry rests at the decision’s entry (level or signal price) under the trigger’s shape above
  2. TP protection leg (when takeProfit > 0) — TRIGGER market, reduce-only, tpsl: tp
  3. SL protection leg — TRIGGER market, reduce-only, tpsl: sl, priced from the risk line = stamped hard stop (or chosen stop on pre-hard-stop-era rows) — not the soft stop

Soft stop remains strategy-bar close judgment (Exit policy); it is not the resting exchange SL.

Protection legs and overrides

LegSourceVenue fact
Initial SL / TPStrategy construction + entry submit (submit*WithProtection, grouping normalTpsl)TRIGGER · reduce-only · tpsl
Break-even / trailing / time-decayExit policy automationReplaces the SL protection row (PROTECTION_LEG, reprice source stamped)
Manual SL overrideTerminal / MCP override_agent_protectionSL-only amendment (MANUAL_OVERRIDE); TP uses cancel/replace, not this tool
Position TP/SL ticketTerminal position-tpslNew / replacement trigger legs; optional per-leg limit price → isMarket: false when supplied

Purpose enum on the order row: ENTRY · PROTECTION_LEG · REDUCE_CLOSE — orthogonal to LIMIT vs TRIGGER.

What the trade terminal can place vs automation

CapabilityTrade terminal (manual ticket)Agent accept / Radar fireExit automation
Market entry (IOC aggressive limit)YesNo — agent at-market is LIMIT GTC
Limit entry + TIF (GTC/IOC/ALO)YesAgent pullback / bar-close: GTC only
Stop / Take (market or limit trigger)Yes (standalone; no attached bracket)Breakout entry is STOP TRIGGER market + bracket
Attach TP/SL on entry (normalTpsl)Market & Limit tickets onlyAlways on agent entry strategies (SL required)
Reduce-only resting / conditionalLimit + trigger familiesCloses & protection onlyCondition / system exits as REDUCE_CLOSE
Immediate reduce-only closeClose command (not market-entry toggle)MCP / terminal close on agent positionsSame close service
Override resting SLYes (wager-scoped)Same override pathBE / trail / decay also reprice SL
Level entry (break / pullback)No — authored on strategy; fires via Radar or after you accept a proposal that carries that triggerYes

Terminal order-entry variants (eligibility + ticket): MARKET · LIMIT · STOP_MARKET · STOP_LIMIT · TAKE_MARKET · TAKE_LIMIT (ORDER_ENTRY_VARIANTS).

Field card (quick reference)

NameLayerOne-line fact
MarketVenue (via LIMIT IOC)Aggressive IOC limit; terminal entry only among discretionary tickets
LimitVenueResting price + TIF; agent “at market” entries are this with GTC
Stop / TakeVenue TRIGGERArms at triggerPx; market or limit execution
Reduce-onlyFlagTicket-gated on MARKET; mandatory on protection and close
GTC / IOC / AloTIFEnum complete; Alo only on plain LIMIT UI
Hard-stop SLProtectionExchange TRIGGER at risk line
Soft stopStrategy exitBar-close; not the resting SL order
TPProtectionFrom constructed take-profit when positive

Gaps (do not invent)

TopicStatus
Live open-order sample via MCPEmpty book at research time — shapes above are from code + adapter, not a live row dump
Fee rates per order typeOut of scope here — venue maker/taker + builder are a separate fee schedule when documented under Trade
Whether every Alo submission path is used in production flows beyond the LIMIT selectorAdapter maps Alo; broader product usage not asserted
Legacy OrderType MARKET/STOP/STOP_LIMIT enumSuperseded for new orders by TradingOrderType LIMIT|TRIGGER; do not treat legacy labels as wire truth

Trade terminal · Entry policy · Exit policy