Operator's User Guide
Everything you need to run Intellect FinLab day-to-day. Starting the system, reading the dashboard, configuring strategies, managing risk shields, running backtests β step by step with no prior technical knowledge assumed.
Once started, the system manages the entire trade cycle β signal detection, strategy evaluation, risk checks, order placement, position monitoring, and wealth accounting β without manual intervention.
Operator dashboard: http://localhost:5173 (dev mode). FastAPI backend: http://localhost:8000. API docs: http://localhost:8000/docs. Both processes must be running for the dashboard to work.
http://localhost:5173. Navigate to Health Monitor. Confirm all indicators are green: IBKR Connected β Β· Scanners Active β Β· Market Data Fresh β Β· Market Gate OPEN β.Always stop before market close (15:55 ET) or ensure EOD Force Close (Rule 5) is enabled. If stopped with open positions, restart immediately β LP will resume monitoring.
| Setting | Paper | Live |
|---|---|---|
| IBKR Port | 7497 β TWS paper | 7496 β TWS live (real money) |
| Capital | Virtual β no real risk | Real money β full risk |
| Wealth DB | runtime/paper/intellect.db | runtime/live/intellect.db |
| Switch via | Config Console β Environment Settings | |
Before switching to Live: at least 20 paper trades with β₯ 80% win rate on the active strategy Β· all 8 backtest gates passed Β· LP shields configured Β· daily loss limit set Β· emergency stop procedure understood.
Your primary operator window β keep it visible during the entire trading session. Red indicators require immediate attention.
Keep the Health page open on a second monitor during trading. A yellow LED on any instrument feed means its data is stale β scanners for that instrument will stop firing automatically.
Real-time reverse-chronological stream of every system event. Colour-coded by type. The fastest way to see exactly what the system is doing right now.
When you see PREFLIGHT_BLOCK, click the event to expand the detail. It shows exactly which of the 8 risk gates triggered the block and the current value vs the configured limit.
Full trade history with drill-down into the complete Trade Story for any trade β every state machine transition, fill details, greek values at entry, LP events, close attribution.
Click any trade β Trade Story opens. You'll see every state transition with exact timestamps, which scanner fired, what greeks were at entry, how LP behaved, and what triggered the close. Nothing is hidden.
Aggregated portfolio risk view β when multiple positions are open simultaneously, this page shows your combined exposure and proximity to risk limits.
All open positions with live mark-to-market, current greeks, LP status, and entry details. Every row links to the full Trade Story. Refreshes every market tick.
| Column | Shows |
|---|---|
| Symbol / Strike | Contract β e.g. SPX 5940C 0DTE |
| Entry / Current Price | Fill price vs live mark |
| Unrealised P&L | Live value minus entry cost |
| Greeks (Ξ Ξ Ξ IV) | Current from GreekCache |
| LP Status | ARMED / GRACE / trail price |
| Target (T1) | Limit sell price in market |
Live wealth model progression β current capital vs weekly target, compounding curve chart (plan vs actual), milestone tracker, trade diary, and model selection.
Post-mortem analytics β scanner leaderboard, hour-of-day heatmap, equity curve with drawdown, instrument breakdown, win/loss streak analysis.
Full backtesting against 2 years of 1-min history. Scanner library, rule builder, AI discovery, equity curves, wealth replay. Onboard directly to paper when 8 gates are green.
Reading Health Indicators
Use the Live Feed to verify the trade pipeline is working: you should see SCANNER β PREFLIGHT PASS β SUBMIT β FILL within ~50ms of a scanner fire. If you see PREFLIGHT BLOCK, expand the event to see which risk gate blocked and why.
Use Trade Story to audit any trade: verify the correct scanner fired Β· confirm greeks were within expectations Β· check LP was armed correctly at fill Β· verify PnL attribution matches the wealth model entry Β· trace any anomaly to its source event.
| Column | What It Shows |
|---|---|
| Symbol / Strike | Contract identifier β e.g. SPX 5940C 0DTE |
| Entry Price | Fill price paid at entry |
| Current Price | Live IBKR mark price β refreshes every tick |
| Unrealised P&L | Live value minus entry cost β green = profit, red = loss |
| Greeks (Ξ Ξ Ξ IV) | Current option greeks from GreekCache |
| LP Status | ARMED = LP daemon running Β· GRACE = in grace period Β· trail price if applicable |
| Target | Limit sell price (T1) β the exit target in market |
| Hold Time | Elapsed time since fill |
Always click Save after changing any setting. Look for the green "Saved β" confirmation before navigating away. The config version history lets you see what changed and when β and roll back if needed.
| Config Domain | What You Configure |
|---|---|
| Instruments / Options | Per-instrument delta targets, entry windows, gamma bounds, call/put toggles |
| Strategies | Scanner patterns, profit targets, shields, Veera Rules, Hunter mode, priority |
| Scanners | Enable/disable, cooldowns, per-scanner alert settings |
| Risk / Stop Loss | Grace period, EOD close time, 3:30PM handling, daily loss limit |
| Wealth | Active wealth model, current week, capital override |
| Alerts | Telegram tokens, chat IDs, SMTP credentials, per-event toggles |
| Environment | Paper / Live switch, market gate toggle |
| Setting | What It Does | Start Value |
|---|---|---|
| Delta (Call) | Target delta for call strike selection. Higher = more ITM, more expensive. Lower = more OTM, cheaper, faster % gain potential. | 0.30 |
| Delta (Put) | Target delta for put strike selection. | 0.25 |
| Contract Type | 0 = 0DTE Β· 1 = weekly Β· 2 = monthly. 0DTE is the primary strategy. | 0 |
| Entry Start | Earliest allowed entry. Don't enter at the open β let price discover first. | 09:45 ET |
| Entry End | Latest allowed entry. LP handles everything after this cutoff. | 15:00 ET |
| Gamma Upper Bound | Max net gamma across all positions. Prevent over-exposure to sudden moves. | 0.15 |
| Call Side Enabled | Toggle call entries without affecting put side. | ON |
| Put Side Enabled | Toggle put entries without affecting call side. | ON |
| Setting | What It Does |
|---|---|
| Enabled | Toggle strategy on/off. Off = skipped entirely in evaluation cycle. |
| Scanner Patterns (Call) | List of scanner names that trigger a CALL entry. E.g. ["SPX_FIB_1HR_CALL", "SPX_ADX_5M"]. Multi-scanner = confirmation window applies. |
| Scanner Patterns (Put) | Same for PUT entries. |
| Target Profit % | Exit target as percentage of entry. 23 = +23%. Places the limit sell order. |
| Shield | rapid_shield = fast intraday exit on drawdown. day_shield = daily loss ceiling. null = global LP rules. |
| Wealth Model Override | Force this strategy to use a specific capital plan regardless of global active model. |
| Veera Rules | Master toggle for market regime pre-filter. Individual rules toggled separately. |
| Hunter Mode | standard = immediate entry. context_plus_trigger = needs context + trigger within window. |
| Priority | 1 = highest priority. Evaluated first. Use 1 for your best strategy. |
| Confirmation Window | Minutes within which all scanner patterns must fire. Default: 5 min. |
| Setting | Effect |
|---|---|
| Enabled | Disabled scanner is skipped entirely β no signals, no alerts, zero CPU cost. |
| Cooldown (seconds) | Min time between fires. Higher cooldown = fewer false signals from the same scanner in a short window. |
| Email alert when this scanner fires. Subject to global email_all master toggle. | |
| Telegram | Telegram alert on fire. Subject to global telegram_all master toggle. |
| ES Only Mode (global) | When ON: only ES + test scanners run. Use for off-hours trading or maintenance. |
| Email All (global) | Master email switch. OFF = no emails from any scanner regardless of individual setting. |
| Telegram All (global) | Master Telegram switch. OFF = no scanner Telegrams. |
| Setting | Location | Purpose |
|---|---|---|
| Telegram Bot Token | config_meta | Main bot β trade fills, LP events, session summaries |
| Telegram Chat ID | config_meta | Main bot destination channel or DM |
| Scanner Bot Token | config_meta | Secondary bot β scanner fire events only (separate channel) |
| Scanner Bot Chat ID | config_meta | Scanner bot destination |
| Email SMTP | config/email_config.yaml | SMTP host, port, credentials, from/to addresses |
The Scanner Bot keeps your main alert channel clean. Route scanner fire events to a dedicated "signals" Telegram channel, and keep your main channel for trade-critical events only (fills, closes, LP triggers). Much easier to monitor during active trading.
| Parameter | Default | Effect |
|---|---|---|
| grace_period_minutes | 15 | Protect the limit sell order from modification for this many minutes after fill. Prevents premature breakeven modification. |
| eod_close_time | 15:55 | EOD force-close time. Market sell placed at this exact time. Non-negotiable. Set slightly before market close. |
| eod_position_handling | modify_to_entry | At 3:30PM: modify_to_entry (moves sell to breakeven+), alert_only, or force_close. |
| eod_330_enabled | true | Enable 3:30PM handling logic. |
| breakeven_profit_pct | 0.01 (1%) | Breakeven buffer β sell is moved to entry + this % at 3:30PM. |
| unclosed_alert_interval | 30 min | Alert every N minutes if position remains open (Rule 3). |
| fast_poll_minutes | 10 | Duration of fast poll phase β every 5s in this period. |
| normal_poll_seconds | 30 | Poll interval after fast phase expires. |
| price_feed_zero_threshold | 8 | Emergency close after this many consecutive zero price readings (Rule 6). |
| Setting | Purpose |
|---|---|
| Active Model | Which WM plan is active: WM235K / WM2310K / WM2320K. Determines weekly target amounts and ladder sizing. |
| Current Week | Which week of the plan you're in. Auto-advances when weekly target is reached. Can be manually set if recovering from a gap. |
| Current Capital | Starting capital for this week. Set manually at week start if needed. Auto-updated after each trade. |
| Ladder Level | Current sizing level (trade_start / T1 / T2 / T3). Auto-advances when milestone hit. Can be manually reset. |
Format: BOUGHT [SYMBOL] [STRIKE] @ [PRICE] Β· delta [Ξ] Β· T1: [TARGET] (+[%]) Β· Trade #[N]
This confirms the buy order filled. Check delta is near your target and T1 is set. If you see "slippage: HIGH" investigate price feed freshness.
Format: SOLD [SYMBOL] [STRIKE] @ [PRICE] Β· [+/-PnL] Β· [%return] Β· Hold [time] Β· [REASON]
REASON is the close attribution: T1_TARGET / TRAIL_STOP / EOD_FORCE / MANUAL. Check PnL matches your wealth tracker. Hold time should match your strategy expectation.
This fires every 30 minutes (configurable) when a position remains open. Not an emergency β just a reminder. Check the Positions page for current status. If the position is far from target, consider whether 3:30PM handling will kick in.
Daily loss limit was hit. The gate auto-closed β no new entries will be placed. Existing positions continue to be monitored by LP. Review your loss and decide whether to manually re-open the gate (Config β Environment β Market Gate).
Rule 5 fired at 15:55 ET. A market sell was placed for all open positions. This is non-negotiable β the system will not hold any position into the close. PnL from this close may be at-market prices which can vary from limit estimates.
1. Check TWS is running and logged in. 2. Verify API is enabled: Edit β Global Config β API β Enable Active X. 3. Check port matches environment (7497 paper / 7496 live). 4. Restart the engine: ./scripts/start_intellect.sh restart. 5. Check logs: tail -f logs/main.log
1. Check market data freshness on Health page β stale data means no scanner conditions met. 2. Check if the scanner has a long cooldown set in Config β Scanners. 3. Check if ES Only Mode is enabled and blocking SPX scanners. 4. Check scanner logs: tail -f logs/scanners.log. 5. Verify strategy has at least one enabled scanner in its patterns list.
Check the Live Feed for PREFLIGHT_BLOCK events. Expand the event to see which risk gate blocked. Common causes: Market Gate CLOSED Β· daily loss limit hit Β· existing position in same instrument Β· gamma exposure limit reached Β· stale price feed.
IBKR may have rejected the order. Check TWS order monitor for rejection message. If rejected: the system will log ORDER_FAILURE and cancel automatically. If the order is live but unfilled β it's likely a limit order waiting for price. Check if instrument is in RTH (market hours gate).
1. Check FastAPI backend is running on port 8000: ./scripts/start_intellect.sh status. 2. Check frontend console for CORS or network errors. 3. Try refreshing β WebSocket reconnects automatically. 4. Check logs/main.log for backend startup errors.
Pre-Market (8:00β9:30 ET)
./scripts/start_intellect.sh startDuring Market (9:30β4:00 ET)
./scripts/start_intellect.sh stop