AutoTrader scans IBKR in real time and trades one backtested pattern — flag_breakout — across two autonomous personalities. No LLM sits in the live decision path. Every entry, exit, and risk limit is mechanical, deterministic, and configurable from the UI.
A PyQt6 desktop app you run on your own machine against your own IBKR account. Swipe through the real working surfaces — scanner, strategy config, analytics, and backtesting.
Every trade is the output of a deterministic 6-stage pipeline — no LLM, no discretion. The same code runs live and in backtest, so what you validate is exactly what executes.
Subscribe to multiple IBKR scanner codes in parallel — HIGH_OPEN_GAP, TOP_PERC_GAIN, HOT_BY_VOLUME, and more. Tickers are filtered in real time on % change, volume, price and spread, then evaluated bar-by-bar against the active flag_breakout setup.
HIGH_OPEN_GAP and TOP_PERC_GAIN scanners surface tickers gapping up pre-market.
Relative volume is computed against the 30-day average daily volume, with a 3-minute trend flag to show whether participation is building.
Each ticker's bars are checked for an impulse → tight flag → confirmed breakout. The Strategy and Reason columns show exactly why a setup is forming, waiting, or rejected.
Every scanner cycle is recorded to disk so the exact session can be replayed bar-for-bar through the same engine — backtest and live share one code path.
| Ticker | Chg% | Gap% | Vol | RVOL | Float Rot | Catalyst | Setup |
|---|---|---|---|---|---|---|---|
| AIXI | +47.3% | +38.1% | 2.1M | 18.4x | 2.1x | HIGH | ENTRY |
| SOAR | +31.5% | +22.0% | 890K | 9.7x | 1.6x | HIGH | WAIT |
| SIDU | +18.2% | +15.4% | 450K | 5.2x | 0.9x | MED | no setup |
| LABX | +12.6% | +9.3% | 220K | 3.1x | 0.6x | LOW | no setup |
| SKYQ | +28.9% | +19.7% | 1.3M | 12.6x | 1.9x | HIGH | WAIT |
Optional live news from Benzinga, Finnhub, RTPR, IBKR ticks, and Massive — deduplicated and sentiment-scored — enriches the scanner so you can see why a name is moving. It does not place trades: live entries are purely mechanical flag_breakout.
A two-tier scorer ranks headlines for context in the scanner and analytics — it never gates a live entry.
Sends ticker + headline + abstract to your chosen AI provider (via get_ai_provider() — never hard-coded). Results are cached per ticker/day/headline to prevent duplicate API calls.
When the AI provider is unavailable, a local keyword model nudges a neutral baseline up for bullish terms (approvals, partnerships, upgrades) and down for bearish ones (dilution, bankruptcy, fraud) — so a score is always available.
A machine-learning model scores each headline for catalyst strength and a companion classifier tags the catalyst type. Both populate the scanner's Catalyst columns to help you rank what's moving — they never trigger a trade.
AutoTrader runs flag_breakout concurrently in two independent personalities — premarket and regular hours — each with its own validated parameters, trading window, and risk limits. Both were found by systematic backtest search and confirmed on 90- and 200-day data.
Trades 04:00–09:25 ET and is forced flat at 09:28. Demands a longer impulse lookback and a 4-bar flag, so it only fires on well-formed premarket setups.
Trades 09:30–16:00 ET and is forced flat at 15:55. A shorter lookback and 2-bar flag suit faster intraday consolidations, with a stricter reward:risk floor.
A textbook continuation setup, detected purely from price & volume — no news, no AI, no discretion.
flag_breakout beat pullback and vwap_reclaim in a systematic 30-day parameter search, then was confirmed on 90- and 200-day cached data before going live. Other entry strategies remain in the codebase, ready to be promoted the same way once they clear the same bar.
flag_breakout exposes its full rule set in the Strategy panel, layered on top of global universe filters and risk controls — no code edits required.
Replay any date range against cached IBKR 1-minute bar data. Every trade is simulated at market speed with full parameter fidelity.
Starting balance, compounded across the session
Trade-level metrics tracked per simulation run
Replay runs the identical live decision engine
Entry/exit price, P&L %, hold duration, shares, reward:risk at entry, exit reason (trailing stop / stop below flag low / measured-move target / forced flat), plus the scanner snapshot — sentiment, catalyst and headline — captured at the moment the setup fired.
Win rate, total P&L per day, trade count, session loss tracking, and compound returns over the date range.
Every live scanner cycle is recorded to disk, so any session can be replayed bar-for-bar through the same engine — the mechanism used to validate flag_breakout on 90- and 200-day windows before promotion.
| Ticker | Entry | Exit | P&L% | Exit Reason |
|---|---|---|---|---|
| AIXI | $2.14 | $3.06 | +43.0% | Trailing stop |
| SOAR | $5.80 | $6.92 | +19.3% | Trailing stop |
| LABX | $1.22 | $1.10 | −9.8% | Stop (flag low) |
| SKYQ | $3.45 | $4.30 | +24.6% | Forced flat 09:28 |
Live trades are mechanical — but after the close you can ask an AI optimizer to review your history and propose parameter changes. It analyzes and suggests; it never places a trade. One click turns a recommendation into a saved strategy config.
A bar per day in dollars with a cumulative equity line overlaid. Hover any bar to see that day's $ and summed %.
Date, entry/exit time, session, strategy, ticker, buy/sell $, P&L%, hold (m), sell reason, sentiment, catalyst, headline. Click a row to inspect the scanner state and exact params captured at trade time.
AI analyzes your trade history and recommends optimized parameters. One click applies them to a new strategy automatically.
Total trades, win rate, avg profit %, total P&L, best trade, worst trade — always visible at the top of the dashboard.
Every strategy check is surfaced with the actual vs. required value. No more wondering why a trade was skipped — see the full pass/fail breakdown in real time.
A complete trading system — from real-time alerts to risk management — with every parameter configurable from the UI.
Scanner rows tint when a name surges past a configurable threshold over a short window — ≥10% in 1 minute, ≥15% in 2, ≥20% in 3 — each with its own colour, so fast movers jump out of the table at a glance.
Premarket (A) and regular-hours (B) personalities run flag_breakout concurrently through one shared state-machine chassis — each with independent trading windows, parameters, daily trade caps, and forced-flat times.
Holds a single position sized to live account equity and rotates into a stronger setup only when its reward:risk beats the held trade by 1.15×. Backtested $1,000 → ~$28,474 over 90 days under Personality A.
Live and paper trading via IB Gateway (ports 4001/4002) or TWS (7496/7497). Configurable client ID and automatic reconnect on disconnect.
Resolves shares float from a local FMP cache first, then the FMP API, then a Massive feed fallback — and caches the result. An optional max-float cap can gate the universe (off by default).
Suspend new entries after a configurable run of consecutive losses, cap daily trades per personality, limit concurrent positions, and skip stale bars — so an unattended session can't spiral.
At 04:00 ET a background loop clears the scanner history file, re-anchors each ticker's session baselines, and resets per-symbol trade counts and cumulative P&L — ready for the new session.
Every flag_breakout gate is editable from the Strategy panel and round-trips to ui_config.json. Additional entry strategies (pullback, vwap_reclaim) live in the codebase, ready to promote once they clear the same backtest bar.
Scores are cached by ticker, day and normalised headline, so the same article is never re-scored and the AI provider isn't billed twice for it. The cache rolls over automatically each new session.
Every trading parameter is accessible from the UI — no code edits required. Changes take effect on the next automation cycle.
Set the % move that counts as a surge over each short window, and pick the colour each tier paints the row.
asyncio event loop in background thread. Semaphore-limited concurrent IBKR requests (5 bar fetches, 2 news). Non-blocking UI at all times.
Sentiment scores cached per ticker/day/headline. IBKR 1-min bars cached for backtesting. Resolved float values cached to disk to avoid repeat lookups.
Session loss/profit limits, a consecutive-loss breaker, daily trade caps, per-ticker entry-check limits, and a fixed stop plus trailing stop on every position.
IBKR connection watchdog, WebSocket auto-reconnect for all news feeds, health monitoring with in-app log window for recovery events.
Once configured, AutoTrader operates entirely on its own — scanning the market, reading news, scoring catalysts, entering positions, and exiting them without you lifting a finger.
Multiple scanner codes stream simultaneously and are filtered on price, gap %, float and RVOL — building the universe of names each personality watches bar-by-bar.
Each ticker's bars are scanned for an impulse swing, a tight flag, and a confirmed breakout on volume — purely from price & volume, with no LLM in the loop. Optional sentiment is shown alongside for context only.
IBKR is queried for price, volume, gap %, float, and RVOL. Only tickers that pass every active strategy filter proceed to the buy stage.
The order fires on the confirmed breakout bar — provided breakout volume clears the multiplier and the measured-move target gives at least the minimum reward:risk. Otherwise it waits for the next bar.
A fixed stop sits 1% below the flag low. Touching the measured-move target arms a trailing stop (with a breakeven floor); the session cutoff forces any open position flat — 09:28 for A, 15:55 for B.
A background loop clears the scanner history, re-anchors each ticker's session baselines, and zeroes per-symbol trade counts and cumulative P&L — so the system starts each morning fresh without any intervention.
Full autonomy doesn't mean no safety net. AutoTrader enforces hard risk limits at every layer so the system can run unattended without blowing up your account.
After a configurable run of losing trades in a row (default 3), new entries are suspended for the rest of the session — so a bad morning can't compound.
Each personality has its own maximum trades per day — 5 for premarket (A), 7 for regular hours (B) — plus a cap on concurrent open positions.
No position is ever carried past its window. A flattens everything at 09:28 ET, B at 15:55 — bypassing the normal stop/target to guarantee a flat book.
In compound mode the system only abandons a held position for a new one when the candidate's reward:risk beats it by 1.15× — preventing churn between marginally different setups.
IBKR disconnects and news WebSocket drops are detected instantly. The watchdog reconnects automatically and resumes scanning — no manual restart needed.
The main window shows every decision the system makes in real time — so you can monitor without intervening.