Commit Graph

234 Commits

Author SHA1 Message Date
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
jgrusewski
dc9bfeb687 feat(b3b): PIT universe_asof + month-end rebalance-date domain (survivorship-free)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:25:41 +02:00
jgrusewski
a93cf05fab fix(equity-factor): guard non-positive recent price in momentum_12_1 (delisted-name safety)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:24:29 +02:00
jgrusewski
d7c055c927 refactor(equity-factor): extract pure momentum_12_1/realized_vol window helpers (DRY live + backtest)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:20:49 +02:00
jgrusewski
e254ca02ef docs(b3b): walk-forward equity-factor backtest implementation plan
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 12:17:39 +02:00
jgrusewski
107b7e53f7 fix(b3a-deploy): memory request/limit + PYTHONUNBUFFERED on ingest Job
Bounded-window ingest peaks small; request 768Mi/limit 1536Mi makes the scheduler
place it with headroom and stops it evicting neighbours (a prior unbounded run hit
~2.3Gi on a shared 6.4Gi node). PYTHONUNBUFFERED streams progress logs live.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 01:38:18 +02:00
jgrusewski
8ee4057ec2 fix(b3a): bound ingest in-flight window (~2x workers) — prevent unbounded result accumulation / OOM eviction
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 01:37:29 +02:00
jgrusewski
b1200eac8e perf(b3a): parallelize ingest fetch (ThreadPool); DuckDB writes stay main-thread (single-writer safe)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 01:17:24 +02:00
jgrusewski
de69f270da merge: B3a — survivorship-free historical EOD ingest (mechanism + dedicated PVC/Job)
Resumable HistoricalEodIngest → dedicated backtest warehouse PVC; fxhnt ingest-historical CLI; external-443
egress netpol. Backtest engine (B3b) next. 370 tests green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 00:24:51 +02:00
jgrusewski
a32aac1049 fix(b3a-deploy): dedicated external-443 egress netpol for the ingest Job (Tiingo reachable past default-deny)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 00:24:47 +02:00
jgrusewski
c847d7b109 feat(b3a-deploy): historical-ingest entrypoint + config + dedicated backtest PVC + resumable Job
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 00:22:38 +02:00
jgrusewski
5e8b02ec8b fix(b3a): mark empty-bars tickers processed (no recurring refetch on incremental runs)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 00:15:17 +02:00
jgrusewski
371a16f94c feat(b3a): resumable survivorship-free historical EOD ingest -> warehouse + ticker membership
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 00:09:49 +02:00
jgrusewski
8d363e14b5 docs(b3): spec — survivorship-free price-only equity-factor backtest (PIT ingest + walk-forward + gauntlet)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 00:05:01 +02:00
jgrusewski
7fc1790780 feat(b2.2): equity-factor price-only (momentum+lowvol); drop fundamentals fetch (Tiingo DOW-30-only)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 22:31:31 +02:00
jgrusewski
d29593e0ed feat(b2.2): low-vol factor + price-only composite (momentum+lowvol); keep value/quality for future
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 22:27:26 +02:00
jgrusewski
9835d64cbb perf(b2): eqfactor_scores shared asset; 3 sleeves consume it (fetch once, n=150)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 21:31:16 +02:00
jgrusewski
6d2acf7956 perf(b2): shared batched-concurrent factor scores; services consume precomputed scores
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 21:27:53 +02:00
jgrusewski
547074aebb fix(b2): _factor_targets resilient per-ticker — skip names lacking Tiingo coverage (one 400 no longer aborts the book)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 18:24:43 +02:00
jgrusewski
3709f7853c merge: B2 — equity-factor sleeve (value+quality+momentum, 3 constructions) on Tiingo fundamentals
Cross-sectional multi-factor US-equity book; long-only/long-short/long-tilt as 3 ForwardStrategy paper-tracks.
TiingoFundamentalsClient + TiingoUniverseSource (dollar-volume top-N). 358 tests green, mypy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:59:17 +02:00
jgrusewski
95571669e6 feat(b2): wire 3 equity-factor assets into the Dagster graph
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:55:38 +02:00
jgrusewski
273a51e86c feat(b2): equity-factor target builder + 3 ForwardStrategy services
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:50:16 +02:00
jgrusewski
f89003e3df fix(b2): rank full filtered universe by dollar-volume (drop alphabetical pre-slice bias)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:45:46 +02:00
jgrusewski
e1deecc702 feat(b2): TiingoUniverseSource (supported-tickers filter + dollar-volume top-N)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:41:27 +02:00
jgrusewski
8d4d389096 feat(b2): TiingoFundamentalsClient (daily metrics + statements)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:35:51 +02:00
jgrusewski
98e264f14c refactor(b2): tilt uses statistics.median for consistency
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:33:11 +02:00
jgrusewski
9e4379a3e8 feat(b2): equity-factor domain (z-score, composite, 3 constructions, book return)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:30:01 +02:00
jgrusewski
159b9b1fc8 feat(b2): FundamentalsClient + UniverseSource ports
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:27:10 +02:00
jgrusewski
c033607317 docs(b2): implementation plan — equity-factor sleeve (7 tasks)
Ports → domain (z-score/composite/3 constructions, full code) → Tiingo fundamentals+universe adapters →
3 ForwardStrategy services → registry+assets → deploy. TDD, deterministic domain + fake-port tests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 17:19:08 +02:00
jgrusewski
5f292deb45 docs(b2): spec — equity-factor sleeve (value+quality+momentum, 3 construction variants)
Cross-sectional multi-factor book on broad liquid US universe (Tiingo fundamentals + 30yr EOD); long-only /
long-short / long-tilt as 3 ForwardStrategy paper-tracks through the gate. Deterministic domain+fake-port
tests. Backtest/DSR layer = separate increment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 10:32:00 +02:00
jgrusewski
98ce7b3c2b merge: B1 — 6 paper-track strategies as Dagster assets + Tiingo equity data
Faithful ports (sixtyforty/multistrat/gd/funding/crossvenue/poc incl. torch), generic ForwardTracker,
6 assets wired into cockpit_forward, equity sleeves on Tiingo native adjClose (33yr total-return).
327 tests green, mypy clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:59:39 +02:00
jgrusewski
c192010c36 deploy(b1): wire TIINGO_API_KEY into the Dagster pod (equity sleeves)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:59:34 +02:00
jgrusewski
10c0c4a59f feat(b1): TiingoDailyClient (native adjClose, 33yr); swap equity sleeves Massive->Tiingo
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:50:25 +02:00
jgrusewski
17eca26bb3 test(b1): lock multi-dividend back-adjustment compounding in MassiveDailyClient
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:38:29 +02:00
jgrusewski
6e547dad80 feat(b1): MassiveDailyClient total-return adapter; swap equity sleeves Yahoo->Massive
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:32:51 +02:00
jgrusewski
e100502c17 refactor(b1): paper-track assets swallow only transient errors, not real bugs
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:22:17 +02:00
jgrusewski
2e391489bf feat(b1): wire 6 paper-track assets into the Dagster graph
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:18:12 +02:00
jgrusewski
6468b756ba feat(b1): surfer poc paper-forward strategy — faithful port with torch + real signal_sweep/pit_sweep
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 08:03:10 +02:00
jgrusewski
559795b3fd refactor(b1): crossvenue single venue snapshot per run (funding+volume one fetch)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 07:22:25 +02:00
jgrusewski
3a0e6cf06e feat(b1): cross-venue funding paper-forward strategy (faithful port)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 07:16:13 +02:00
jgrusewski
e2168ee0ef fix(b1): funding port faithful — qualify on tf30 (30d mean), crypto-native+hedgeable universe
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 07:08:39 +02:00
jgrusewski
84bfb2110e feat(b1): crypto funding-harvest paper-forward strategy (Binance, faithful port)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 07:02:48 +02:00
jgrusewski
a2d7bfe512 docs(b1): note gd QQQ-alignment choice vs foxhunt original
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 06:58:10 +02:00
jgrusewski
6e004f1749 feat(b1): growth-discipline paper-forward blend (composes multistrat, faithful)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 06:54:27 +02:00
jgrusewski
f2aade706a feat(b1): multistrat adaptive paper-forward book (Yahoo, faithful port)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 06:48:53 +02:00