NexusFi: Find Your Edge


Home Menu

 



Trading Automation Fundamentals: Event Loop, Order Routing, and Python Execution

Overview #

Most traders who want to automate start with the strategy. That's backwards. The strategy is the easy part — write a signal, define entry and exit rules, test it. What kills automated systems isn't bad signal logic. It's the plumbing: how events flow, how orders route through a broker API, how state gets corrupted when a fill arrives out of order. Get that wrong and even a profitable strategy blows up your account.

This guide builds the infrastructure layer first. Event loop architecture, order routing mechanics, Python execution patterns — the fundamentals that determine whether your system survives contact with live markets.

The Event Loop: Why Traditional Code Fails in Trading #

Every automated trading system is a loop. Market data comes in, your strategy processes it, orders go out, fills come back. The question is what kind of loop.

A naive implementation does this synchronously: wait for tick, process tick, wait for fill, process fill. This works fine in backtesting because you control the clock. In live markets, ticks don't wait. A 1-millisecond data gap while your code is blocking on a broker API call can mean a missed signal, a duplicate order, or worse — a hung state where your system thinks it has an open order that was already filled.

The event loop pattern solves this by inverting control. Instead of your code calling functions and waiting for results, your code registers handlers and the event loop delivers events when they arrive. Your market data handler fires when new ticks come in. Your order update handler fires when a fill arrives. Your session timer fires at 16:00 to flatten positions. Nothing blocks.

Python's asyncio library implements this pattern natively. In trading systems, it means you can run a WebSocket connection to your data feed, handle order updates from your broker API, run housekeeping timers (session end, reconciliation, health checks), and process strategy logic — all in a single-threaded event loop, with no race conditions on your core state.

The key insight: one thread owns the state, events deliver updates to that thread, nothing else writes position or order data. The moment multiple threads write to your position tracker simultaneously, you have race conditions. You'll see phantom positions, doubled orders, corrupted P&L — bugs that appear randomly and are nearly impossible to reproduce.

The event-driven trading automation pattern is well-established for good reason. It maps perfectly to how markets actually work.

The Seven-Layer Architecture #

A production-grade futures trading system has seven layers. Each has a single responsibility. They communicate through events, not direct function calls.

Layer 1: Market Data Ingestor

Sits at the boundary between your system and the outside world. Connects to your data feed — whether that's a broker WebSocket, CQG, Rithmic, or DTN IQFeed — and normalizes everything into internal events.

Key responsibilities:

  • Subscribe to price updates, order book changes, trade data
  • Normalize symbols and contract specs (multiplier, tick size, session calendars)
  • Attach monotonic timestamps -- not just the exchange timestamp, but your local receive time
  • Detect data gaps and stale feeds, and halt trading when data quality degrades
  • Handle reconnections without losing state or sending duplicate signals

The market data handling layer is where most retail systems are weakest. Data gaps during high-volatility periods — exactly when you can least afford blind spots — are common. Build detection logic that recognizes when your feed has gone quiet longer than expected and halts strategy execution.

Critical implementation detail: use both exchange timestamp and local receive timestamp. This lets you calculate feed latency and detect anomalies like timestamps that arrive out of order.

Layer 2: Strategy Engine

The only layer that does signal logic. Consumes market events, maintains indicator state, emits order intents — not actual orders.

This separation is critical. The strategy engine shouldn't know what a broker API looks like. It says "I want to buy 2 ES at market" and emits that intent. The execution layer handles the mechanics of actually doing it.

A clean strategy engine takes only market events as input, maintains its own internal state (indicators, signal values, regime detection), never calls broker APIs directly, and is pure enough to run identically in backtest and live. That last point matters for backtest-to-live performance gap. When your strategy logic runs identically in both environments, the performance gap becomes about execution realism, not logic divergence.

Layer 3: Risk Engine

Every order intent goes through the risk engine before anything else sees it. This is your centralized gate.

