All Market Conditions
| Strategy Type | Trade Execution Infrastructure |
| Market Outlook | All Market Conditions |
| Risk Level | Infrastructure - Reduces Execution Risk |
| Time Horizon | Real-time Order Processing |
| Best Conditions | Essential for systematic and algorithmic trading |
| Avoid When | Never - OMS is foundational infrastructure |
| Exchanges | New York Stock Exchange - Equities, ETFs • NASDAQ - Equities, ETFs, options • Cboe - Options and index products • CME Group (CME/CBOT/NYMEX/COMEX) - Futures and commodities |
| Order Types Supported | Execute immediately at best available price • Execute only at specified price or better • Stop - Trigger order when price reaches level • Stop Market - Market order after trigger • Stop Limit - Limit order after trigger • Pre-market/after-hours order outside the regular session • Good-Til-Cancelled - Stays active until filled or cancelled |
| Trading Sessions | 4:00 AM - 9:30 AM ET (pre-market trading) • 9:30 AM - 4:00 PM ET • 4:00 PM - 8:00 PM ET • Orders accepted nearly 24/7 for the next session; extended hours 4:00 AM - 8:00 PM ET |
| Product Types | Cash Account - full payment, no leverage, hold indefinitely (no auto-close) • Day-Trade Margin - up to 4:1 intraday buying power (PDT rules); reduce by close or it carries to overnight margin • Margin Account - Reg T 2:1 overnight for equities; SPAN/portfolio margin for futures/options |
| Regulatory Requirements | Account/customer ID tagged on all orders (CAT customer/account ID) • Order events reported to the Consolidated Audit Trail (CAT); MPID for direct access • Complete order audit trail required • Broker pre-trade risk controls under SEC Rule 15c3-5 (no per-algo SEC pre-approval for retail) |
| Broker Apis | IBKR API (TWS / Client Portal) • Schwab API (thinkorswim) • Alpaca Trading API • Tradier API • E*TRADE API • tastytrade API |
For basic trading, your broker's platform (e.g., thinkorswim, Interactive Brokers, Fidelity Active Trader Pro) serves as your OMS - it handles orders, tracks positions, and maintains records. A separate OMS becomes valuable when you need: automation (strategies that place orders), multi-broker trading, advanced execution algorithms, or custom risk controls. Start with broker tools, add a custom OMS as your needs grow.
If detected before submission (by OMS validation), the order is rejected with an error message. If sent to exchange with wrong details: wrong symbol means you buy/sell the wrong stock, wrong quantity means over/under exposure, wrong price might result in no fill (limit too far) or poor fill (market order). Always double-check before confirming. Use OMS validation to catch errors automatically.
Common rejection reasons: insufficient buying power (need more funds), price outside the exchange price bands / Limit Up-Limit Down (price too far from the last trade), invalid quantity (e.g., fractional contracts for futures), market closed (tried to place during a session that doesn't allow that order type), symbol halted (stock temporarily not tradeable). Check the rejection message for the specific reason. Address the issue and retry.
Check order status in your broker platform or OMS. Status 'Complete' or 'Filled' means fully executed. 'Partially Filled' means some quantity filled. You'll also see the fill price and time. Position will update to reflect new holding. Good brokers also send notifications (app push, SMS) on fills. Don't rely on memory - always verify status.
Modifying changes order parameters (price, quantity) while keeping it active. Useful when market moved and you want to adjust your limit price. Cancelling removes the order entirely - it won't execute. Use cancel when you no longer want the trade at all. Some orders can't be modified (market orders in progress), and you can only modify pending orders, not filled ones.
GTC (Good-Til-Cancelled) orders stay active until filled or cancelled - typically up to 60-90 days depending on the broker (not indefinitely). Place a GTC order with the price and details. For a target-and-stop exit, place a bracket/OCO order (one-cancels-other) so that if the target fills, the stop is automatically cancelled (and vice versa). If your broker only supports plain GTC orders without OCO linkage, remember to cancel the other order manually when one triggers. Some brokers also offer conditional orders that trigger on a price, an indicator, or another symbol.
High volatility means larger price swings and potential slippage. Strategies: Use limit orders instead of market to control price, but accept they might not fill. Use smaller position sizes (normal market impact is amplified). Avoid immediate order placement after major news - wait for initial volatility to settle. Have wider stops to avoid being stopped out by noise. Consider using TWAP to spread execution. Most importantly, be prepared for worse fills than normal.
Daily process: Export positions from each broker (API or manual download). Import into central spreadsheet or database. Aggregate by symbol to get net position across brokers. Compare with your OMS records. Investigate discrepancies. For automation: use each broker's API to fetch positions, aggregate in code, compare with OMS, generate exception report. Consider using portfolio management tools that aggregate across brokers automatically.
Corporate actions change position quantity and/or cost basis. Split: Quantity multiplies, cost per share divides. 2:1 split doubles shares, halves cost. Bonus: Additional shares added at zero cost, average cost decreases. Dividend: No position change, but P&L affected. Your OMS should either auto-adjust based on corporate action calendar, or alert you to make manual adjustments. Verify against broker records after any corporate action - they're the source of truth.
A Stop (Stop-Market) order triggers a market order when the stop price is hit - you definitely exit, but at whatever price is available (it can slip in fast markets). A Stop-Limit order triggers a limit order - you control the maximum slippage, but might not exit if the price moves past your limit too fast. Use a Stop-Market when exit is critical (protecting against a big loss) and you accept slippage. Use a Stop-Limit when you'd rather risk not filling than get a bad price. For volatile stocks or important stop losses, a Stop-Market is usually safer.
Smart Order Routing (SOR) selects the optimal execution venue based on price, liquidity, and costs. Implementation: Maintain connections to multiple broker APIs. Before order submission, query the order book/last price from each broker's feed. Compare best bid/ask across venues. Factor in: fee/commission differences, venue preference (NYSE vs NASDAQ vs other lit venues and ATSs), execution probability. Note that US equities are subject to Reg NMS order-protection (best-price) rules, and brokers must seek best execution. Route to the best venue. For partial fills, consider continuing on the same venue or re-routing the remainder. Build an abstraction layer so the core OMS doesn't change when adding/removing brokers. Monitor execution quality to calibrate routing decisions.
High-throughput architecture: Horizontal scaling - multiple order gateway instances behind load balancer. In-memory processing - validation, risk checks in memory (Redis/Aerospike), not database. Async processing - log to queue (Kafka), persist asynchronously. Connection pooling - maintain persistent connections to brokers. Batch where possible - combine multiple orders in single API call if broker supports. Measure and optimize - profile every component, eliminate bottlenecks. Typical stack: Rust/C++ for latency-critical paths, Kafka for event streaming, Redis for real-time state, TimescaleDB for historical data.
Integration architecture: Pre-trade integration - OMS calls risk system before every order. Risk system evaluates position limits, margin, portfolio impact, returns approve/reject with reason. Must be synchronous and fast (<5ms). Real-time integration - risk system subscribes to all fill events from OMS, maintains shadow positions, monitors against limits, can send 'reduce position' or 'kill' commands back to OMS. Post-trade - risk system receives end-of-day positions, performs reconciliation, calculates VaR/Greeks for overnight risk. Use message queue (Kafka) for loose coupling but ensure critical paths are synchronous for real-time control.
US requirements relevant to algorithmic trading: Market Access Rule (SEC Rule 15c3-5) - brokers providing market access must maintain pre-trade financial and regulatory risk controls (the broker enforces these; there is no per-algo SEC pre-approval for retail). Consolidated Audit Trail (CAT) - order and execution events are reported for regulatory reconstruction. Account/customer identification - orders carry account identifiers; direct access uses an MPID. Order-to-trade and messaging - exchanges monitor excessive messaging/order-to-trade ratios. Books and records - SEC Rules 17a-3/17a-4 retention (generally 3-6 years). Kill switch and supervision - maintain the ability to halt trading immediately; broker-dealers have supervisory obligations and Reg SCI applies to key systems. Best execution and Reg NMS - route to satisfy best-execution and order-protection rules. Implement these controls in the OMS and keep documentation for any regulatory query.
Idempotency ensures same request produces same result regardless of how many times sent. Implementation: Client assigns unique idempotency key to each order request. OMS stores key with order record. On receiving request, OMS checks if key exists. If exists, return existing order status (don't create new order). If not, process normally and store key. Key storage should be fast (Redis) with TTL (24 hours typical). For crash recovery, ensure key is stored before order submission. Handle edge cases: order created but not submitted (network failure) - use transaction or two-phase approach. Test with deliberately duplicated requests to verify behavior.
Full guided lessons, quizzes, and a complete strategy library for the United States market. One-time purchase. No subscription, ever.
Get United States access →