Systematic multi-asset research and defined-risk execution across Indian markets.
Built and operated by Prince Jain, Quantiti runs five market sleeves across NSE Cash Equities (09:15 to 15:30 IST), NFO Index & Stock Options, and MCX Commodity Futures (09:00 to 23:30 IST). Every candidate signal must clear a 7-step Dilated-TCN ONNX quantile forecast, a self-hosted FinBERT INT8 news sentiment engine, and eight deterministic pre-trade risk shields before routing to Zerodha Kite Connect.
| Risk Gate Code | Vetoes | Share | Proportion | Deterministic Condition |
|---|---|---|---|---|
| max_open_positions | 481 | 36.7% | Sleeve/portfolio concurrent position cap reached | |
| max_trades_per_day | 417 | 31.8% | Daily turnover & statutory tax churn limiter | |
| vei_expansion | 101 | 7.7% | Volatility Expansion Index (ATR_short / ATR_long) spike | |
| meta_gate | 100 | 7.6% | Secondary meta-classifier P(win) below threshold | |
| insufficient_cash | 91 | 6.9% | SPAN + Exposure margin buffer guard | |
| recon_halt | 55 | 4.2% | Broker vs local SQLite position mismatch freeze | |
| ev_cost_ratio | 35 | 2.7% | Expected move < 1.50× round-trip statutory cost | |
| kill_switch | 22 | 1.7% | 3.0% intraday drawdown circuit breaker |
| Pipeline Stage | Count | % of Prior | Audit Log Source |
|---|---|---|---|
| 1. Tick & Bar Evaluations Logged | 25,384 | 100.0% | decision_journal.jsonl |
| 2. Primary Alpha Candidates | 7,093 | 27.94% | TCN + GBDT + MCX WF |
| 3. Deterministic Risk Shield Vetoes | -1,310 | 18.47% | 8-shield pre-trade kernel |
| 4. LLM Pre-Trade Gate Approved | 299 | 66.44% | 104 rejected · 13 size-shrunk |
| 5. Executed Fills (Paper Book) | 278 | 92.98% | 264 closed (154W / 110L) |
# Net Expected Value Gate (enforced before order placement) expected_edge_bps = (abs(q50_forecast - entry_price) / entry_price) * 1e4 round_trip_cost_bps = statutory_cost_bps(segment, notional) + model_slippage_bps if expected_edge_bps < 1.50 * round_trip_cost_bps: return Veto("ev_cost_ratio")
Runs a quantized FinBERT INT8 ONNX graph with a pure-Python WordPiece tokenizer inside the daemon process. If ONNX inference times out, it degrades gracefully (`FinBERT ONNX → TextBlob → Domain Lexicon`) so a tick is never blocked.
Half-life τ = 90 mins · Journal: newsalpha_journal.jsonl
Every strategy-regime cell maintains a conjugate Beta(α, β) posterior initialized at Beta(2.0, 2.0). Position size scales by empirical Half-Kelly fraction while nightly introspection logs bounded mutations (≤15% step) to strategy_proposals.jsonl.
f_kelly = 0.50 × max(0, p_hat - (1 - p_hat) / R_wl)
After market close, the Strategy Council synthesizes slippage, veto distributions, and sleeve Sharpe decay (Pass 1), followed by an adversarial Devil's Advocate pass (Pass 2) that tests whether proposed changes are sample-size noise.
Unlike backtest-only showcases, Quantiti publishes its complete live Zerodha Kite execution ledger alongside its paper book. Over ~4 weeks of live routing (₹1.49 Cr notional across 332 live orders and 130 priced exits), the live account booked -₹13,993.34 net across 64 wins and 66 losses (-₹23,571 net after ₹6,969 statutory charges in the Oct 22 audit).
| Live Audit Dimension | Verified Figure | Forensic Attribution |
|---|---|---|
| Live NFO Credit Spread Sleeve | +₹1,177.75 (4W / 0L) | 100% win rate on closed spreads; +₹2,962.75 active day M2M |
| Active Live Capital Pool (Nov 8) | ₹6,90,803.00 | ₹4,90,652.58 free cash + ₹2,00,150.42 NFO margin used |
| Early Live MCX Futures Sleeve | -₹15,735.96 | Pre-Oct-15 3.86R ratchet denominator bug + ALUMINI/COPPER |
| Live Journal Integrity | 1,365 Events | 69 broker position adoptions · 437 risk skips · 4 kill-switch trips |
What went wrong in early live MCX routing: Trailing profit ratchets divided unrealized profit by target_dist = 3.86R instead of initial stop risk 1R = |entry - stop|. A +2.0R move registered as only 51.8% of target, failing to lock the +1.0R floor before evening commodity mean-reversion.
# Commit: Fix trailing ratchet denominator from target_dist to 1R initial risk - target_dist = abs(pos.target_price - pos.entry_price) # 3.86R on SILVERM - progress = (current_price - pos.entry_price) / target_dist - if progress >= 1.0: lock_floor(pos, r_mult=0.5) + one_r = abs(pos.entry_price - pos.initial_stop_loss) # True 1R risk unit + r_multiple = (current_price - pos.entry_price) / max(one_r, 1e-6) + if r_multiple >= 2.0: lock_floor(pos, entry + 1.0 * one_r) + elif r_multiple >= 1.0: lock_floor(pos, entry + 0.4 * one_r)
Following this fix and enforcing Sharpe ≥ 1.00 & WF ≥ 1.00 gates (which disqualified ALUMINI, COPPER, and ZINCMINI), 170 paper MCX trades generated +₹25,828.73 gross / +₹8,777.54 net while live capital was concentrated into defined-risk NFO spreads.
| Statutory Charge Component | Schedule Applied | Amount (₹) |
|---|---|---|
| Zerodha Flat / % Brokerage | min(₹20/order, 0.03%) | ₹40.00 |
| STT / CTT (Sell Leg) | 0.01% on MCX sell notional | ₹25.00 |
| Exchange Transaction Fee | MCX 0.0021% round-trip | ₹10.50 |
| SEBI Turnover + Stamp Duty | ₹10/Cr SEBI + 0.002% buy stamp | ₹5.50 |
| GST (18% on Brokerage + Exch + SEBI) | 18.0% statutory tax | ₹9.18 |
| Total Statutory Friction + 1.5× Gate Hurdle | 1.80 bps cost → 2.71 bps min alpha | ₹90.18 |
# Unified CLI commands packaged in src/cli.py
$ quantiti trade --sleeves eq,mcx,fno,stockopt,pairs --risk-gate strict
$ quantiti commodity --walk-forward --trials 160 --min-sharpe 1.00 --min-wf 1.00
$ quantiti fnolab --structures bull_put,bear_call,iron_condor --defined-risk
$ quantiti council --two-pass-opus-audit --read-only
$ quantiti dashboard --host 127.0.0.1 --port 8005
| Trademark Registration | Indian Trademark Legal Use Certificate 6269114 (Quantiti) |
| Data & Audit Store | 301 Parquet files + append-only JSONL ledgers |
| Principal Engineer | Prince Jain (prince.sh) · GitHub (@princejain756) |