{"generated_at":"2026-07-02T04:55:09.061538Z","guardrails":{"backtest_execution":false,"broker_execution":false,"engine_execution":false,"financial_advice":false,"orders_enabled":false,"scope":"template_metadata_only"},"private_api_mirror":{"backtest":"POST /api/strategy/specs/{strategy_id}/backtest","create":"POST /api/strategy/specs","load":"GET /api/strategy/specs/{strategy_id}","opportunity_to_spec":"POST /api/opportunity/spec"},"success":true,"template_count":3,"templates":[{"factors":[{"direction":"lower_is_better","metric":"PBR","name":"Low PBR","source":"financial_statement"},{"direction":"threshold","metric":"PER","name":"Reasonable PER","source":"financial_statement"},{"direction":"higher_is_better","metric":"ROE","name":"ROE quality","source":"financial_statement"}],"hypothesis":"Low valuation and quality filters may identify research candidates for further review.","name":"Value quality screen","policy":{"execution_enabled":false,"financial_advice":false,"mode":"research_only"},"portfolio":{"initial_capital":10000000,"max_positions":5,"rebalance":"monthly","weighting":"equal"},"risk":{"max_position_weight":0.25,"max_turnover":null,"stop_loss":null,"take_profit":null},"source_idea":{"raw_ref":"value_screen","type":"template"},"strategy_id":"strat_20260702_c0c3858e8f85","universe":{"example_tickers":["005930.KS","000660.KS","035420.KS"],"market":"KR","selection_rule":"large_cap_watchlist","ticker_count":5}},{"factors":[{"direction":"higher_is_better","metric":"return_20d","name":"Medium-term momentum","source":"price"},{"direction":"higher_is_better","metric":"volume_ratio","name":"Volume confirmation","source":"price"},{"direction":"higher_is_better","metric":"macd_hist","name":"Trend quality","source":"technical"}],"hypothesis":"Price momentum confirmed by volume may identify candidates for research monitoring.","name":"Momentum confirmation screen","policy":{"execution_enabled":false,"financial_advice":false,"mode":"research_only"},"portfolio":{"initial_capital":10000000,"max_positions":5,"rebalance":"monthly","weighting":"equal"},"risk":{"max_position_weight":0.25,"max_turnover":null,"stop_loss":null,"take_profit":null},"source_idea":{"raw_ref":"momentum_screen","type":"template"},"strategy_id":"strat_20260702_fc0631a101d0","universe":{"example_tickers":["005930.KS","000660.KS","035420.KS"],"market":"KR","selection_rule":"large_cap_watchlist","ticker_count":5}},{"factors":[{"direction":"categorical","metric":"top_cause_1","name":"KOSPI cause","source":"kospi_attribution"},{"direction":"threshold","metric":"source_status","name":"Source quality","source":"source_refresh"},{"direction":"threshold","metric":"fwd_20d","name":"Forward label review","source":"market_learning"}],"hypothesis":"KOSPI move causes can be converted into watchlist follow-up checks before any trade decision.","name":"KOSPI attribution follow-up","policy":{"execution_enabled":false,"financial_advice":false,"mode":"research_only"},"portfolio":{"initial_capital":10000000,"max_positions":2,"rebalance":"monthly","weighting":"equal"},"risk":{"max_position_weight":0.5,"max_turnover":null,"stop_loss":null,"take_profit":null},"source_idea":{"raw_ref":"kospi_attribution_followup","type":"template"},"strategy_id":"strat_20260702_e9ce503a93ba","universe":{"example_tickers":["005930.KS","000660.KS"],"market":"KR","selection_rule":"semiconductor_beta_watchlist","ticker_count":2}}]}
