Quantitative · Agentic · Research-grade

Four hundred stocks. Three uncorrelated tracks. Five agents in three stages. One consensus decision.

QARSA is a multi-agent quantitative trading research platform. It mines patterns, trains models, and stages a structured debate between six specialised agents — then routes each auditable decision through a guarded, fully autonomous paper-trading pipeline, four cycles a day.

Statusrunning · autonomous paper
RouteIBKR paper · seven guards
Updated2026-08-05
Operatorsingle human-in-the-loop
430
Stocks evaluated
A curated U.S. equity universe, refreshed daily across three market-data providers.
18 + 14
Models · Production + GPU shadow
Eighteen statistical and ML classes in production; fourteen PyTorch deep and RL models in shadow.
4
Autonomous cycles daily
Consensus cycles run unattended and route gated paper orders through the brokerage.
01 · The thesis

A trading decision should survive three independent attempts to talk it out of itself.

Three uncorrelated lines of evidence. A structured debate. One auditable output.

Most automated trading systems pick a method — rules, models, or narrative — and live with its failure mode. QARSA runs all three in parallel and only acts when they agree.

Track 1 is inductive: mine the price tape for rules that historically worked. Track 2 is deductive: train statistical and ML models to forecast the next move. Track 3 is narrative: read structured opinions from a stack of LLM-driven analyst agents.

Their failure modes are uncorrelated. When one is wrong, the other two usually disagree. That is the entire reason this system exists.

TRACK 1 · INDUCTIVE Rule-mined strategies TRACK 2 · DEDUCTIVE Model predictions TRACK 3 · NARRATIVE Research synthesis CONSENSUS GATE Five-agent debate A · B · F → C · D → E CONSENSUSDECISION enter · no_enter · skip
02 · The tracks

Three machines, asking different questions of the same tape.

TRACK 1 · INDUCTIVE

Rule discovery

Enumerate a 120-rule grammar per symbol — entry × regime × hold. Walk-forward each one. Survivors must beat a 200-permutation random benchmark at Bonferroni α/120, clear a Sharpe > 1.0 risk gate, and produce at least ten trades.

Output → strategy_candidates
Read by → Agent A · Hindsight Strategist
TRACK 2 · DEDUCTIVE

Model layer

Eighteen active model classes trained under a strict walk-forward harness with embargoed folds. Candidates are scored by simulating their out-of-sample predictions under the router's exact bracket exits — ranked by expectancy per trade, with a Wilson lower-bound hit-rate gate and a per-model drawdown cap.

Output → walk_forward_runs · MLflow
Read by → Agent B · Model Ensemble
TRACK 3 · NARRATIVE

Research synthesis

A separate stack of analyst agents — regime, risk, behavioral, pattern librarian — each emit structured opinions into a shared memory graph. A synthesis layer reads the latest combined view and maps it to a long-or-flat vote.

Output → agent_memory_nodes
Read by → Agent F · Research Synthesis
03 · The GPU stack

Fourteen deep models, trained on one GPU, every weekend.

A PyTorch deep-learning and reinforcement-learning suite now trains against the full universe on a single CUDA device. Every model runs in shadow — publishing predictions to a leaderboard, earning nothing until it beats the production ensemble on the same evaluation the ensemble faces.

NEURAL FORECASTERS · 5

Sequence forecasting

Temporal Fusion Transformer, N-HiTS, PatchTST, DeepAR and a GRU baseline — attention- and MLP-stack architectures forecasting returns over the bracket horizon, trained per-run across the whole universe.

Framework → PyTorch · CUDA
DEEP SEQUENCE · 4

Torch sequence family

Attention-LSTM, temporal convolutional network, WaveNet and a vanilla Transformer — four independent inductive biases over the same tape, so agreement between them means something.

Framework → PyTorch · CUDA
ANOMALY · 2  ·  GRAPH · 1

Structure detectors

