Files
chinese-equity-quant/cli.py
T
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

44 lines
1.0 KiB
Python

#!/usr/bin/env python3
"""Chinese Equity Quant Pipeline — decoupled phase CLI.
Phases:
data — Download daily bars to parquet
alpha — Compute alpha weights from data
combo — Combine alphas into a single weight
"""
import logging
import click
from pipeline.data.cli import data
from pipeline.alpha.cli import alpha
from pipeline.combo.cli import combo
@click.group()
@click.option(
"--log-level", default="INFO",
type=click.Choice(["DEBUG", "INFO", "WARNING", "ERROR"], case_sensitive=False),
help="Logging verbosity (default INFO shows download/compute progress)",
)
def cli(log_level):
"""Chinese Equity Quant Pipeline.
Each phase is independent: read from parquet, write to parquet.
"""
logging.basicConfig(
level=getattr(logging, log_level.upper()),
format="%(asctime)s %(levelname)s %(name)s: %(message)s",
datefmt="%H:%M:%S",
)
cli.add_command(data)
cli.add_command(alpha)
cli.add_command(combo)
if __name__ == "__main__":
cli()