#!/usr/bin/env python3 # -*- coding: utf-8 -*- """hk_strategies.py — 港股策略定义(独立于A股strategy_lab,零干扰) 港股策略库:各温区互补策略定义(单一来源)。 面板数据:/tmp/panel_12d_hk.pkl(build_panel_hk_v2 构建,含价量/大盘/行业动量/估值分位/资金流) 策略结构: version: 策略名 regime: 适用温区(trend_up/trend_down/choppy/all) entry: 入场条件(面板因子,数据定阈值——step29 由果及因扫描) exit: 出场(止盈/止损/最大持有,港股波动放宽) """ # ── 港股策略库(按温区互补)────────────────────────────── HK_STRATEGIES = { # trend_up:低PE + 行业动量高(由果及因:大涨率10.28%,2.35x基线) "hk_pe_mom": { "version": "hk_pe_mom", "name": "港股低PE+行业动量(trend_up主战场)", "regime": "trend_up", "summary": "低PE(<0.2分位)+行业20日动量>10%。由果及因:大涨率10.28%(基线4.37%)。低PE+1.24pp(step27港股扫描)、行业动量高+1.47pp", "entry": { "pe_q_max": 0.2, # PE分位<0.2(低估值,+3.24pp) "mcap_q_max": 0.2, # 市值分位<0.2(小市值,+2.84pp) "sec_ret20_min": 10, # 行业20日动量>10%(+1.47pp) }, "exit": {"tp_pct": 0.40, "sl_pct": 0.12, "max_hold_days": 40}, }, # trend_down:深度超卖反弹(持续下跌市靠组合级防守避免被埋) "hk_mr1": { "version": "hk_mr1", "name": "港股深度超卖反弹(trend_down主战场)", "regime": "trend_down", "summary": "RSI<20+bias60<-20+止跌回升+放量。深度超卖只在极端恐慌出手:胜率72%,tp45%让反弹吃满,年化10.5%。持续下跌市(2022/2026H1)避被埋", "entry": { "rsi_max": 20, "bias60_max": -20, "rsi_delta_min": 2, "vol_ratio_min": 1.5, }, "exit": {"tp_pct": 0.45, "sl_pct": 0.15, "max_hold_days": 50}, }, # choppy:低PE+超跌反弹(震荡市价值修复) "hk_pe_oversold": { "version": "hk_pe_oversold", "name": "港股低PE+超卖反弹(choppy主战场)", "regime": "choppy", "summary": "低PE(<0.2分位)+RSI超卖(<45)。由果及因:低PE+超卖组合大涨率6.93%(基线4.37%)", "entry": { "pe_q_max": 0.2, "rsi_max": 45, "bias60_max": 0, }, "exit": {"tp_pct": 0.25, "sl_pct": 0.12, "max_hold_days": 40}, }, # ── 2026-08-16 下跌市:大盘深跌确认超卖反弹(hk_mr2,替代近1y失效的 hk_mr1)── # hk_mr1 病根:只买极端超卖(RSI<20)但无大盘深跌确认,2026年6月入场时 mkt_ret20 仅-3.7~-6.6% # (下跌初期接飞刀)→ 近1y -5.4%。 # hk_mr2 加 mkt_ret20<-8(深跌中继) + 放宽超卖(rsi<30/bias60<-12):2024+ td 胜率74%/近1y+3.4% "hk_mr2": { "version": "hk_mr2", "name": "港股深跌确认超卖反弹(trend_down主战场)", "regime": "trend_down", "summary": "大盘深跌(mkt_ret20<-8)+个股超卖(RSI<30,bias60<-12)+放量,极端急跌规避(adx<90/rsi>25)。2024+td胜率74.8%年化11.6%(超下跌市基准8.7%),近期(+5.4%)优于hk_mr1(-5.4%)", "entry": { "mkt_ret20_max": -8, # 大盘近20日跌>8%(深跌中继确认,避免下跌初期接飞刀) "rsi_max": 30, # 个股RSI<30(超卖,比hk_mr1的<20放宽) "bias60_max": -12, # 60日偏离<-12%(超跌) "rsi_delta_min": 2, # 止跌回升(RSI 5日回升≥2) "vol_ratio_min": 1.2, # 放量 "mkt_adx_max": 90, # 极端急跌规避:ADX>90=单边暴跌(2026-06达96-100),超卖反弹失效 "mkt_rsi_min": 25, # 极端急跌规避:大盘RSI<20=恐慌极点(2026-06达15-19),恐慌后继续跌 }, "exit": {"tp_pct": 0.35, "sl_pct": 0.12, "max_hold_days": 40}, }, } def get_hk_strategy(version): """按版本取港股策略定义""" return HK_STRATEGIES.get(version) def list_hk_strategies(): """港股策略列表(按温区)""" return [{"version": v, "regime": s["regime"], "name": s["name"]} for v, s in HK_STRATEGIES.items()] def strategies_for_regime(regime): """返回适用某温区的策略版本列表(regime 参数用于组合调度)""" return [v for v, s in HK_STRATEGIES.items() if s["regime"] == regime or s["regime"] == "all"]