The Trade Director
The Trade Director is a portfolio-level orchestration system that coordinates the execution of multiple strategies simultaneously. It provides centralised risk management through a configurable filter chain.
Standalone vs Trade Director execution
Understanding this distinction is critical for interpreting backtest results.
Standalone mode (no filter)
algo run --strategy kbt --symbols @ES,@NQ,@GCEach symbol runs as a completely independent backtest:
- Each symbol gets its own copy of initial capital
- 3 symbols with $100K capital simulates $300K total
- No coordination between symbols during execution
- Results are combined only for reporting
Trade Director mode (with filter or config)
algo run --strategy kbt --symbols @ES,@NQ,@GC --filter max-positionsAll strategies share a single coordinated portfolio:
- All symbols share one pool of initial capital ($100K total)
- Strategies compete for the same capital
- Filters coordinate trades across all strategies
Even if a filter approves all trades, results differ from standalone mode because the capital allocation model is fundamentally different:
| Aspect | Standalone Parallel | Trade Director |
|---|---|---|
| Capital allocation | Each symbol gets full initial capital | All symbols share single initial capital |
| Position tracking | Independent per symbol | Coordinated across portfolio |
| Filter evaluation | None | Sequential, portfolio-aware |
| Execution mode | Truly parallel goroutines | Sequential (for portfolio-dependent filters) |
| Total simulated capital | N symbols x initial capital | 1 x initial capital |
Engaging the Trade Director
The Trade Director is engaged automatically when you use:
--filteron the command line--configwith a config file containing afilterssection
Execution modes
| Mode | Description |
|---|---|
auto | Automatically selects based on filter requirements (default) |
parallel | Strategies run independently in separate threads (fastest) |
sequential | Strategies run in coordinated order with shared portfolio state |
The execution mode is automatically adjusted based on filter compatibility:
- No filters or all filters parallel-compatible: Parallel mode (64 workers)
- Any filter requires portfolio state: Sequential mode (automatic fallback)
- User specifies
--execution-mode sequential: Sequential mode (explicit)
Parallel-compatible filters (allow parallel execution):
nil– passthroughweekday– day-of-week filteringvolatility– volatility threshold filteringposition-size(infixedmode only)
Portfolio-dependent filters (require sequential mode):
max-positions– portfolio-wide position limitsasset-class– asset class exposure limitscategory– category exposure limitsvar– portfolio value at risk limitsrisk-budget– percentage-of-equity risk budgetsatr-position-size– ATR-based volatility position sizingposition-size(inrisk-parityorequal-weightmode)
Execution mode errors
If you force parallel mode with incompatible filters, an error is raised at startup:
Error: cannot use parallel mode with filters: [max-positions, var]
Hint: remove --execution-mode=parallel or use only parallel-safe filtersIf a strategy queries portfolio state while running in parallel mode:
Error: Portfolio query not available in parallel execution modeBar coordination
The Trade Director uses a 1-minute time grid in UTC to ensure deterministic execution across strategies with different bar intervals and timezones. For each minute:
- Check which strategies have bars completing at this moment
- Execute those strategies to generate orders
- Process orders through the filter chain
- Execute approved orders
- Update portfolio state