Commit Graph

17 Commits

Author SHA1 Message Date
Yuxuan Yan 94ab679a75 feat: add portfolio phase — discretize alpha weights into tradable positions
Adds a fourth pipeline phase modeling A-share microstructure: lot sizes,
the 2023-08-10 Main Board increment change, STAR 200-share minimum/odd-lot
rules, limit-up/down, suspensions, volume caps, costs, and slippage.

Two layers: research (continuous weights → return/Sharpe/turnover/Fitness,
no IC per repo convention) and execution (state-dependent lot rounding +
two-stage greedy exposure repair + next-open reference simulator).

Wires `portfolio build/simulate/eval` into the CLI and adds the
POSITION/FILL/PNL schema contracts. Covered by tests/test_portfolio.py.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-10 11:23:04 +08:00
Yuxuan Yan 7faeb77c50 chore: manage env with uv (pyproject + lockfile)
Migrate dependency management from requirements.txt to uv. Runtime deps
move to pyproject.toml with pytest in the dev group; uv.lock pins the
resolved set. Docs updated to use `uv sync` / `uv run`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 16:20:08 +08:00
Yuxuan Yan 0c524c6987 feat: add alphaview tool to show alpha weights alongside bar data
Joins the bar dataset with one or more alpha parquet files on (symbol, date)
for a given symbol and date range. Standalone tools/alphaview.py wired as
`cli.py alphaview`, plus README docs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 15:45:06 +08:00
Yuxuan Yan f4b7ef3ae6 feat: add pqcat helper to inspect parquet files
A standalone tools/pqcat.py (head/tail/columns/info) wired as `cli.py pqcat`
and runnable directly via a PATH symlink, plus README docs.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 15:33:55 +08:00
Yuxuan Yan de43444ad4 feat: enrich daily bar schema with valuation/status fields + VWAP
Batch download now pulls baostock's preclose, turn, pctChg, tradestatus,
isST, and peTTM/pbMRQ/psTTM/pcfNcfTTM on top of OHLCV+amount, plus a
derived daily VWAP (amount/volume). VWAP is raw-price scale and not
comparable with adjusted OHLC under qfq/hfq — documented in the schema.

Richer fields live only in the batch path (download_daily_batch ->
download_universe); single-symbol download_daily keeps the legacy
8-column schema that test_downloader.py pins. Also flags intraday/L1-L2
microstructure data as a future phase in the README roadmap.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 14:25:38 +08:00
Yuxuan Yan 419114b87b fix: keep baostock session alive across bulk downloads
baostock drops a session after a few hundred queries; every later query
then returned 用户未登录 and the symbol failed. download_daily_batch now
refreshes the session every relogin_every symbols and re-logs in + retries
once on a detected session loss. akshare fallback now defaults off in the
batch path since it is slow/unreliable on this network and the re-login
keeps baostock as the fast primary.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 14:10:51 +08:00
Yuxuan Yan 1caa63faeb refactor: class-based alpha factory + month-partitioned data pipeline
Replace the old signal/strategy/backtest modules with a decoupled
data → alpha → combo pipeline (parquet between phases, .pq extension).

Alphas:
- BaseAlpha + @register_alpha factory/plugin registry; one file per
  built-in (reversal, reversal_vol, momentum); external alphas via
  --alpha-module. Alphas are z-scored position weights, not predictors.

Data:
- baostock primary / akshare fallback, treated consistently.
- New --universe all (~5000 A-shares via query_all_stock, filtered).
- login-once batch downloader; empty-string OHLCV coerced to NaN.
- Month-partitioned dataset {output_dir}/{universe}/month=YYYY-MM/*.pq
  with chunked durability flushes; --data-path is the dataset dir.

CLI logs at INFO by default (--log-level) so progress is visible.
Docs (README, CLAUDE.md) updated incl. pipeline diagram and roadmap
TODOs for portfolio construction / backtest / paper trading.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 14:07:07 +08:00
Yuxuan Yan 769cf25daa feat: dump alpha values + daily PnL as parquet (pyarrow) 2026-06-07 10:48:20 +08:00
Yuxuan Yan 7033da131b change: rank allocator top_n=5 -> top_pct=0.2 (20% of universe) 2026-06-07 10:06:49 +08:00
Yuxuan Yan edcc4e4b73 results: CSI500 reversal + reversal_vol multi-horizon IC 2026-06-07 10:04:14 +08:00
Yuxuan Yan 241683cc54 feat: CSI500 universe + reversal_vol signal + argparse CLI 2026-06-07 10:01:41 +08:00
Yuxuan Yan aedc019d23 fix: IC chart cumulative mean + forward return horizon matching + multi-horizon eval
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 09:54:31 +08:00
Yuxuan Yan bd0605072f fix: rank-based allocator + momentum signal (reversal->momentum flip) 2026-06-07 09:50:08 +08:00
Yuxuan Yan da01312292 feat: signal abstraction layer + sizer + HS300 universe + PnL/IC reports 2026-06-07 09:44:33 +08:00
Yuxuan Yan 085e51abf1 feat: add 5-day reversal strategy
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 09:26:35 +08:00
Yuxuan Yan fd86190e9a feat: phase 1 — data downloader, backtrader runner, SMA strategy
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 09:21:16 +08:00
Yuxuan Yan 338c912029 init: chinese equity quant research framework 2026-06-07 09:14:50 +08:00