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.

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.
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.
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.
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.
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.
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.
Attention-LSTM, temporal convolutional network, WaveNet and a vanilla Transformer — four independent inductive biases over the same tape, so agreement between them means something.
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.
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.
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.
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.
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.
Classical structure: forecasting, regime detection, volatility, and price-action signals with decades of literature behind them.
Gradient boosting as the primary supervised learner, with unsupervised models reading regime, anomaly and factor structure from the tape.
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.
The PyTorch suite from the GPU stack above — sequence forecasters, anomaly detectors and a graph network over the correlated cross-section.
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.
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.
The three are uncorrelated in their failure modes. That is what makes the consensus design valuable.
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.
Reads strategy_candidates under a rolling 365-day window with point-in-time integrity. Proposes long entries from rule-mined survivors.
Reads the walk_forward_runs survivor pool. Ranks model classes by bracket-simulated expectancy per trade and emits a long-or-flat vote.
Reads agent_memory_nodes for the latest synthesised analyst view and maps BULLISH/BEARISH to long-or-flat.
Sees the three stage-1 votes. Builds the strongest possible long case using LLM reasoning over the stack. Structurally optimistic by design.
Provides downside risk, sentiment, macro context. Holds a hard veto that fires when trailing 60-day drawdown is ≤ −15%.
Sees all five non-arbiter votes. Scores a five-dimension rubric and emits the final ConsensusDecision with Kelly-from-edge position sizing.
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.
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.
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.
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.
Agent D forces no_enter when the symbol's trailing 60-day drawdown breaches the −15% floor. Cannot be disabled.
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.
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.
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.