Automate local JoinQuant smoke prep
This commit is contained in:
@@ -7,6 +7,7 @@ import click
|
||||
from plugins.joinquant.export_targets import export_targets
|
||||
from plugins.joinquant.ingest import ingest_joinquant_outputs
|
||||
from plugins.joinquant.reconcile import reconcile_joinquant
|
||||
from plugins.joinquant.smoke import prepare_smoke_test
|
||||
from plugins.joinquant.wrapper_strategy import write_wrapper_strategy
|
||||
|
||||
|
||||
@@ -154,3 +155,65 @@ def write_wrapper_cmd(portfolio_name, mode, out_path, allow_short):
|
||||
allow_short=allow_short,
|
||||
)
|
||||
click.echo(f"Saved JoinQuant wrapper strategy: {path}")
|
||||
|
||||
|
||||
@joinquant.command("prepare-smoke")
|
||||
@click.option("--out-dir", required=True, help="Root directory for generated smoke-test artifacts")
|
||||
@click.option(
|
||||
"--universe",
|
||||
default="sh600000,sz000001,sh600519,sz002594,sz300750",
|
||||
show_default=True,
|
||||
help="Universe for the tiny real-data download",
|
||||
)
|
||||
@click.option("--trade-symbol", default="sh600000", show_default=True)
|
||||
@click.option("--start-date", default="2024-01-02", show_default=True)
|
||||
@click.option("--end-date", default="2024-01-12", show_default=True)
|
||||
@click.option("--portfolio-name", default="jq_smoke_one_stock_long", show_default=True)
|
||||
@click.option("--shares", default=1000, show_default=True, type=int)
|
||||
@click.option("--booksize", default=1_000_000.0, show_default=True, type=float)
|
||||
@click.option("--max-signal-dates", default=3, show_default=True, type=int)
|
||||
@click.option("--cost-bps", default=5.0, show_default=True, type=float)
|
||||
@click.option("--slippage-bps", default=5.0, show_default=True, type=float)
|
||||
@click.option("--volume-frac", default=0.02, show_default=True, type=float)
|
||||
@click.option("--force", is_flag=True, help="Overwrite existing frozen target files")
|
||||
def prepare_smoke_cmd(
|
||||
out_dir,
|
||||
universe,
|
||||
trade_symbol,
|
||||
start_date,
|
||||
end_date,
|
||||
portfolio_name,
|
||||
shares,
|
||||
booksize,
|
||||
max_signal_dates,
|
||||
cost_bps,
|
||||
slippage_bps,
|
||||
volume_frac,
|
||||
force,
|
||||
):
|
||||
"""Prepare a one-command local real-data JoinQuant smoke test."""
|
||||
manifest = prepare_smoke_test(
|
||||
out_dir=out_dir,
|
||||
universe=universe,
|
||||
trade_symbol=trade_symbol,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
portfolio_name=portfolio_name,
|
||||
shares=shares,
|
||||
booksize=booksize,
|
||||
max_signal_dates=max_signal_dates,
|
||||
cost_bps=cost_bps,
|
||||
slippage_bps=slippage_bps,
|
||||
volume_frac=volume_frac,
|
||||
force=force,
|
||||
)
|
||||
click.echo(f"Prepared JoinQuant smoke manifest: {manifest['manifest_path']}")
|
||||
click.echo(f"Wrapper: {manifest['wrapper_path']}")
|
||||
click.echo(f"Targets: {manifest['targets_dir']}")
|
||||
click.echo(f"Expected JoinQuant exports: {manifest['joinquant_export_dir']}")
|
||||
summary = manifest["local_summary"]
|
||||
click.echo(
|
||||
f"Local simulator: {summary['n_pnl_rows']} days, "
|
||||
f"PnL={summary['total_pnl']:,.2f}, cost={summary['total_cost']:,.2f}, "
|
||||
f"blocked={summary['blocked_trades']}"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user