Risk engine pre-trade control gate decision flow diagram showing five sequential checks: daily loss limit, max position size, order size sanity, price collar, and velocity check with PASS and FAIL outcomes
All five checks are synchronous -- the order either passes all five gates or is blocked. A HALT (daily loss, velocity) stops the entire system. A REJECT (size, collar) blocks just this order. The distinction matters: halts prevent cascading losses, rejects prevent individual bad orders.

Pre-trade checks the risk engine enforces:

  • Max position size -- absolute ceiling per instrument and in aggregate
  • Order size limit -- catches fat-finger errors (someone types 20 instead of 2)
  • Price collar check -- reject orders priced more than N ticks from the current market
  • Duplicate order prevention -- block orders with the same client order ID
  • Daily loss circuit breaker -- halt new orders if daily P&L is below the configured threshold

The automated risk controls implementation is where professional systems separate from amateur ones. Your risk engine should be synchronous with order creation — the order either passes the gate or it doesn't. No async approval processes.

Layer 4: Order Manager / Router

Takes approved intents and translates them into broker orders. Manages the entire lifecycle of every order.

Order lifecycle state machine diagram showing transitions from PENDING_CREATION through SUBMITTED, ACKNOWLEDGED, WORKING, to FILLED or error states REJECTED and CANCELLED
Every order passes through defined states. A WORKING order that hasn't received any update in 5+ minutes is a ghost order -- the watchdog cancels it and forces reconciliation. Missing this one state creates phantom positions that compound into account-blowing errors.

The order lifecycle for a simple market order:

PENDING_CREATION -- SUBMITTED -- ACKNOWLEDGED -- FILLED

or: SUBMITTED — REJECTED
or: ACKNOWLEDGED — CANCELLED

