74 lines
3.1 KiB
Python
74 lines
3.1 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(低估值)
|
||
"sec_ret20_min": 10, # 行业20日动量>10%
|
||
},
|
||
"exit": {"tp_pct": 0.30, "sl_pct": 0.12, "max_hold_days": 40},
|
||
},
|
||
# trend_down:深度超卖反弹(由果及因:RSI<25/bias60<-15,trend_down温区55%胜率)
|
||
"hk_mr1": {
|
||
"version": "hk_mr1",
|
||
"name": "港股深度超卖反弹(trend_down主战场)",
|
||
"regime": "trend_down",
|
||
"summary": "RSI<25+bias60<-15+ret60<-25+止跌回升+放量。港股归因:深度超卖RSI<25胜率55.6%,trend_down温区55%胜率+3.59%",
|
||
"entry": {
|
||
"rsi_max": 25,
|
||
"bias60_max": -15, # 深度超跌(60日乖离,覆盖ret60超跌)
|
||
"rsi_delta_min": 2,
|
||
"vol_ratio_min": 1.5,
|
||
},
|
||
"exit": {"tp_pct": 0.25, "sl_pct": 0.15, "max_hold_days": 30},
|
||
},
|
||
# 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},
|
||
},
|
||
}
|
||
|
||
|
||
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"]
|