An autoencoder and a variational autoencoder read reconstruction error as a regime-shift signal. A temporal graph neural network passes messages across the correlated cross-section — no symbol is modelled alone.

Framework → PyTorch Geometric-style message passing
OFFLINE RL · 2

Reinforcement learning

A Decision Transformer and an exit policy learned offline from the system's own executed trade episodes, evaluated with fitted-Q evaluation before any advice is trusted. The dataset is the platform's own history.

Framework → d3rlpy · discrete control
TRAINING HONESTY

No-leak protocol

Chronological validation splits with a purge embargo between train and validation, scalers fit on training data only, and early stopping on validation loss. If a model looks good, it looks good for reasons that survive out-of-sample.

Applied → all 14 models, every run
THROUGHPUT

29-minute full pass

A complete 14-model training pass over the universe takes 29 minutes wall-clock on a single RTX-class laptop GPU — down from 60 in the first runs, through profiling, batching and per-family optimisation.

Cadence → weekly · weekend window
04 · The model inventory

Thirty-two models, five families. One evaluation for all of them.

The families are deliberately different in kind — econometrics, tree ensembles, mined rules, deep networks, learned policies — so their failure modes stay uncorrelated. Every one is judged the same way: simulated under the exact exit brackets the trading router uses, and ranked by expectancy per trade.

STATISTICAL · 13

Econometrics & time series

Classical structure: forecasting, regime detection, volatility, and price-action signals with decades of literature behind them.

SARIMAKalman filterMarkov regimeFourier cyclesCointegrationDCC-GARCHAcceleration z-scoreLead-lag regressionLogistic directionRolling R² monitorDonchian breakoutRSI pullbackMomentum rank
MACHINE LEARNING · 5 + 2 RESERVE

Trees & unsupervised structure

Gradient boosting as the primary supervised learner, with unsupervised models reading regime, anomaly and factor structure from the tape.

XGBoostHidden Markov modelIsolation forestK-means regimesPCA factorsRandom forestLightGBM
ALGORITHMIC · RULE MINING

Mined trading rules

A 120-rule grammar per symbol — entry trigger × regime filter × holding window — enumerated and walk-forwarded. Survivors must beat a 200-permutation random benchmark with a multiple-testing correction.

Entry triggersRegime filtersHold windowsPermutation tested
DEEP LEARNING · 12

Neural networks

The PyTorch suite from the GPU stack above — sequence forecasters, anomaly detectors and a graph network over the correlated cross-section.

Temporal Fusion TransformerN-HiTSPatchTSTDeepARGRUAttention-LSTMTCNWaveNetTransformerAutoencoderVAETemporal GNN
REINFORCEMENT LEARNING · 2

Learned policies

Offline RL trained on the platform's own executed trade episodes — no simulator fantasy, just the system's real history replayed as a learning problem.

Decision TransformerFQE-evaluated exit policy
ONE YARDSTICK

Same test for everyone

No family gets a friendlier benchmark. Statistical, ML, deep or RL — each candidate's out-of-sample predictions are pushed through the identical bracket simulation, with a statistical floor on hit rate and a hard drawdown cap before it can be selected.

Bracket-simulated expectancyWilson lower boundDrawdown cap
The three are uncorrelated in their failure modes. That is what makes the consensus design valuable.
From the QARSA design brief
05 · The five-agent debate

Six agents. Three sequential stages.

Stage 1 votes independently. Stage 2 argues both sides. Stage 3 scores a five-dimension rubric and emits the final decision. Latency p50 is under three seconds for the LLM voices.

A
STAGE 1 · INDEPENDENT

Hindsight Strategist

Reads strategy_candidates under a rolling 365-day window with point-in-time integrity. Proposes long entries from rule-mined survivors.

long · flat
B
STAGE 1 · INDEPENDENT

Model Ensemble

Reads the walk_forward_runs survivor pool. Ranks model classes by bracket-simulated expectancy per trade and emits a long-or-flat vote.

long · flat
F
STAGE 1 · INDEPENDENT

Research Synthesis

