Tensort Labs

Quantitative research

Predicting market behaviour, and trading on it.

Our research programme has two outputs: signals that carry genuine predictive content, and the low-latency machinery that turns those signals into filled orders in equity markets.

How a signal earns its way into production.

01

Hypothesis before data

Every signal starts as an economic story about why an inefficiency should exist and who is on the other side of it. Data mining without a mechanism produces findings that evaporate out of sample.

02

Validation that tries to fail

Walk-forward testing, realistic cost and impact assumptions, and explicit accounting for multiple-comparison bias. A signal has to survive being attacked before it gets capital.

03

Latency as a research variable

A signal with real content still loses money if it arrives late. We treat the path from tick to order as part of the research surface, not an implementation detail.

04

Decay monitoring in production

Alpha erodes as others find it. Live signals are tracked against their research baseline so decay is detected and sized down deliberately rather than discovered in the P&L.

The two systems that run it.

System 01 · JARVIS

Running — research infrastructure

Institutional stock screening, running on free data.

Most private investors pick stocks on gut feel, tips, or a single ratio. JARVIS applies a repeatable, multi-factor fundamental framework across hundreds of stocks at once — the same discipline a desk runs, without the Bloomberg terminal.

JARVIS fetches annual fundamental data for up to 250 stocks across the US S&P 500 and Indian Nifty 50, scores each one against an 8-pillar quality framework, stores everything in a KDB+ time-series database, and surfaces the top scorers in seconds.

0

stocks, two markets, one universe.csv

0/8

the ceiling score — AAPL and MSFT both clear it today

0GB

KDB+/q engine, splayed on-disk, year-partitioned

Where the data comes from.

Financial Modeling Prep

Annual fundamentals — income, balance sheet, cash flow, ratios

Weekly rotation across the full universe, 250 free calls/day

Yahoo Finance (yfinance)

Daily OHLC price data

Every trading day, free and unlimited

Key capabilities.

  • Score any stock 0–8 against the 8-pillar framework with a single call
  • Screen an entire market universe and return the top scorers in milliseconds
  • Incremental daily price append with full idempotency — safe to re-run
  • A staleness-based scheduler that refreshes the oldest data first, every day, inside the free-tier budget

The 8-pillar scoring model.

#PillarMetricPass threshold
1Normalised P/EMarket cap ÷ 5-yr avg net income< 22.5×
2ROICTrue return on invested capital> 9%
3Revenue growthLatest revenue vs 5 years agoPositive
4Net income growthLatest net income vs 5 years agoPositive
5BuybacksShares outstanding trendDeclining
6Debt serviceabilityLong-term debt ÷ 5-yr avg FCF< 5×
7FCF growthLatest free cash flow vs 5 years agoPositive
8Normalised P/FCFMarket cap ÷ 5-yr avg free cash flow< 20×

Pillars 1 and 8 use 5-year averages to smooth out cyclical distortions. Pillar 2 uses true ROIC — NOPAT over invested capital — not ROCE, which uses a different denominator. Pillars 3, 4 and 7 are directional: is the business larger than it was five years ago? Pillar 6 stress-tests the balance sheet for manageable leverage. Scores of 6–8 are strong fundamental candidates; below 4 fails the basic quality bar.

System 02 · ULTRON

Running — live execution engine

Tick to order, on a sub-millisecond budget.

ULTRON is a sub-millisecond intraday trading engine for Indian equities: live tick-by-tick data in, signals computed on a zero-garbage-collection hot path, orders out automatically, and every tick archived for JARVIS to research on overnight.

0

symbols tracked, live, every trading session

0M+

ticks ingested per day

0

slots in the lock-free ring buffer

<0ms

tick-to-order latency target

Design priorities.

Latency

Sub-millisecond tick-to-order on the signal hot path, via an LMAX Disruptor ring buffer.

Reliability

Zero data loss — a QuestDB partition is never dropped until its Parquet export is verified row-for-row.

Scalability

Nifty 500, Midcap 500 and Smallcap 500 together — roughly 1,500 symbols, ~281M ticks a day.

Hot-reload

Strategy configs are watched on disk and reloaded live. No restart, no missed ticks.

Observability

Eight Prometheus metrics on every scrape, plus a health check — nothing runs unobserved.

Tick in, order out.

NSE

Live market, via the Kite WebSocket feed

Ring buffer

65,536 pre-allocated, lock-free slots

Signal handler

EWMA, historical volatility, ADV — zero allocation

Order manager

Position tracking, notional caps, Zerodha REST

QuestDB

Intraday record, written over the ILP line protocol

JARVIS HDB

End-of-day Parquet archive for downstream research

The end-of-day roll, six safety steps.

  1. 01Snapshot today's row counts across all four tables as a verification baseline.
  2. 02Stream each table to Parquet, with up to three retries 15 minutes apart.
  3. 03Verify Parquet row counts match the snapshot exactly, or abort with the partition intact.
  4. 04Write a completion marker — JARVIS only reads a day's data once it exists.
  5. 05Only then drop the day's partition from the local database, reclaiming disk for tomorrow.

Read the research, or try a product.