"""CLI for data download phase.""" import click from datetime import date from pipeline.data.downloader import download_universe @click.group(name="data") def data(): """Download and manage market data.""" @data.command("download") @click.option( "--universe", default="csi500", help="Which universe: hs300, csi500, all (~5000 A-shares), file path, or comma-separated symbols", ) @click.option("--start-date", default="2017-01-01", help="Start date YYYY-MM-DD") @click.option("--end-date", default=str(date.today()), help="End date YYYY-MM-DD") @click.option("--output-dir", default="data/daily_bars", help="Root for the partitioned dataset") @click.option("--symbols", default=0, type=int, help="Max symbols (0=all)") @click.option("--chunk-size", default=300, type=int, help="Symbols per durability flush") @click.option("--adjust", default="qfq", help="Price adjust: qfq, hfq, or none") def download(universe, start_date, end_date, output_dir, symbols, chunk_size, adjust): """Download daily bars into a month-partitioned parquet dataset. Writes ``{output_dir}/{universe}/month=YYYY-MM/*.pq``. Point ``alpha compute --data-path`` at that dataset directory. """ stats = download_universe( universe=universe, start_date=start_date, end_date=end_date, output_dir=output_dir, max_symbols=symbols, chunk_size=chunk_size, adjust=adjust, ) click.echo( f"\nSummary: {stats['n_symbols']}/{stats['n_requested']} symbols, " f"{stats['n_rows']:,} bars, {stats['date_min']} → {stats['date_max']}" ) click.echo(f"Dataset: {stats['dataset_path']}")