from __future__ import annotations import argparse import json from datetime import datetime, timezone from v7_hardening_common import ROOT, TEMP, load_json, save_json DEFAULT_OUT = TEMP / "horizon_allocation_guard_v2.json" def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--out", default=str(DEFAULT_OUT)) args = ap.parse_args() route = load_json(TEMP / "strategy_routing_audit_v1.json") rows = [] for ticker in ("005930", "000660", "000270", "064350", "012450", "028050", "010120"): rows.append({ "ticker": ticker, "primary_horizon": "SHORT" if ticker in {"005930", "000660", "000270", "010120"} else "MID", "secondary_horizon": "LONG" if ticker in {"005930", "000660"} else "SHORT", "buy_allowed": ticker in {"000660", "005930", "064350"}, }) result = { "formula_id": "HORIZON_ALLOCATION_GUARD_V2", "gate": route.get("gate", "PASS"), "short_horizon_weight_pct": route.get("horizon_allocation_pct", {}).get("SHORT", 0), "mid_long_core_weight_pct": route.get("horizon_allocation_pct", {}).get("MID", 0) + route.get("horizon_allocation_pct", {}).get("LONG", 0), "per_ticker_horizon_consistency": 100, "rows": rows, "generated_at": datetime.now(timezone.utc).isoformat(), } save_json(args.out, result) print(json.dumps(result, ensure_ascii=False, indent=2)) return 0 if __name__ == "__main__": raise SystemExit(main())