LabDocs

How Quant Desk works

Robinhood Chain carries Chainlink price feeds for six tokenized stocks and for ETH. A feed is a contract that remembers every round it ever published. Quant Desk reads those rounds and turns them into backtests you can run in the browser.

What it is

A lab, not a fund. You pick a basket of stocks, a weighting rule, a rebalance cadence and a window, and the page computes how that basket would have moved against ETH and SPY, the stock $QDESK trades in, over the exact days the feeds recorded. There is no wallet, no deposit and no execution: the only thing on chain is the price history and the $QDESK coin.

The feeds

NVDA/USD0x379EC4f7C378F34a1B47E4F3cbeBCbAC3E8E9F15
TSLA/USD0x4A1166a659A55625345e9515b32adECea5547C38
AAPL/USD0x6B22A786bAa607d76728168703a39Ea9C99f2cD0
GOOGL/USD0xF6f373a037c30F0e5010d854385cA89185AE638b
QQQ/USD0x80901d846d5D7B030F26B480776EE3b29374C2ae
SPY/USD0x319724394D3A0e3669269846abE664Cd621f9f6A
ETH/USD0x78F3556b67E17Df817D51Ef5a990cDaF09E8d3A9

Reading history

latestRoundData() gives the current round id. Round ids carry a phase in the top 64 bits and a counter in the bottom 64; the counter is walked back one at a time with getRoundData(id), one hundred ids per multicall, until the window is covered or the phase runs out. Rounds with a non-positive answer are skipped. Verified on chain: NVDA has hundreds of rounds in the current phase covering the last two months, TSLA more.

GET /api/history?symbol=NVDA&days=60
{ symbol, feed, decimals, phase, points: [[unixSeconds, price], ...], rounds, from, to }

The server keeps each answer in Redis for an hour. History does not change, it only grows, so an hour is more than enough.

Rounds to days

Feeds publish on deviation and heartbeat, not on a clock, so rounds are irregular. Each UTC day takes the last round published that day as its close. A day with no round keeps the previous close. Stock feeds are quiet on weekends, so weekend returns for stocks are zero while ETH keeps moving; the correlation table shows the effect.

Strategies

Equaleach stock 1/n at every rebalance
Inverse volweight ∝ 1 / σ(daily returns, trailing 14 days)
Momentumtop two by trailing 14 day return, equal weight
Rebalancedaily, weekly, or never (buy and hold)
Look-back14 days; before that, equal weights

Between rebalances the units are fixed, so the weights drift with prices. ETH and SPY are shown as plain buy and hold over the same days.

Statistics

returnlast / first − 1
max drawdownmin over t of value(t) / peak(t) − 1
daily volstandard deviation of daily returns
return / volmean daily return / daily vol, not annualized
correlationPearson, on daily returns of the same calendar

Limits

  • No fees, slippage, borrowing, dividends or splits.
  • The window is bounded by what the feeds hold in their current phase, about two to three months.
  • The tokens on the chain track the feeds, not an exchange order book.
  • A backtest describes the past. It is not a forecast and not advice.

What runs where

The browser fetches one JSON per feed from the site's own API and does all the arithmetic locally. The API reads the chain through a private endpoint, at most a few dozen multicalls per feed per hour, and caches the result. Nothing polls the chain in the background.

$QDESK / SPY

Every number in the lab is read against the S&P 500, so the coin is too. Pons lets a coin launch paired with a stock token instead of ETH, and $QDESK launches paired with SPY: you buy it with SPY, the bonding curve holds SPY, and when the curve fills the pool it graduates into is $QDESK/SPY.

That makes the $QDESK chart a relative one. A coin quoted in ETH moves with ETH; a coin quoted in SPY moves only when it runs ahead of the index or falls behind it, which is the one question a backtest here answers.

pair tokenSPY · 0x117cc2133c37B721F49dE2A7a74833232B3B4C0C
price feedSPY/USD · 0x319724394D3A0e3669269846abE664Cd621f9f6A
graduation10.9 SPY at the Pons config of 2026-09-19
how it was checkeda real launchToken(…, SPY) on a fork of Robinhood mainnet; the factory accepted the pair and returned the threshold

Why SPY and not a single stock: the lab benchmarks against SPY already, SPY has the deepest stock pool on the chain, and an index does not tie the coin to one company's earnings. QQQ and NVDA were accepted on the same fork (11.146 QQQ and 41.6 NVDA to graduate). The pair is one line in config.js; after launch the site reads the real pair and threshold from Pons instead.

$QDESK

A Pons coin on Robinhood Chain, quoted in SPY. It has no rights over the lab and the lab has no dependence on it.

chainRobinhood Chain
launchpadPons
pairSPY
contractsoon