- execution/trader: a held US stock with no print for 5 sessions that has left
the index is sold at its last print (execution.SETTLE_AFTER_SESSIONS), in both
the batch replay and the live session ledger. Acquired names used to stay at
their last mark forever: lowrisk_top20 ended 2017-12..2026-10 with 11 of 26
dead positions, and CAGR rises 1.7-5.5pp once they settle. ENGINE_VERSION
cash-ledger-pit-v3; the API cache key follows.
- universe_history: current members whose pre-2011 addition the Wikipedia change
log missed now start at the list page's "Date added" (80 of 94 current members
added 2001-2010 were open-start, e.g. ISRG, MA, BKNG). Membership from 2016 on
is unchanged; the research panel cache now keys on the membership intervals.
- research/lab/registered: pure-ETF strategies replay on the ETF panel (they ran
as all-cash books or crashed); prepare_strategy refuses an ETF strategy that
lacks its ETF universe.
- research/lab/factors: trend_hzz uses a month's regression betas only from the
session its forward returns end (short months read 1-2 sessions ahead).
- tests: every registered strategy (US and CN) is truncation-invariant on the
production signal path; batch and live ledgers settle a delisting identically.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Share point-in-time signals and a cash-funded order ledger across backtests and trading. Correct eligibility, missing-price fills, quality factors, regime inputs, warmup windows, and cash-injection accounting. Add reproducible registered-strategy comparisons and paired forward candidates with a 20% resize band.
Validation: 125 Python tests, 23 web tests, TypeScript/Vite build, 87 strategy causality checks, and real-data target/order/equity parity for 10 strategies.
A live book is a cohort of strategies, each with its own account, started
on one date with one capital and a flat fee per order (trader.LIVE_BOOKS).
The original book keeps its state in data/; a named book in
data/books/<book>/. The monitor runs every book; auto/status/log/compare/
replay take --book. A fresh account opens on the book's first session.
selected_2026_09: US $10,000 and $1 per order from 2026-09-25, CN ¥50,000
and ¥5 per order from 2026-09-28 (the first CN session after the choice).
Strategies beat their benchmark in the Apr-Sep 2026 point-in-time replay
and passed a 10-year PIT backtest (US Sharpe >= 0.6, MaxDD > -50%; CN
Sharpe >= 0.2, CAGR > 0), no daily variants, at most two frequencies per
factor signal, plus the three 2026-09 research strategies.
bridge.py live --book and bridge.py books feed a book selector on the
live page (/api/strategies/live?book=, /api/strategies/live/books).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The three services become quant-trading-monitor, quant-trading-api and
quant-trading-vite, run from /home/gahow/projects/quant-trading. Their
units were previously untracked files in ~/.config/systemd/user.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- web/src/server/paths.ts resolves the repo root from its own location,
loads the single repo-root .env, and defines data/web/ (watchlist,
stock cache, backtest cache) and data/precomputed/.
- The API spawns bridge.py at the repo root instead of ../quant.
- precompute_backtest.py writes to data/precomputed/ instead of
../stock-agent/data/precomputed.
- Rename the project to quant-trading (web package quant-trading-web).
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- MaxDD ranks shallower drawdowns first (values are negative); ruined
results are badged and never ranked as best.
- Metrics render '—' for null/non-finite values instead of crashing.
- Amounts use the market's currency (CNY for CN) instead of hard-coded USD.
- Injection scenarios show invested / final value / profit / return on
invested from capitalFlows and label return metrics as time-weighted.
- Precomputed results show their data end date and warn when older than 7
days; live strategies warn when not updated for 4 days, show start date,
price as-of, stale holdings, and same-window benchmark with excess return.
- Unknown precomputed scenario returns 400 instead of silently serving the
first scenario; the client uses the scenarioId it receives.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Keying LiveStrategyDetail by strategy name resets its child state (trade-log
pagination), so switching strategies no longer keeps the previous page index.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Vite is now only an upstream for the nginx :5443 HTTPS entrypoint, and the
API server opts into NODE_USE_ENV_PROXY so Nasdaq/Yahoo requests go through
the host proxy. Ignore the .qoder/ IDE session directory.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Rebuilds the client into Live (watchlist with charts, fundamentals, news,
quant analysis) and Strategy (backtest runner / precomputed results) pages,
adds the corresponding /api/stocks/:symbol/chart|fundamentals|related|quant
and /api/strategies endpoints, and updates project tooling.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Introduces strategyTypes shared schema and a server-side strategyService
that lists strategies, runs backtests, and caches results.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Adds a stock data cache layer and indicator helpers (MA/RSI/MACD), expands
the MarketDataProvider interface with candles, fundamentals, related-data,
and quant analysis, and threads tags + source attribution through the
shared types. Updates affected agent tests.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>