Market-to-Limit: Submits as market order; unfilled quantity converts to limit order; prevents walking the book excessivelyLimit: Standard limit order, executes at specified price or better, rests in book if not immediately filledStop: Triggers market order when stop price reached; used for stop-loss scenariosStop-Limit: Triggers limit order when stop price reached; provides price protection after trigger
DAY: Order expires at end of trading day; canceled automatically at market closeGood-Till-Cancel (GTC): Order remains active until filled or explicitly canceled; persists across trading daysImmediate-Or-Cancel (IOC): Execute immediately or cancel; partial fills allowed; remaining quantity canceledFill-Or-Kill (FOK): Execute entire order immediately or cancel; no partial fills; all-or-nothingGood-Till-Time: Expires at specified time; custom expiration timestamp
DAY orders do not automatically cancel at 5pm during trade day rolls.The Exchange team is working on improving the DAY order types performance. While the Exchange makes improvement, DAY orders will not automatically cancel at 5pm during trade day rolls. Please use GTD orders with the desired timestamp. GTD orders will remain functional with the good-til-time specified.
What is the difference between an execution and a trade?
Execution: A state change on a single order (your order)
Trade: A matched event between two orders (aggressor and passive side)
A trade contains two executions - one for each side of the match.Are trades final immediately?No. Trades progress through states:
NEW: Initial matched state
CLEARED: Cleared through DCO
BUSTED: Voided post-execution by the exchange and the position reversed; terminal, and rare. Busted trades stay in history — treat them as reversed, don’t drop them. See Trade States.
What identifies a trade uniquely?tradeId - Use this for deduplication and reconciliation.
Important: A returned order ID with HTTP 200 does not guarantee the order was successfully processed. Failed orders don’t generate user-visible errors unless a required field is missing.
Always verify order status via the order stream or by querying the order status endpoint. Do not rely solely on HTTP 200 responses or returned order IDs.
The account specified in the order doesn’t exist or you don’t have permission to trade on it.Solution: Verify the account ID is correct and you have trading permissions.
The instrument you’re trying to trade has expired or is no longer active.Solution: Check the instrument status before placing orders. Use the reference data API to get current instrument information.
Your account doesn’t have enough funds to place the order.Solution: Check your account balance before placing orders. Consider the total notional value including fees. Note that risk checks are scoped per instrument - see Open Orders and Order Collateralization for how open orders and buying power interact.
This validates the order without submitting it, checking account permissions, balance requirements, price and quantity validity, and instrument status.
Is order submission synchronous? Order submission is synchronous (you get an immediate response), but final acceptance may be asynchronous, rejection can occur after initial acceptance, and final state is delivered via order status updates. Always monitor order status via order status endpoint and order subscription stream.
How are partial fills represented? Through executions: each execution updates cumulative quantity, remaining quantity calculated as original quantity minus cumulative quantity, order remains active until fully filled or canceled.Monitoring fills: Subscribe to order updates, track cumulativeQty and remainingQty fields, process execution reports as they arrive.
Implement order status monitoring: subscribe to order status updates via streaming API, poll order status for important orders, track partial fills and remaining quantity, handle unexpected cancellations. In particular, the exchange automatically cancels resting orders that are no longer fully funded after a fill elsewhere in your account - see Open Orders and Order Collateralization.
When orders are rejected: log the rejection reason, don’t automatically retry without fixing the issue, alert on repeated rejections, review rejection patterns to improve order logic.
When canceling multiple orders: use bulk cancel endpoints when available, handle partial success (some orders canceled, others failed), verify cancellation status for critical orders.
Orders can only be placed during market hours. Check the instrument trading schedule: pre-market, regular trading hours, post-market, and closed periods.
Set appropriate time-in-force (TIF) values: Day (order expires at end of trading day), GTC (Good-til-Canceled - order remains active until filled or canceled), IOC (Immediate-or-Cancel - execute immediately or cancel), FOK (Fill-or-Kill - execute entire order immediately or cancel).
Order operations have specific rate limits: maximum orders per second, maximum cancellations per second, maximum modifications per second.Exceeding these limits results in 429 errors. See Rate Limits for details.
Monitor order fills through Order stream (real-time updates on order status), Trade stream (individual fill notifications), and Position updates (reflected in position changes).Don’t rely on polling - use streaming APIs for real-time order updates.
Always test order logic in pre-production: same API behavior as production, test with dummy funds (no real money), verify order validation logic, test error handling.
When reporting order-related issues, include order ID (if available), timestamp, order parameters (instrument, side, quantity, price), account ID, expected behavior vs. actual behavior, and environment (dev, preprod, prod).
Assistant
Responses are generated using AI and may contain mistakes.