Quant Research @ JM Financial · 2026

Bhavya Dhoot

Quantitative Developer AI Systems Engineer

I build trading and automation systems that run unattended in production. Four of them are running on this page — scroll, or get in touch.

Based Dubai · UAE
Domain Quant × AI Systems
Status 7+ systems live
Flagship 1.44 OOS Sharpe
Open to quant & AI roles

Numbers that
survive diligence.

Systems Live 7+ Production AI/automation, two FMCG companies
Signal Latency <340ms Candle close to signal emission, Kronos MVE
OOS Sharpe 1.44 Cross-sectional momentum, out-of-sample
Max Drawdown -6.6% Momentum backtest, survivorship-free
API Quota Cut 66% ATM-centered payload bundling, Angel One
Bandwidth Cut 90%+ Gzip compression, 50KB to 3KB payloads
RAG Retrieval 88% 50K+ document corpus, FAISS vector store
QSVM Accuracy 96.1% Quantum cyclone classifier, IBTrACS data

Whatever the
business is losing.

Finance

“Just tell me every morning which payments did not land.”

reconcile(bank, ledger) → exact, tolerance, exceptions with reasons

“I need yesterday’s sales by SKU before my nine o’clock.”

ingest(ERP, quick‑commerce) → one cited dashboard, by 06:00

“Our supply paperwork lives in a WhatsApp folder.”

extract(documents) → typed ledger rows, same day

“Production plans against last week’s numbers.”

plan(demand, stock) → a daily schedule, no analyst in the loop

“Nobody picks up after seven.”

agent(voice) → qualified, logged, routed, transcript attached

Here is the first one, running. Two passes: exact reference and amount, then a normalised reference inside an amount and date tolerance, because feeds disagree about spacing, casing and value dates. What survives both is an exception with a stated reason — never a silent drop. The other four are the same job in a different part of the business.

Rows in 12
Exact 8
Tolerance 2
Exceptions 4
Matched — first four
    Exceptions — all, with reasons

      Sample bank and ledger feeds bundled with this page, invented for it. No client data, and nothing about any client's architecture. The matching logic is real and runs in your browser; the counts above are whatever it just produced.

      Health Factory case study →

      Five inputs,
      one call.

      The variance engine standardises every input against its own history, then combines them on fixed weights. One number, one regime, and every term in the sum visible.

      Composite -0.173
      Regime Neutral

      The five readings are a sample bundled with this page, not a live feed. The z-scores, the weighted composite and the regime call are computed from them in your browser. This is the shape of the Kronos NSE engine, not its production data.

      Kronos NSE source →

      Price an option,
      live.

      The same Black-Scholes engine from the pricing terminal, running in your browser. Move the inputs and watch the payoff, the present value, and the Greeks respond.

      At expiry Today

      Then solve it
      in fewer steps.

      Adjacent strikes carry adjacent implied vols, so the previous answer is already close to the next one. Seeding Newton with it instead of a fixed guess is most of the cost gone. The figures below were measured in your browser, on this page, a moment ago.

      Iterations, cold 7.45
      Iterations, warm 3.23
      Fewer iterations 57%
      Solves timed 1,240
      Worst case, cold / warm 13 / 14
      Max vol error 8.0e-7

      Newton-Raphson with a bisection safeguard, checked against a round-trip through Black-Scholes before it runs. Iterations, not milliseconds: at this size wall clock is dominated by timer resolution and JIT warm-up, while the iteration count is exact. Note the worst case barely moves — warming the start cuts the mean, not the tail, because the tail is the first strike in the chain, which has no previous answer to inherit.

      Options pricer source →

      Let's build
      something
      precise.