Reads agent_memory_nodes for the latest synthesised analyst view and maps BULLISH/BEARISH to long-or-flat.

long · flat
C
STAGE 2 · ADVOCATES

Bull Advocate

Sees the three stage-1 votes. Builds the strongest possible long case using LLM reasoning over the stack. Structurally optimistic by design.

bull narrative
D
STAGE 2 · ADVOCATES

Bear / Market Color

Provides downside risk, sentiment, macro context. Holds a hard veto that fires when trailing 60-day drawdown is ≤ −15%.

long · flat · veto
E
STAGE 3 · ARBITER

Arbiter

Sees all five non-arbiter votes. Scores a five-dimension rubric and emits the final ConsensusDecision with Kelly-from-edge position sizing.

enter · no_enter · skip
06 · The arbiter rubric

Five dimensions, weighted. One number.

0.55
Entry threshold
Statistical strength0.30
Regime fit0.20
Risk / Reward0.15
Correlation0.15
Drawdown impact0.20

Weighted score is compared against the 0.55 entry threshold. Above it, the same number feeds Kelly-from-edge sizing — capped at 25% Kelly and 10% per name.

07 · Return tiers

Tier governs the consensus required for entry.

Higher historical returns demand stronger agreement. Returns above 100% per year require unanimity and a non-veto from the Bear — because returns that large are usually too good to be true.

A
10 – 25% annual
≥ 3 / 5 long
Bread-and-butter mean reversion and trend on stable names.
B
26 – 75% annual
≥ 3 / 5 long
Where most of the platform's tradeable population lives.
C
76 – 99% annual
≥ 4 / 5 long
Rare. Usually a tech-momentum or post-earnings drift window.
D
100%+ annual
5 / 5 long · D non-veto
The system demands unanimity for a reason.
Z
< 10% / gate-failed
Not tradeable
Kept for telemetry. 200%/yr with 60% DD lands here, not D.
08 · The operator surface

A monitoring layer designed for trust before action.

The monitoring dashboard covers the decision funnel, agent behaviour, calibration and model selection. Every chart carries a plain-English explanation, and the Models tab reconciles what the selection statistic promised against what the brackets actually delivered — the honesty instrument that keeps evaluation from drifting into wishful thinking.

qarsa.local / monitoring · today · cycle.morning · 10:07 ET open dashboard →
WATCHLIST · AGENT VOTE MATRIX
Twenty symbols × five agents · cleared at the gate
A
B
F
C
D
TIER
DEC
DECISION SPLIT
Three of twenty cleared the gate
20 DECISIONS 3 enter 13 no_enter 4 skip
AI · Read this chart

Three symbols cleared the gate this cycle — NVDA, AVGO and AMD — at tier B+ with at least 4 of 5 long votes. The Bear vetoed TSLA on a 60-day drawdown breach.

09 · Safety rails

Three gates stand between a decision and a real order.

RAIL 01 · ALWAYS ON

The D-veto

Agent D forces no_enter when the symbol's trailing 60-day drawdown breaches the −15% floor. Cannot be disabled.

RAIL 02 · STRUCTURAL

Per-position cap

Position size is computed Kelly-from-edge, clamped at 25% of full Kelly and 10% of portfolio NAV per name. Enforced before the decision is written.

RAIL 03 · SEVEN GUARDS

Guarded routing

Every decision passes seven independent checks — autonomy flag, data freshness, a realised-expectancy circuit breaker, portfolio exposure guards, capital feasibility, market calendar and de-duplication — before a paper order exists. Live capital stays behind an explicit operator gate.

10 · The calibration loop

A system that gets to know its own mistakes.

Post-close, the calibration engine joins consensus decisions with realised trade outcomes and proposes per-symbol threshold overrides for the agent stack. Only symbols with at least ten trades are adjusted — the floor that keeps the loop from chasing noise.

The same outcomes drive the expectancy circuit breaker: sustained performance below breakeven halts sizing automatically.