Commit Graph

278 Commits

Author SHA1 Message Date
jgrusewski
c39d78fd7b feat(surfer): cross-asset futures curve loader + CTA harness + opt-in allocator quality gate
Reusable infra from the diversifier research (the strategies themselves found no
deployable edge on our 22-market panel, but the construction is validated):

- dbn_local.load_curve: front + 2nd-nearby CONTINUOUS series + annualized carry
  (log(F1/F2)/gap_years) from parent-symbology outright expiries. Unlocks carry +
  basis-momentum without re-reading raw .dbn.
- cta_trend.py / cta_runner.py: literature-grounded managed-futures trend
  (vol-normalized risk-adj momentum -> tanh(x/0.89) response -> 1/3/12mo blend ->
  inverse-vol -> equal-risk-per-sector budget -> portfolio vol-target -> long/short).
  Construction validated (reproduces SG Trend +29% in 2022); premium absent for us
  (Sharpe ~0 over 2010-26 on 22 markets, ends mid-historic-drawdown).
- book_allocator: OPTIONAL edge-quality gate (min_sleeve_sharpe, default None=OFF) to
  bench dead/decaying sleeves so they can't be levered up by the vol-target. Off by
  default because a naive Sharpe floor also benches legitimate anticorrelated hedges;
  a correct quality/decay layer is future work. Suite green, mypy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 23:07:30 +02:00
