95 lines
4.6 KiB
Python
95 lines
4.6 KiB
Python
#!/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"]
|