Lab · quant research bench

A research bench beside the desk, not a second trading desk

Trading Intelligence reads a market and writes an opinion. This is the other half: an agent that turns a thesis into code, tests it against 478 alpha factors, and reports Sharpe, drawdown, turnover and costs. I installed HKUDS Vibe-Trading as an evaluation bench — isolated from everything else on the server. It places no orders, and it will not until a result survives out-of-sample and then a paper account.

Open the bench Private workspace, login required
01 · What it is

Someone else's factor library, my own discipline

Upstream is HKUDS/Vibe-Trading, MIT-licensed, built by the HKU data-science lab: a persona-driven multi-agent framework where analysts, a bull and a bear researcher, a risk debate and a portfolio manager work one instrument, plus an MCP server so other agents can call its tools. Three parts are worth my time:

01

Alpha Zoo

478 factors in one registry — WorldQuant Alpha101, Qlib158, academic and GTJA families — with a stated contract: a factor whose declared input is missing on a bar returns nothing, not a plausible number.

02

Backtest with frictions

Per-market rules rather than one generic engine: A-share T+1 and lot sizes, Hong Kong board lots, US half-days, crypto funding, commission and slippage models.

03

Paper accounts

A saved account matches orders or a strategy against completed bars and moves forward only. It never reaches a broker — the point is to find out what breaks before capital does.

02 · Hosting

Installed in minutes, because I did not build it

The server has one vCPU, 3.9 GB of RAM and already runs five stacks. Building the image locally means 388 npm packages and 197 Python packages — numpy, scipy, pandas, scikit-learn, matplotlib — compiled on that single core, with a memory peak around 1.5 GB and swap already half consumed. Half an hour of a monopolised CPU, and a real chance the OOM killer picks a neighbour.

So I pulled the published image instead, pinned by digest rather than the moving edge tag: 0.53 GB compressed, 26 seconds, 2.3 GB on disk. The container has its own bridge network, publishes no port, runs on a read-only root filesystem with every capability dropped, and is capped at 1.6 GB and one CPU. At rest it sits at about 220 MB. One ingress: Traefik terminates TLS with a Let's Encrypt certificate and asks for a password before the app is even reached.

0

Local builds

Prebuilt image, pinned by digest.

26 s

To pull

0.53 GB compressed, 13 layers.

2.3 GB

On disk

No build cache left behind.

220 MB

At rest

Inference is remote, not local.

03 · What I actually do with it

Write the thesis, then try to kill it

01

Thesis to code

A plain-language idea becomes a modular strategy in Python: universe, signal, sizing, rebalance. The code is readable, so a bad idea is visible before it is measured.

02

Factor screening

Which of the 478 carries information on this universe, and with how many observations. A factor with too few IC points is skipped with a reason rather than reported as a signal.

03

Cost-aware backtests

Sharpe, CAGR, max drawdown, win rate, turnover and an estimate of slippage — because a strategy that dies on fees was never a strategy.

04

Shadow, then stop

Out-of-sample split, Monte-Carlo drawdown, then a paper account. If the edge does not survive the first two, there is no third step.

What this bench will not do
  • No broker connected, no key with order permission, no capital.
  • No claim that a backtest is an edge. It is a hypothesis with error bars.
  • No autonomous execution — ever. A proposed order would be formatted, shown, and left waiting for a human.
  • No performance figure published from a run that has not been tested out-of-sample.
Why a second tool

One desk that reads a market and one bench that tries to falsify the reading. Keeping them separate forces the interesting question: when the two disagree, which one is wrong, and how would I know?

Runs on its own subdomain of this server, behind a login, outside the public site. Model inference is a metered remote API; every run has a cost before it has an opinion.

Look at the bench, not the marketing

The workspace is private, but the architecture, the hosting constraints and the rules above are the whole story. The strategy work happens next, in public increments.

Open the bench Back to the Lab