04 Rutgers Quant Finance Club Spring 2026 Research, not an automation

Does a bigger model trade better?

Research · submitted to the Rutgers Quant Finance Club Independent · AI-assisted · simulated results

The finding: across 95 machine-learning experiments, a higher accuracy score did not reliably mean better simulated trading once costs were charged. Simpler models held up.

95
machine-learning experiments, each saved with its settings and results
7
models, from straight-line statistics to the published deep model
5
horizons: 10 to 100 order-book updates ahead
01 · THE PROBLEM

One recipe, one score, two open questions

The club brief was to rebuild one published model — DeepLOB — and report how accurate it is. A fair brief. But it leaves open two questions a trader would ask first:

  1. Is all of that machinery needed, or would something smaller do the same job?
  2. Does a good accuracy score turn into good trading once every trade costs money?

The brief did not ask for answers. I made them the project.

The old way · the brief as givengrey = line drawing
One published paper becomes one big model, judged by a single accuracy number. ORDER BOOK buy & sell queues ONE PAPER pattern layer multi-scale layer memory layer ONE BIG MODEL rebuilt as-is ACCURACY one number THE SCORE judged once ? all of it needed?needed? ? pays after costs?pays off?

The old way: one published recipe, rebuilt as-is, judged by one accuracy number. Dashed = the questions the brief left open.

02 · WHAT I BUILT

A test bench, not a bigger model

Instead of one model, a bench that trains and scores many. Every model gets the same data and the same question: over the next 10 to 100 order-book updates, does the price go up, down or stay flat? Each run is a settings file, queued on the Amarel cluster and saved with its results; a second scorecard then charges every simulated trade its real cost.

What I built · the bench
sky = what I built dashed = data flows green diamond = a person decides grey = the old way
Order-book data
5 stocks · 10 days · public benchmark
7 models
simple statistics → the published deep model
5 horizons
10 → 100 updates ahead
Amarel cluster
95 runs as queued jobs · results saved
Two scorecards
accuracy · simulated trading after costs
I judge the trade-off
size vs. accuracy vs. cost

Average accuracy across the five horizons

documented averages from the experiment log · higher is better

Patterns + attentionCNN + Transformer, no Inception
78.98
Patterns onlyCNN-only
78.13
Recipe, attention for memoryCNN + Inception + Transformer
77.77
Published recipe, rebuiltDeepLOB · CNN + Inception + LSTM
77.46
Decision treesXGBoost
72.68
Small neural netMLP
58.72
Straight-line statisticslogistic regression
58.32
0 %50 %100 %

Test accuracy, % · sky = deep models · grey = classical baselines · dashed = the rebuilt recipe · one seed, one dataset · the rebuild sits below the paper’s own numbers (gap documented in the report).

Same models, horizon by horizon

does more complexity help? · redrawn from the experiment figures

Test accuracy per horizon for four deep models; the lines stay within a few points of each other. 70758085 k=10k=20k=30k=50k=100
patterns only patterns + attention published recipe, rebuilt published recipe + attention

Test accuracy, % per horizon (k = order-book updates ahead) · same values as the project’s figure, redrawn · the simplest model is never far behind.

The honest finding

A better score did not reliably mean better trading

The second scorecard turns each model’s predictions into a simple trading rule and charges half the bid–ask spread every time the position changes — the price of changing your mind. With that cost charged, the accuracy lead did not carry over consistently. In the exploratory runs, what moved the simulated result was trading less: holding longer, acting only when several horizons agreed, sitting out volatile moments.

Simulated on one dataset with one random seed: a research finding.

Scorecard 1
Accuracy: deep models ahead
Scorecard 2
Trading after costs: lead not reliable

schematic · not to scale

03 · STILL A PERSON’S CALL

What a person still decides

A person decides

The bench produces numbers; it does not say which ones matter. A person still decides whether a small gain in accuracy is worth a bigger, slower model, whether a result that only looks good in simulation deserves belief, and which negative results go into the report. Here that person was me: I kept the simpler models on the table, charged the costs, and wrote up what did not flatter the biggest model.

What it removed

Removed: guesswork

Whether extra complexity pays off was measured, not assumed — same data, same question, seven models side by side.

Removed: hand-run experiments

Every run is a settings file, queued on the cluster and saved with its history — 95 runs in one format, none retyped by hand.

Removed: trusting one score

A second scorecard charges real trading costs, so a model is judged on what it would do, not only on what it gets right.

04 · HOW I BUILT IT

Five steps, in detail

1

Get the data ready

A public order-book benchmark: five Finnish stocks, ten trading days, ten price levels each side. Each example is the last 100 updates; the label is whether the price then went up, down or stayed flat.

2

Rebuild the published model

DeepLOB in PyTorch: a pattern-spotting layer, a layer that looks at several time scales at once, and a memory layer. Three classical baselines beside it: straight-line statistics, a small neural net and decision trees.

3

Try simpler and different builds

Remove the memory layer. Swap memory for attention. Drop the multi-scale block. Seven models across five horizons: 35 comparisons, all from the same settings files.

4

Train for trading, not only for accuracy

Sixty more runs with four training objectives that punish costly behaviour: weight rare moves, focus on hard cases, penalise churn, reward a smoother return. All queued on the Amarel cluster.

5

Charge the costs, then write it up

A backtest that charges half the bid–ask spread on each position change, plus filters that trade less. Then a research report with the limits stated plainly: one seed, one dataset, simulated.

Built with
Python PyTorch NumPy pandas Jupyter scikit-learn XGBoost YAML configs Matplotlib · Seaborn Rutgers Amarel HPC SLURM CUDA GPUs
For the technical reader
Data
FI-2010 · 40 features · lookback 100 events · horizons 10 / 20 / 30 / 50 / 100 · days 1–7 train, 8–10 test
Models
DeepLOB = CNN + Inception + LSTM · variants: CNN-only (global average pooling), CNN + Transformer, CNN + Inception + Transformer · baselines: logistic regression, MLP, XGBoost · early stopping on validation
Training
YAML configs · 35 model × horizon runs + 60 cost-aware runs (weighted CE, focal, turnover-penalised CE, differentiable Sharpe; 3 settings × 5 horizons each) · SLURM jobs on GPU
Backtest
half the bid–ask spread charged per position change · filters: holding period, ensemble agreement, volatility · one seed, one dataset · report + experiment log
05 · OWNERSHIP

My part, not my part

MineShared with AINot mine
Mine
  • Choosing to go beyond the brief and compare models
  • Requesting and using the Rutgers cluster
  • Running, logging and comparing the 95 experiments
  • Deciding what to measure: accuracy, size, cost after trading
  • Owning the report and its stated limits
Shared with AI
  • Reading around the field and choosing next steps
  • Implementation and debugging
  • Drafting the report

AI-assisted throughout: I directed, questioned and checked. I can explain everything on this page.

Not mine
  • The DeepLOB design itself — a published paper
  • The FI-2010 dataset — a public benchmark
  • The club brief and the project assignment

The report was submitted to the Rutgers Quant Finance Club as a showcase piece.