A limit order adds WORKING and PARTIAL_FILL states. Every state transition is logged with a timestamp. Every order has a client order ID (a UUID you generate, not the broker's order ID). This client order ID is how you maintain idempotency — if you lose connectivity and reconnect, you can query open orders and match them to your internal state by client order ID without accidentally re-submitting.

The automated order execution deep dive covers slippage management, order type selection, and smart routing. For fundamentals: always track orders by your ID, not the broker's. Brokers change order ID formats. Your client order ID is stable.

Retry logic: when a submit fails due to temporary network error, retry with the same client order ID. The broker will either process it or reject it as a duplicate. Either response tells you the true state of the order. Never submit a new order without first knowing whether the previous submission actually reached the broker.

Layer 5: Position Manager

The source of truth for what you actually own. Not what you intended to own — what you actually own according to fill confirmations.

The position manager updates from fill events from the order manager, and periodic position reconciliation from the broker. These two should agree. When they don't, you have a problem: either a fill came in that your order manager didn't capture, your order manager thought something filled that didn't, or there's a ghost position from a prior trading session.

Automated position management covers the full mechanics of size tracking, average price calculation, and P&L attribution. For the fundamentals: never assume your calculated position is correct without reconciling against the broker's position feed.

For futures specifically, the position manager must understand contract roll timing, margin requirements (initial vs. maintenance), and multiple expiry dates — don't conflate ESM26 and ESU26 as the same position.

Layer 6: Watchdog and Session Timer

No strategy logic here. This layer runs housekeeping on a timer: session-end flatten at your configured close time, cancellation of orphaned orders, broker connection health checks, and the periodic reconciliation loop.

@author="Breukelen" url="https://nexusfi.com/showthread.php?t=59175&p=876519#post876519" year="2022" forum="Elite Quantitative GenAI/LLM"

“My algo hit the kill switch, CME said no! Lady Luck Saved Me! I'm comfortable enough with the performance and fail safes of my algo that I do not spend all day watching it.”

The watchdog layer is what makes that kind of protection possible. It runs independently of your strategy and has unconditional authority to halt trading. The automated contract roll management process also lives here — checking whether today is a roll date and transitioning positions when needed.

Layer 7: Logger and Monitor

Every intent, every order action, every fill, every risk decision, every reconciliation diff — logged with timestamp, event type, and full context. Not print statements. Structured logging with correlation IDs that let you trace a single trade from signal generation through to final fill.

The trading bot monitoring guide covers dashboards, alerting, and real-time health metrics. For the foundations: log enough that you can reconstruct every decision the system made.

Seven-layer trading system architecture diagram showing event flow from market data ingestor through strategy, risk engine, order manager, position manager, watchdog, and logger layers
Each layer has exactly one responsibility. Events flow downward, fills flow upward. The critical rule: position state has one owner and one writer thread -- eliminating race conditions that corrupt P&L and generate phantom orders.

Python Execution: asyncio in Practice #

Python is the most common language for retail futures automation. It's readable, has excellent library support, and is fast enough for bar-to-minute frequency strategies. For tick-by-tick strategies needing sub-millisecond response times, you're looking at C++ or Rust. For everything else, Python works.

The core pattern for a Python trading system:

class TradingSystem:
    async def handle_market_event(self, event):
        intent = await self.strategy.process(event)
        if intent is None:
            return
        approved, reason = self.risk_engine.check(intent)
        if not approved:
            self.logger.warning(f"Risk block: {reason}")
            return
        await self.order_manager.submit(intent)

    async def run(self):
        await asyncio.gather(
            self.data_feed.subscribe(self.handle_market_event),
            self.broker.subscribe_fills(self.handle_fill),
            self.watchdog.run_timers()
        )

The asyncio.gather() runs all three coroutines concurrently in the same event loop, sharing the same object state. Because Python's asyncio is single-threaded, there are no race conditions — one coroutine runs at a time, yielding control only at await points.

Warning

If you use threading.Thread for blocking calls, that thread must NEVER write to position state directly. Put results on a queue that the asyncio event loop consumes. Break this rule and you'll have race conditions that show up only under load — the worst kind of bug.

Broker API Integration

The futures trading APIs guide covers the environment. The major options for retail futures traders:

Order type selection guide comparing market orders, limit orders, stop orders, and stop-limit orders by use case, slippage impact, and situations to avoid each type
Matching the right order type to the situation determines fill quality. Market orders guarantee execution, limit orders guarantee price. Stop-limit orders are dangerous as primary stop-losses -- if the market gaps through your limit, the order remains open while your loss grows.
Python technology stack for futures trading automation organized by system layer: data feed libraries, strategy tools, data storage, and monitoring, with use-case guidance for each option
Tool selection by layer -- not all layers need the same library. ib_insync for data feed (or rithmic-python if you need lower latency), asyncio for the event loop, pandas/numpy for indicators, TimescaleDB or InfluxDB for storage, Grafana for monitoring. The stack is standardized for a reason.

Interactive Brokers / ib_insync: the most flexible API for retail, wrapping the TWS API in asyncio-compatible coroutines. Requires running TWS or IB Gateway locally. Build strong reconnection logic — the gateway has quirks.

Rithmic: professional-grade solution used by prop firms. Lower latency than IB for futures. The protocol is binary and less documented. Worth the learning curve if you're trading ES or NQ seriously.

NinjaTrader: if you're building on NinjaScript strategy development, NinjaTrader handles the execution layer for you. The tradeoff: you're inside NT's execution model, which has its own behaviors to understand and work around.

The Reconciliation Loop

Even with perfect event handling, you need a reconciliation loop. Run it every 5 minutes. Query the broker's current positions and compare against your internal position state. If they disagree, halt trading on that symbol until you understand why.

Position reconciliation loop diagram comparing internal state vs broker state with match and mismatch scenarios and automated halt on discrepancy
The reconciliation loop runs every 5 minutes -- not just on demand. A mismatch between internal and broker position state means you don't know what you own. The system halts that symbol until the discrepancy is manually resolved.

@author="iantg" url="https://nexusfi.com/showthread.php?t=47162&p=720508#post720508" year="2019" forum="Elite Algorithmic NinjaTrader Trading"

“For testing a strategy you should only ever use market replay or live SIM. Strategy analyzer will only be in the ball park if you use really liquid instruments.”

The same principle applies to live position tracking. Never assume internal state is correct without an independent verification source.

Python asyncio event loop architecture showing data feed, broker API fills, and session timers delivering events to handlers that share position manager, order manager, and risk engine state safely in a single-threaded loop
Single-threaded asyncio eliminates race conditions -- all handlers share state safely without locks. The warning at the bottom is the critical one: if you use threading.Thread for blocking calls, NEVER let that thread write to position state directly.

Risk Controls: Non-Negotiable #

Every item in this section maps to a real story from someone who lost significant money because they skipped it.

Daily Loss Limit -- Hardcoded

Not configurable at runtime. Hardcoded in your system. When daily P&L hits this number, the system stops: cancels working orders, flattens positions, shuts down the strategy engine.

@author="MmmDeion" url="https://nexusfi.com/showthread.php?t=57078&p=841274#post841274" year="2021" forum="Psychology and Money Management"

“One suggestion that I don't believe has been made already is to have your broker or platform put in a daily loss limit. In Sierra Chart I know there's an option to restrict trading after you've lost $x per day. Extra form of risk management.”

@Big Mike noted the same pattern when discussing broker daily loss limit features:

@author="Big Mike" url="https://nexusfi.com/showthread.php?t=12824&p=144651#post144651" year="2011" forum="Brokers"

“A user can request their own personal daily loss limit with Velocity (ie: $500 or whatever) and VF will close a position when it reaches this, and prevent new positions from being opened.”

For automated systems, implement this yourself — don't rely solely on the broker's margin call process.

Velocity Checks and Platform Risk Controls

Set a hard cap on orders per second. More than N orders per second and something is wrong — either your strategy has a bug creating an order loop, or connectivity issues are causing retries to cascade.

@author="Liberty88" url="https://nexusfi.com/showthread.php?t=59736&p=884385#post884385" year="2023" forum="Platforms and Indicators"

“New Risk Management Settings built-in to NinjaTrader — Daily Loss Limit, Weekly Loss Limit, Daily Profit Trigger, Weekly Profit Trigger. Apparently when risk settings are locked, attempts to change them require a password.”

Platform-level controls are a safety net. Your system-level controls are the first line of defense. Both should be active.

The Kill Switch

A separate mechanism, hardcoded outside your strategy logic, that can stop everything. Fires automatically on: data feed outage, broker disconnect, daily loss limit breach, or reconciliation discrepancy. Cancels all open orders via market orders, flattens all positions, shuts down the strategy engine.

Kill switch decision tree showing four automatic triggers: data feed outage, broker disconnect, daily loss limit, and reconciliation mismatch, with resulting actions in sequence
The kill switch has four triggers and one action: stop everything. It runs outside strategy logic and cannot be disabled by strategy code. Manual un-pause is required after any kill switch activation -- automated restarts after an emergency halt are themselves an emergency.

@author="dsraider" url="https://nexusfi.com/showthread.php?t=2641&p=25933#post2593" year="2010" forum="NinjaTrader"

“I have put together a fully-automated, advanced strategy which does the following: 1. Only enters between 10:15 AM and 3:15 PM (EST). 2. Flattens position at end of day. 3. Includes emergency flatten (kill switch).”

The automated trading emergency protocols guide covers the full protocol including recovery procedures. Your kill switch must be reachable even when everything else has failed.

Futures-Specific Considerations #

Session Management

ES trades 23 hours a day on Globex. RTH (Regular Trading Hours) runs 9:30 AM to 4:15 PM ET. Your system must know which session is active, when session transitions happen (CME uses Central Time internally), and whether your position was opened in the current session or carried over.

ES futures session timeline showing four distinct sessions from Sunday 18:00 ET through Monday 17:00 ET with intraday margin differences, volume characteristics, and automated system action points at RTH open, pre-close, and session end
Session-end flatten at 16:00 ET is hardcoded in the watchdog -- not a strategy signal -- it runs unconditionally. RTH runs 9:30 AM to 4:15 PM ET (with intraday margin at 50% of overnight). The most dangerous time for automated systems is the 15:50-16:00 ET window -- positions entered there face overnight margin requirements.

Most retail strategies should close intraday before 16:00 ET for ES. Build this into your watchdog layer as a hard flatten event, not a soft signal from the strategy.

Contract Roll Logic

ES futures expire quarterly. Your system needs to know which contract is the front month, when the roll date is, and how to handle open positions during the roll. Automated contract roll management covers this in detail. For backtesting, use adjusted continuous contracts — but actual live trading happens in specific expiry contracts, not continuous synthetics.

Margin Calls and Intraday Margin Changes

CME intraday SPAN margin for ES is roughly 50% of the overnight requirement during RTH. Your position sizing logic must know the margin requirement at the time of entry. Build a margin checker into your pre-trade risk controls with at minimum a 20% safety buffer above the minimum requirement.

Backtest Reality: Where the Gap Lives #

Every automation trader eventually confronts this: your backtest looks great, but live trading underperforms.

@author="kevinkdog" url="https://nexusfi.com/showthread.php?t=61327&p=909140#post909140" year="2026" forum="The Elite Circle"

“In my own trading, I find the backtest to be a good match to real time. I compare them after the fact to ensure that is the case, after accounting for slippage.”

That's the professional discipline — treat the backtest as a hypothesis, verify against live results, reconcile the differences systematically.

The most common sources of backtest-to-live gap for automated systems:

Bar construction differences: most backtests use OHLCV bars. Live trading fires on individual ticks. If your entry logic triggers "at the open" of a new bar, the actual entry price in live trading may be several ticks different from the bar open.

@author="Big Mike" url="https://nexusfi.com/showthread.php?t=15578&p=173946#post173946" year="2011" forum="Elite Algorithmic NinjaTrader Trading"

“Automated DayTrading: Market Replay vs. Live SIM. Why are results different? The differences are fundamental to how NinjaTrader processes data in each mode.”

Fill assumption: backtests typically assume you fill at the bid/ask. Live markets don't guarantee fills at the limit price even when the market trades at your price — queue position matters. For liquid instruments like ES, assume you fill at the next price after your limit if you're entering at market-moving times.

Slippage on exits: if your backtest shows a 1-tick stop and you're trading 5+ contracts, you're going to have slippage on exit. @MWinfrey's analysis on SuperTrend Bot testing covers the methodology:

@author="MWinfrey" url="https://nexusfi.com/showthread.php?t=14692&p=172070#post172070" year="2011" forum="Elite Algorithmic NinjaTrader Trading"

“Some things you might consider doing to help your back testing be closer to forward testing. Session template needs to be the same between each of your forward and backward runs. Shorter-term systems are always more sensitive to slippage.”
Backtest-to-live gap analysis showing four root causes: bar construction mismatch, fill assumption error, stop slippage at size, and reconnect state corruption with typical gap impact and specific engineering fix for each
The four causes account for 90% of backtest-live gaps. Bar construction mismatch is the most common (1-3 ticks per trade). Reconnect state corruption is the rarest but most catastrophic -- a single reconnect with wrong position state can cost more than the gap all four other causes combined.

From Paper to Live: The Progressive Rollout #

Don't flip a switch and go live with real capital. The progression is:

Stage 1: Backtesting — full historical simulation with realistic fills and slippage assumptions. Reference backtesting trading strategies for fill modeling standards.

Stage 2: Market Replay — live data feed, your orders execute against historical data. Tests your data feed integration and order management code without real money.

Stage 3: Paper Trading — live data feed, simulated execution against the live market. Your system operates identically to live mode — same code path, same event loop, same risk controls — but orders don't go to the exchange. Run this for at minimum 2-4 weeks. Reference paper trading and simulation for what to measure.

Stage 4: Minimum Size Live — one contract, tight risk controls, full monitoring. Run for 30+ trading days. Compare live fills to what your paper trading system would have gotten on the same signals.

Stage 5: Scaling — only after Stage 4 is validated do you scale up. Add one contract at a time. Re-validate at each new size level.

The algo trading live deployment guide covers the full validation framework including statistical tests for when you have enough live data to make scaling decisions.

Five-stage progressive rollout diagram from backtesting through market replay, paper trading, minimum size live trading to full scale deployment, showing what each stage tests and what failure mode it catches
Each stage costs time, not money. Skipping Stage 2 (Market Replay) costs both when connectivity bugs surface in live trading. Skipping Stage 3 (Paper Trading) means you discover your session management code is broken at 15:50 ET with real capital on the line.

Common Failure Modes and Their Engineering Solutions #

Ghost positions: positions your system thinks you have but don't exist at the broker. Cause: position update event lost during reconnect. Solution: reconciliation loop that halts trading on any discrepancy.

Duplicate orders: the same order submitted twice because the first submission's ACK was lost. Solution: client order IDs with idempotency checks. Before retrying any submission, query open orders by client order ID.

Hung state: an order in WORKING state for longer than it should be. Cause: fill event was lost or order was silently cancelled by the exchange. Solution: watchdog timer that cancels orders not seen in any update within N minutes.

Strategy re-entry after kill switch: after your kill switch fires, the strategy should not re-enter. Build a "paused" state into your strategy engine that requires explicit human action to un-pause after an emergency halt.

Timestamp drift: your system's clock drifts from exchange time, causing events to appear out of order. Solution: NTP synchronization and monitoring of the delta between exchange timestamp and local receive timestamp.

The latency and infrastructure guide covers infrastructure-level solutions including clock synchronization and network configuration.

The Minimum Viable Architecture #

If you're building from scratch, here's the simplest version that covers all the critical bases:

  1. Logger -- structured JSON events with correlation IDs. Build first.
  2. Position Manager -- updates from fills only, reconciliation built in.
  3. Risk Engine -- daily loss, max size, price collar. Hardcoded. Synchronous.
  4. Order Manager -- state machine per order. Client order IDs. Idempotent retry.
  5. Market Data Ingestor -- WebSocket to data source. Stale feed detection. Reconnection.
  6. Watchdog + Timers -- session-end flatten. 5-min reconciliation. Stale data halt.
  7. Strategy Engine -- process events, emit intents, pure logic, no broker calls.

This is seven components, and every one of them exists because something went wrong for someone without it.

The order matters. Don't build the strategy first.

  1. Build the logger first. Every other layer emits events to it.
  2. Build the position manager second. This is the source of truth your risk controls reference.
  3. Build the risk engine third. Hardcode your limits. Do not make them runtime-configurable for the initial build.
  4. Build the order manager fourth. Test it against paper trading before connecting to live capital.
  5. Build the market data ingestor fifth. Now you're connected to a real feed.
  6. Add watchdog sixth. Session hygiene and recovery -- runs independent of strategy.
  7. Add strategy logic last. The infrastructure was the hard part. The strategy slots into the top of a system that already handles all the mechanics.

This sequence is backwards from how most traders build it. Most traders write the signal logic first and bolt on infrastructure as problems emerge. The professional approach is infrastructure first — you get a strong foundation that the strategy runs on top of.

Build the foundation. The strategy is the easy part. The trading system architecture guide shows how these components connect at the codebase level with concrete implementation patterns.

Minimum viable architecture build order table showing seven components from Logger through Strategy Engine with core responsibility and the reason each component must be built in that specific sequence
Six of the seven components exist to keep the strategy from destroying your account. The strategy is last because it's the easy part. Every trader who built the strategy first and bolted on infrastructure later has a story about when the infrastructure gap cost them real money.

Citations

  1. @BreukelenMy algo hit the kill switch, CME said no! Lady Luck Saved Me! (2022) 👍 6
    “Today has been an interesting trading day! I'm comfortable enough with the performance and fail safes of my algo that I do not spend all day watching it.”
  2. @MmmDeionI finally blew up an account (2021) 👍 9
    “One suggestion that I don't believe has been made already is to have your broker or platform put in a daily loss limit.”
  3. @Liberty88New Risk Management Settings built-in to NinjaTrader (2023) 👍 6
    “Daily Loss Limit, Weekly Loss Limit, Daily Profit Trigger, Weekly Profit Trigger. Lock risk settings if trading locked.”
  4. @Big MikeDaily Loss Limit (2011) 👍 6
    “A user can request their own personal daily loss limit with Velocity (ie: $500 or whatever) and VF will close a position when it reaches this.”
  5. @iantgBig Discrepancies in Execution between Strategy Analyzer and Market Replay (2019) 👍 5
    “Yeah, for testing a strategy you should only ever use market replay or live SIM. Strategy analyzer will only be in the ball park if you use really liquid instruments.”
  6. @Big MikeAutomated DayTrading: Market Replay vs. Live SIM. Why are results different? (2011) 👍 10
    “I am also answering specifically with NinjaTrader in mind since that is what you are using and what I am most familiar with.”
  7. @MWinfreySuperTrend Bot Contest and Testing (2011) 👍 12
    “Some things you might consider doing to help your back testing be closer to forward testing. Session template needs to be the same between each of your forward and backward runs.”
  8. @kevinkdogBacktesting the right way (2026) 👍 4
    “In my own trading, I find the backtest to be a good match to real time. I compare them after the fact to ensure that is the case, after accounting for slippage.”
  9. @dsraiderSample Advanced Automated Strategy v1.0 (2010) 👍 35
    “I have put together a fully-automated, advanced strategy which includes a kill switch and only enters between 10:15 AM and 3:15 PM (EST).”

Help Improve This Article

NexusFi Elite Members can help keep Academy articles accurate and comprehensive.

Unlock the Full NexusFi Academy

832 in-depth articles across 17 categories — written by traders, backed by community research. Includes knowledge maps, citations with community excerpts, and the ability to help improve articles.

We add approximately 297 new Academy articles every month and update approximately 614 with fresh content to keep them highly relevant.

Strategies (91)
  • Order Flow Analysis
  • Volume Profile Trading
  • plus 89 more
Market Structure (44)
  • Initial Balance: The First Hour That Defines Your Entire Trading Day
  • Opening Range: Why the First 15 Minutes Define Your Entire Trading Session
  • plus 42 more
Concepts (44)
  • Futures Order Types: Market, Limit, Stop, and Conditional Orders
  • High Volume Nodes & Low Volume Nodes
  • plus 42 more
Exchanges (44)
  • Futures Exchanges: Understanding Where and How Futures Trade
  • plus 42 more
Indicators (56)
  • Delta Analysis & Cumulative Volume Delta (CVD)
  • Market Internals: Reading the Broad Market to Trade Index Futures
  • plus 54 more
Risk Management (44)
  • Risk Management for Futures Trading
  • Position Sizing Methods for Futures Trading
  • plus 42 more
+ 11 More Categories
832 articles total across 17 categories
Instruments (60) • Automation (44) • Data (43) • Platforms (54) • Psychology (45) • Prop Firms (45) • Brokers (44) • Prediction Markets (43) • Regulation (44) • Cryptocurrency (44) • Infrastructure (43)
Become an Elite Member


© 2026 NexusFi®, s.a., All Rights Reserved.
Av Ricardo J. Alfaro, Century Tower, Panama City, Panama, Ph: +507 833-9432 (Panama and Intl), +1 888-312-3001 (USA and Canada)
All information is for educational use only and is not investment advice. There is a substantial risk of loss in trading commodity futures, stocks, options and foreign exchange products. Past performance is not indicative of future results.
About Us - Contact Us - Site Rules, Acceptable Use, and Terms and Conditions - Downloads - Top