Drishti deep research — data sources, Fable, CoinGlass, feature calibration
2026-06-13. Sources: multi-agent web research (23 primary sources, adversarially spot-verified), live API probes with drishti's own keys, the claude-api reference, and a calibration run over 214 live closed signals (snapshot commit c9b7ebc0).
1. Executive summary
- Best new features are free or already paid for. The highest-expected-value additions (spot-vs-perp CVD divergence, basis, IV term structure, global long/short ratio, Coinbase premium) come from Binance/Deribit WebSocket+REST (free) or the CoinGlass plan already being paid for. No new paid subscription clears the value bar — Santiment, CryptoQuant and CryptoPanic all fail on price or staleness (§3).
- Do not switch the live model to Fable today. It is hard-blocked by the
OpenRouter account's data policy, costs ~2.6–4× Opus 4.8 for this workload,
and the current request payload (
temperature=0) is incompatible. Full verdict + a rollout plan if conditions change in §5. - The literature is on drishti's side methodologically. Published LLM-agent backtests (FinMem/FinAgent/TradingAgents) largely do not survive leakage-controlled re-evaluation; a live forward track record is the stronger evidence class. The actionable imports are validation practices (PSR/MinTRL, overlap-aware CIs), not architectures (§6).
- OI change is the one signal every tier agrees on. Across 214 closed
signals, a falling/low 24h OI change predicts wins and a rising/high one
predicts losses — it tops the value-bucket spread (76% WR low vs 12% high),
tops permutation importance, and is the post-close judge's #1 explanatory
feature (
oi_change_1h, 11W/1L). Notably this is the family the academic literature calls "folklore-grade" (§6) — drishti's own data disagrees. The analyst already cites OI heavily; this says keep weighting it (§7). - The statistical layer is underpowered — read it as hypotheses. Only 100 of 214 signals carry a full feature snapshot (the table started mid-stream), leaving 64 won/lost for the regression against 65 features. CV-AUC ≈ 0.80 looks predictive but at p≈n is at real overfitting risk; the citation + bucket tiers (larger N) are the trustworthy ones (§7).
2. Ranked "add next" shortlist
Score = expected orthogonal value × (1/effort) × (1/cost). Effort S < 1 day, M ≈ 1–3 days, L > 3 days, against the existing ~100-feature set.
| # | Feature | Source / cost | Effort | Why it adds orthogonal signal |
|---|---|---|---|---|
| 1 | Spot CVD vs perp CVD divergence — per-asset "spot-led / perp-led / mixed" tag per cycle | Binance spot+futures aggTrades WS (free); CoinGlass aggregated-taker-buy-sell-volume as fallback | M | Existing taker ratio is perp-only. Whether a move is backed by spot (durable) or leverage (squeeze-prone) is exactly the regime context a 24h call needs. Velo sells this as "OI-normalized CVD". |
| 2 | IV term structure slope + IV−RV premium (BTC/ETH) | Deribit — already integrated | S | Extends the existing ATM-IV/25d-skew pull. Term-structure inversion flags event risk; rich/cheap vol flags mean-reversion odds. Two extra fields per cycle. |
| 3 | Spot–perp basis | Compute from Binance spot vs perp mark (free) or CoinGlass basis/history | S | Carry/positioning signal with peer-reviewed support at this horizon (BIS WP 1087 funding-carry family). Complements funding z-scores with a level, not a rate. |
| 4 | Global long/short account ratio + OI-by-exchange | CoinGlass — confirmed free on current Hobbyist key | S | Retail-vs-top-trader split: drishti has top-trader ratios but not the all-accounts ratio; divergence between the two is the crowding read. |
| 5 | Coinbase Premium Index | CoinGlass coinbase-premium-index — confirmed accessible | S | US institutional spot flow proxy, demonstrably orthogonal to Binance-derived microstructure. One number per cycle. |
| 6 | Time-of-day / day-of-week priors | Already computed in tod_heatmap.py — wire into the prompt | S | The nightly time-of-day win-rate heatmap exists but the analyst never sees it. Cheapest possible feature: surface the per-bucket prior as a data block. |
| 7 | Hyperliquid whale position bias (BTC/ETH/SOL) | Hyperliquid public API (free) | S–M | Aggregate long/short skew + liq-price clusters of named large accounts — a different and arguably smarter cohort than Binance top traders. Fully transparent venue, trivially polled. |
| 8 | News headlines block (RSS → Haiku summary) | Free RSS (CoinDesk/The Block/CoinTelegraph) + existing reflection-model budget | M | Already P2 on the roadmap as News RAG. CryptoPanic's paid API (~$199/mo) is NOT needed — plain RSS + the existing Haiku reflection model covers the 15-min cadence at near-zero cost. |
| 9 | Volume-profile S/R levels | Compute from Binance klines (free) | M–L | Approximates IntoTheBlock's "in/out-of-the-money around price" support/resistance without on-chain data. Slow-moving levels uncorrelated with the TA stack; useful for SL/TP placement specifically (the v23 expiry problem). |
| 10 | Exchange reserve / netflow | CoinGlass exchange/balance — confirmed accessible | M | Classic on-chain flow signal, but daily-resolution and noisy at 24h horizon. Only worth it if the Hobbyist key unlocks it for free. |
Explicitly rejected:
| Candidate | Why not |
|---|---|
| Santiment (on-chain/social) | Free tier: 1,000 calls/mo + 30-day lag on restricted metrics (verified 3-0). Realtime needs Sanbase Max. Dead on arrival for a live system. |
| CryptoQuant API | Cheapest API tier ~$109/mo, daily resolution, personal-use license. Wrong shape and double the budget. |
| CryptoPanic API | ~$199/mo Growth for real-time; free tier is delayed. RSS+Haiku achieves the same prompt block for ~$0. |
| Kaito (attention/mindshare) | ~$833/mo, and attention is noisy at a 24h horizon. |
| Token Metrics | Composite 0–100 grades duplicate what drishti's own LLM produces. |
| Order-book L2/footprint feeds | Evidence for book-shape features is minute-scale and contemporaneous (§6); poor fit for a 24h horizon and heavy to ingest. |
3. Paid-API landscape (verified pricing, 2026-06)
| Service | Cheapest useful tier | Fit verdict |
|---|---|---|
| CoinGlass | Hobbyist $29/mo (price list today; the $35 being paid may be a legacy rate — check billing) | Already paid; under-utilized (§4) |
| Coinalyze | ~$30/mo (already keyed, free 40 rpm tier in use) | Fine as-is |
| Santiment SanAPI | Free useless (30-day lag); realtime ≈ Max tier | Reject |
| CryptoQuant | $109/mo, daily resolution | Reject |
| CryptoPanic | $199/mo Growth | Reject — use RSS |
| Laevitas | Free tier exists; $50/mo Pro | Watch — only if options work expands beyond Deribit pulls |
| Velo | $199/mo API | Reject — replicate CVD in-house (#1) |
4. CoinGlass action list
Current plan pricing (verified at coinglass.com/pricing): Hobbyist $29/mo,
30 req/min, "80+ endpoints" → Startup $79/mo, 80 req/min, "130+" → Standard
$299/mo → Professional $699/mo. The docs do not publish per-endpoint tier
gating — which is why an empirical probe with the real key is the only reliable
map. scripts/probe-coinglass-tier.py (committed, deployed to the VM) tests 19
unused endpoints: aggregated taker buy/sell (CVD), pair taker vol, global
long/short ratio, top position ratio, OI exchange-list + aggregated OHLC,
basis, liquidation map + heatmap model1, RSI list, Coinbase premium, borrow
rate, BTC ETF flows, exchange balance, options max-pain, spot taker vol, whale
index, fear&greed, and the account-level endpoint.
Probe results (current Hobbyist key, scripts/probe-coinglass-tier.py,
2026-06-13):
| Endpoint | Result | Use |
|---|---|---|
taker-buy-sell-volume/history (pair) | ✅ code=0 | CVD inputs (#1) |
global-long-short-account-ratio/history | ✅ | retail crowding (#4) |
top-long-short-position-ratio/history | ✅ | top-trader positioning |
open-interest/exchange-list | ✅ | OI-by-exchange (#4) |
open-interest/aggregated-history | ✅ | aggregated OI trend |
basis/history | ✅ | spot–perp basis (#3) |
coinbase-premium-index | ✅ | US institutional flow (#5) |
borrow-interest-rate/history | ✅ | leverage cost |
etf/bitcoin/flow-history | ✅ | ETF flow (already have via Farside) |
exchange/balance/list | ✅ | exchange reserves (#10) |
option/max-pain | ✅ | options pin |
index/fear-greed-history | ✅ | already have via Alternative.me |
liquidation/map | ⛔ 401 "Upgrade plan" | Startup $79 only |
liquidation/heatmap/model1 | ⛔ 401 | Startup $79 only |
rsi/list | ⛔ 401 | Startup $79 only (drishti computes RSI itself) |
whale-index/history | ⛔ 401 | Startup $79 only |
aggregated-taker-buy-sell-volume/history | ⚠️ 400 | needs exchange_list param (trivial fix) |
spot/aggregated-taker-buy-sell-volume | ⚠️ 400 | same param fix |
user-account-subscription | ⚠️ 404 | endpoint moved; ignore |
Verdict: stay on Hobbyist ($29/mo list — the paid rate may be a grandfathered
$35; the key works either way). Every orthogonal high-value endpoint in the
shortlist — basis (#3), global L/S ratio + OI-by-exchange (#4), Coinbase
premium (#5), and the CVD inputs (#1) — is already accessible. The $79 Startup
tier buys only the liquidation heatmap/map, RSI list, and whale-index family;
RSI drishti computes itself, and the degraded top-3-cluster levels via the
existing liquidation_heatmap_* features already cover the heatmap need.
Don't upgrade unless heatmap-driven SL/TP placement becomes a priority.
Then:
- Wire {basis, global L/S ratio, top-position ratio, Coinbase premium,
OI-by-exchange} into
coinglass_advanced.py(same TTL-cache pattern) — shortlist #1/#3/#4/#5, all confirmed free on the current plan. - For aggregated CVD, add the required
exchange_listparam (e.g.Binance,OKX,Bybit) to the two*-taker-buy-sell-volumecalls — they 400 only because the param is missing, not because they're gated. - Mind the budget: 30 req/min is shared across the 4 existing families; each new endpoint × 8 assets × 15-min cycles needs the same in-memory TTL cache treatment to stay under the cap.
5. Fable (claude-fable-5) verdict: not now
Facts established by probe + the claude-api reference:
| Dimension | Opus 4.8 (current) | Fable 5 |
|---|---|---|
| OpenRouter price | $5 / $25 per MTok | $10 / $50 (anthropic/claude-fable-5, live, 1M ctx) |
| Tokenizer | baseline | ~30% more tokens for identical content |
| Thinking | off (temp-0 single shot) | always on, billed, cannot be disabled |
| Sampling params | temperature=0 accepted | temperature rejected (400) — llm_client.py:879 sends it on every call |
| Data policy | works | Requires 30-day retention. Live probe returned 404 "No endpoints available matching your guardrail restrictions and data policy" — the OpenRouter account's privacy settings exclude Fable entirely. |
Cost projection (anchored on the now-honest telemetry: true burn ≈ $31/day on Opus 4.8): 2× price × ~1.3 tokenizer ≈ $80/day before thinking tokens; always-on thinking on ~770 decide-calls/day plausibly pushes $95–125/day — at or above the $100/day OpenRouter cap shared with drishti-pulse, for an unproven signal-quality gain.
Rollout plan, if revisited:
- Account: relax OpenRouter privacy settings (user decision — prompt/ feature data would be retained 30 days by the provider).
- Code: make
temperatureconditional on model family inllm_client.decide(); addanthropic/claude-fable-5(request, dotted, and dated-response forms) toCOST_PER_M_BY_MODELin the same commit (the 2026-06-02..12 Opus 4.8 underpricing incident is the cautionary tale); verify forced tool-calling passes a one-shot probe before flipping prod. - Switch: time-sliced cohort, not a parallel shadow arm (the histon
shadow burned ~$60/day untracked). Flip
OPENROUTER_DEFAULT_MODEL, bump prompt version tag (fresh cohort), run ≥2 weeks / ≥40 closed signals, then compare per-version WR/Brier via the existing stats pipeline. - Propagation: model change = major change → capabilities entry, changelog, CLAUDE.md, README in the same commit (propagate-change skill).
- Cheaper experiment first: before paying 3–4× for Fable, A/B the
reasoning depth on Opus 4.8 itself (adaptive thinking via OpenRouter
reasoningparam, if supported through the Bedrock-BYOK route) — same hypothesis ("more deliberation → better calls") at a fraction of the cost.
6. Literature takeaways (full citations in lane synthesis)
On LLM trading agents:
- TradingAgents' Sharpe 5.6–8.2 claims: 3 stocks, 3 months, no costs, no ablations, likely pretraining overlap (2412.20138).
- FINSABER re-evaluation (20 yrs, 100+ symbols, leakage-controlled): LLM agents underperform buy-and-hold by 0.4–0.9 Sharpe with 2–3× drawdowns; FinMem's flagship TSLA result drops to ≈ buy-and-hold (2505.07078).
- "Profit Mirage" (2510.07920): backtested LLM returns evaporate past the model's knowledge cutoff; only causal-reasoning scaffolds generalize. Drishti's forward-only live record is immune to this failure mode — it is the stronger evidence class. Protect it; don't trade it for backtest-validated architecture imports.
On features at the 24h horizon:
- Funding rate is the only family with peer-reviewed predictive evidence at this horizon (crypto carry: BIS WP 1087; funding forecastable: SSRN 5576424). Drishti already weights it heavily — justified.
- Taker/trade-flow imbalance: explains contemporaneous minute-scale moves (Silantyev, Digital Finance 2019) — not established as a 24h predictor. Ingest CVD as regime context, not as a directional oracle.
- OI/liquidation cascade lore: ubiquitous in practitioner blogs, no peer-reviewed effect sizes found — keep graded as folklore in the prompt.
- Options IV/skew: informative for vol, mixed for direction.
Validation imports for a ~200-signal record (ranked):
- PSR / Deflated Sharpe + Minimum Track Record Length (Bailey & López de Prado) — answers "is 64% WR luck?" while charging for every prompt-version iteration as a trial.
- Overlap-aware CIs — 24h signals on correlated assets are not independent draws; cluster by time window before any z-test (the tatkaal A/B learned this the hard way).
- Volatility-scaled barriers — drishti's TP/SL/expire is already triple-barrier; scaling barrier width by realized vol (FreqAI practice) addresses the v23 finding that oversized targets win ~14%.
- Purged/embargoed walk-forward for any offline prompt-variant evaluation.
- Hansen SPA when declaring a prompt version the winner.
7. Feature calibration — which features earn their keep
Infrastructure shipped (src/drishti/feature_calibration.py, 12 unit tests):
- Tier 1 — citation win rates: every feature the LLM listed in
features_referenced, win rate when cited + Wilson 95% CI, sorted by CI lower bound; judge view (weekly Sonnet attribution) merged viaaggregate_attributions. - Tier 2 — value buckets: tercile win rates per numeric feature from the
full
signal_featuressnapshots ("does high funding_z actually lose?"). - Tier 3 — statistical importance: L2 logistic regression won-vs-lost, stratified CV AUC (with an explicit is-this-better-than-coinflip flag) + permutation importance.
Results (214 closed signals, snapshot c9b7ebc0). Pooled baseline win rate
62.6% (97W / 58L / 59 expired). Per prompt-version: v21 50% (64 resolved),
v22 100% but only 9W/0L — too tiny to mean anything, v23 68% (81
resolved), v24 just started (1 resolved). The interactive tables are on the
research microsite (/explorer).
Tier 1 — win rate when cited (resolved-only, Wilson 95% CI, ≥5 cites):
| Feature | Cited | WR | 95% CI |
|---|---|---|---|
hurst_exp_10d | 85 | 73.8% | 62–83% |
top_trader_pos_ratio_1h | 28 | 82.4% | 59–94% |
top_trader_long_pct | 40 | 74.2% | 57–86% |
mtf_alignment | 90 | 67.7% | 56–78% |
The post-close judge (feature_attributions, 146 attributed) independently puts
oi_change_1h first — 11W / 1L when named as the explanatory feature.
Tier 2 — win rate by feature value (terciles, n≥10): the standout is
oi_change_pct — low tercile 76% WR, high tercile 12% (a 64pp
spread). fear_greed_value, oi_notional_24h_delta, change_24h_pct and
rsi_1h all show the same shape: extreme-high values lose.
Tier 3 — statistical importance (L2 logistic, 64 won/lost × 65 features):
CV-AUC 0.80 ± 0.08, and oi_change_pct is the top permutation-importance
feature with a negative coefficient (higher OI change → lower win
probability), consistent with Tiers 1–2. Caveat: at 65 features on 64 samples
(p≈n) this AUC is at severe overfitting risk — treat the ranking as
hypothesis-generating, not proof. Only 100 of 214 signals carry a feature
snapshot (the signal_features table started mid-stream, ~v23 era), so Tier 2/3
describe a recent cohort, not the whole record.
The one robust, cross-tier finding: OI change is inversely related to win rate — it leads the bucket spread, the permutation importance, and the LLM-judge attribution, all pointing the same way. Given the analyst already cites OI heavily and the data rewards it, this validates the current weighting (and contradicts the academic "OI is folklore" stance from §6 — drishti's own record is the better evidence here).
Honesty rails baked in: expired excluded from WR denominators, n<10 buckets suppressed, Wilson-lower-bound sorting, fixed caveats block (multiple comparisons, non-independence, citation ≠ causation), and an explicit coin-flip flag on the CV-AUC.
8. Competitor capability matrix (lane 4, condensed)
| Product | Unique data drishti lacks | Worth copying | Price |
|---|---|---|---|
| Velo | OI-normalized CVD, 1-min cross-exchange normalization | Funding heatmap (coins × time); cross-asset market page | $199/mo API |
| Laevitas | Full options surface: term structure, Greeks, VRP, block flow | Metric-vs-metric spread analysis | free–$50 |
| IntoTheBlock | Cost-basis supply clusters (in/out-of-money S/R) | Supply-at-price bars as machine-readable S/R | ~$10–100 |
| TRDR / Coinalyze | Spot-vs-perp CVD divergence, book walls, footprint | "Move backed by spot or leverage?" paired panel | ~$30 |
| Hyperliquid tools | Named whale live positions, entries, liq prices | Whale leaderboard with long/short bias per asset | free |
| Santiment | Social volume, crowd sentiment, dev activity | Social-spike annotations on the price chart | free is lagged |
| Token Metrics / Kaito / exchange AI chat | grades / mindshare / chat UX | "why this signal?" expander (drishti's logic bullets half-do this) | skip |
Dashboard ideas worth stealing regardless of features: the funding/liq heatmap panel (#3 in lane 4 — drishti already has all the data), and per-signal "spot-led vs perp-led" tags once shortlist #1 ships.
9. Recommended sequencing
- Now (free, S-effort): IV term structure + IV−RV (#2), basis (#3), time-of-day prior into prompt (#6).
- After CoinGlass probe: wire accessible endpoints (#4, #5, part of #1); decide Startup upgrade with data, not vibes.
- Next build slot (M): spot-vs-perp CVD ingester (#1) — biggest single orthogonal add; Hyperliquid whale bias (#7).
- Validation pass: PSR/MinTRL on the live record; overlap-aware CIs in the stats pipeline; volatility-scaled TP/SL experiment (directly attacks the 25%-expiry problem).
- Calibration loop: run feature_calibration per prompt-version cohort; prune dead features from the prompt (cheaper tokens, less noise) and up-grade the folklore-graded ones only if Tier 2/3 evidence supports them.
- Model: stay on Opus 4.8; revisit Fable when OpenRouter policy/cost conditions change (§5).