jgrusewski
4f2f6024a7 feat(alloc): book-of-books allocator (date-aligned edges, inverse-vol+cap, fractional-Kelly, vol-target) + gauntlet
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 20:11:02 +02:00
jgrusewski
5917a11c79 feat(hunt): TSMOM trend harness (directional, vol-scaled, long/short) + gauntlet
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:49:46 +02:00
jgrusewski
63848e043e feat(hunt): crypto XS price-factor harness (reversal/lowvol/illiquidity) + gauntlet matrix
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:38:19 +02:00
jgrusewski
bad0c6accd docs: edge-discovery sprint plan (crypto XS factors + TS-trend + cross-asset trend, gauntlet-gated)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:33:10 +02:00
jgrusewski
e12819acdc feat(cockpit): mobile-friendly dashboard — fleet table reflows to cards, scroll-wrap dense tables, responsive SVG/header
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 18:54:20 +02:00
jgrusewski
31aba36b13 fix(xsfunding): guard live snapshot against decoupled-basis tickers (LIT-type artifacts)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 08:12:51 +02:00
jgrusewski
dc5b9b5111 fix(xsfunding): route xsfunding_nav through transient-error wrapper + retry price fetches (don't break nightly run)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:58:00 +02:00
jgrusewski
94da2c6a6b feat(xsfunding): register xsfunding paper track + Dagster asset in daily book
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:50:19 +02:00
jgrusewski
9e9fe2a13c feat(xsfunding): live-booking forward strategy (delta-neutral funding+basis, executable)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:45:45 +02:00
jgrusewski
0cf0e77ab4 feat(xsfunding): live per-coin snapshot (funding + perp + spot + qvol)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:41:59 +02:00
jgrusewski
e7c9946aac docs(xsfunding): paper-forward track implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:38:51 +02:00
jgrusewski
a54a59c57e fix(xsfunding): guard sp[nxt]>0 in basis runner + test basis_modeled report metadata
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:34:39 +02:00
jgrusewski
5fe24df253 feat(xsfunding): model spot-perp basis P&L in runner (true delta-neutral return; funding-only fallback)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:27:53 +02:00
jgrusewski
fce563a65d feat(xsfunding): basis-panel builder + build-basis-panel CLI + spot-panel npz persistence
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:22:46 +02:00
jgrusewski
7f0e91a45b feat(xsfunding): spot-history adapter + ticker-reuse guard clean_spot_leg (basis prep)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:18:14 +02:00
jgrusewski
178ac665c4 docs(xsfunding): spot-perp basis-modeling implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:12:47 +02:00
jgrusewski
2347714cae docs(xsfunding): self-document funding-only + annualization caveats in report/CLI; book_return_xs note
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:54:17 +02:00
jgrusewski
75006af0ef fix(xsfunding): runner robust to panel gaps — use last-known qvol for cost (KeyError on real data)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:41:38 +02:00
jgrusewski
b5f065b887 feat(xsfunding): backtest-funding CLI — verdict matrix over crypto_pit panel
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:37:31 +02:00
jgrusewski
d231971cb8 feat(xsfunding): gauntlet verdict matrix (modes x floors, crypto 365d, cross-cell DSR n_trials)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:33:13 +02:00
jgrusewski
17da65c6bd fix(xsfunding): charge exit cost for dropped-out holdings; expose n_rebalances vs panel_days
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:29:11 +02:00
jgrusewski
0f115abbf1 feat(xsfunding): walk-forward runner — PIT universe + per-mode daily carry series + liquidity-scaled cost
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:19:56 +02:00
jgrusewski
a0c35eae71 fix(xsfunding): clamp quantile-cut to disjoint top/bottom; cache panel; gross-scale doc; isolating PIT test
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:16:14 +02:00
jgrusewski
250f425374 feat(xsfunding): construction weights (long_tilt/market_neutral/executable) + signed carry book-return
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:08:52 +02:00
jgrusewski
b0862836aa feat(xsfunding): PIT eligibility + cross-sectional funding score (robust_z of trailing funding)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:05:20 +02:00
jgrusewski
050f45d667 feat(xsfunding): crypto_pit npz panel adapter (survivorship-free, read-only)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:02:00 +02:00
jgrusewski
549a21f660 docs(xsfunding): cross-sectional funding-dispersion implementation plan (6 tasks → verdict matrix)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:58:52 +02:00
jgrusewski
31aa746369 docs(xsfunding): cross-sectional crypto funding-dispersion strategy design (spike PASSED — survivorship-free panel on disk)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:53:40 +02:00
jgrusewski
28934a214c feat: retire crossvenue forward track (falsified 3x — max-min artifact, no edge)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:56:50 +02:00
jgrusewski
7766071d06 fix(b3b-deploy): verdict Job pg egress via postgres podSelector (pod CIDR, not service CIDR)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 19:13:15 +02:00
jgrusewski
988743302d deploy(b3b): one-off Job to run the backtest + publish verdict to cockpit (pg egress netpol)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 19:04:39 +02:00
jgrusewski
72dd1e1e9f fix(b3b): None-safe backtest-verdict rendering in cockpit templates + detail-page verdict test
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:55:30 +02:00
jgrusewski
2c94c65953 feat(b3b): retire eqfactor_ls forward track (no edge per backtest); keep long/tilt + shared scores
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:48:41 +02:00
jgrusewski
82fad9c21e feat(b3b): surface backtest verdict (PASS/FAIL + Sharpe/DSR) in cockpit fleet view
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:44:17 +02:00
jgrusewski
b42177e853 feat(b3b): persist backtest verdict to cockpit (backtest_summary table + --persist-cockpit)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:39:24 +02:00
jgrusewski
b01da6865e fix(b3b): PIT path uses full trading calendar for hold days; CLI omits candidate_top_k under --pit
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 10:16:27 +02:00
jgrusewski
feac27f98f feat(b3b): PIT-trailing universe selection — remove peak-liquidity lookahead (two-pass, memory-bounded)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 10:01:36 +02:00
jgrusewski
5029c4058b feat(b3b): delisting-return handling — book terminal return when held name's series terminates (fixes long-only inflation)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 09:42:49 +02:00
jgrusewski
684467bd9c fix(b3b): data hygiene — exclude test/penny tickers + per-day return sanity guard (hold-flat on garbage prices)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 09:29:44 +02:00
jgrusewski
9068f73b51 feat(b3b): expose candidate-top-k/min-history on backtest-equity CLI (use bounded path by default)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 09:09:01 +02:00
jgrusewski
76e07ec3be fix(b3b): move candidate-universe SQL into store adapter; stable tiebreaker; tidy candidate panel load
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 09:03:46 +02:00
jgrusewski
103572a6eb feat(b3b): bounded survivorship-safe candidate pre-filter + adjclose-only low-memory run path
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 08:56:08 +02:00
jgrusewski
c7602dbf66 fix(b3b): cross-construction sr_variance for DSR; guard short series (no NaN JSON); epoch_day public
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:53:38 +02:00
jgrusewski
33ade4356c feat(b3b): fxhnt backtest-equity CLI — run walk-forward verdict + write report JSON
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:45:26 +02:00
jgrusewski
714a4963a7 feat(b3b): gauntlet verdict + JSON report per construction (DSR/OOS, n_trials=3)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:42:50 +02:00
jgrusewski
8447245603 fix(b3b): report only traded rebalances in n_names_avg/rebalance_dates; document hold-flat + two-way turnover
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:40:23 +02:00
jgrusewski
3e36db0d74 fix(b3b): honor momentum_min_history in runner (wire the inert knob)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:35:11 +02:00
jgrusewski
ccd610677e feat(b3b): walk-forward runner — PIT universe + monthly rebalance + per-construction daily returns
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:33:19 +02:00
jgrusewski
855887b20a feat(b3b): daily_returns_for_weights (fixed-weight holding-period book returns)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:27:53 +02:00