Claude+ fine-tuned with Tuatara Vectors: Performance Returns
A leading edge gives you alpha. Headline→asset signal
on US equities at a 2-session hold (~2 trading days, long basket). Each model runs the same
news flow; gross is the unhedged directional return, vs SPY is the excess return over the
S&P 500 over the same window.
Get your own Tuatara model →
On equities, the Tuatara vector signal leads outright — on return, win rate, and risk-adjusted
Sharpe. Forced long over a 2-session hold, Tuatara returns +2.28% gross / +1.94% over SPY
(win 68%), well ahead of Claude +1.21% / +0.86% (win 66%), and it does so at lower volatility too,
so its per-trade Sharpe is 0.70 vs Claude's 0.27. The Combined (Tuatara ∪ Claude) book is
best on a risk-adjusted basis: +1.80% over SPY at Sharpe 0.79, win 72%. The free on-box MiniLM
embedder lands far behind (+0.85% gross / +0.51% over SPY, win 54%, Sharpe 0.20) — on the equity universe
the discriminative Tuatara vectors clearly beat a generic sentence embedder. All legs are measured in a
single run on the identical selected headlines (top-K 12), so the only thing that differs is each
model's asset picks.
2-session hold — by model (US equities)
| Model | Gross % | vs SPY % | Win % | Sharpe / trade | n |
| Tuatara (vector) | +2.28 | +1.94 | 67.8 | 0.70 | 149 |
| Claude (LLM reasoning) | +1.21 | +0.86 | 66.3 | 0.27 | 92 |
| Combined (Tuatara ∪ Claude) | +2.15 | +1.80 | 72.5 | 0.79 | 149 |
| MiniLM (on-box, free baseline) | +0.85 | +0.51 | 54.0 | 0.20 | 150 |
Sharpe is per-trade (mean ÷ stdev). Claude trades only the headlines it picks a basket for
(n=92); Tuatara/Combined/MiniLM cover the full selected set.
Parameters used
| Asset class / namespace | US equities · CMDB-nasdaq-v07 (asset_deep_discovery, finnhub-us) |
| Headlines (sample) | 150 selected → 149 priceable, entry at next-session open after the headline |
| Direction | forced long (--force-side long) — every non-empty basket traded long |
| Hold | 2 trading sessions (~2 days, --hold 2); exit = close +2 sessions |
| Basket size (top-K) | 12 (--top-k 12) |
| Score filter | Tuatara min score 0.04 (--min-tuatara-score 0.04), top-K by score |
| Universe | all priceable tickers (27,848 with a bar; embed universe = 15,771 with a ≥40-char description) |
| Round-trip cost | 0.15% (--cost 0.0015) |
| Split/artifact guard | per-leg move capped at ±3.0 (--max-leg-move 3.0) |
| Price source | historical_stock_prices (daily OHLC, weekday sessions) |
| Benchmark | SPY (S&P 500 ETF) |
| Gross | unhedged equal-weight long-basket return |
| vs SPY | basket return − SPY return over the identical window (excess return) |
| Tuatara | vector engine, query = full article body (keyword-condensed), top-12 by score |
| Claude | entitlement engine, model claude-opus-4-8 (baskets cached, query = title) |
| MiniLM | on-box ONNX all-MiniLM-L6-v2 (384-dim); cosine over the 15,771-stock description universe |
All legs are measured in a single run on the identical selected headlines; only the asset
picks differ. Command: backtest_tuatara_vs_claude_stocks.py --sample 150 --hold 2 --force-side long
--cache claude_stock_baskets_cache --embed-baskets embed_stock_baskets_minilm --embed-label MiniLM
Method