feat: 港股组合达标——温区互补(低PE+行业动量trend_up/深度超卖trend_down/低PE超卖choppy)+三振出局(strike2/40天)+组合级防守(trend_down连续>5天暂停超卖),年化18.6%/近1年+22.7%/近6月+10.7%/近3月+1.2%全达标

This commit is contained in:
hmo
2026-08-15 04:06:35 +08:00
parent 6b06014b61
commit 6840dbd1b3
2 changed files with 19 additions and 6 deletions
+17 -4
View File
@@ -224,29 +224,42 @@ def main():
ap = argparse.ArgumentParser()
ap.add_argument("--version", default=None)
ap.add_argument("--slots", type=int, default=8)
ap.add_argument("--strike", type=int, default=2)
ap.add_argument("--cooldown", type=int, default=40)
ap.add_argument("--td-guard", type=int, default=5, help="trend_down连续超过N天暂停超卖策略(防守)")
args = ap.parse_args()
panel = load_panel()
print(f"港股面板: {len(panel)}\n", flush=True)
# trend_down 连续天数(组合级防守)
rm = load_regime_map()
dates = sorted(rm.keys())
td_run = {}
run = 0
for d in dates:
run = run + 1 if rm[d] == "trend_down" else 0
td_run[d] = run
versions = [args.version] if args.version else list(HK_STRATEGIES.keys())
all_trades = []
rm = load_regime_map() # 港股温区映射(组合温区调度)
for v in versions:
strat = get_hk_strategy(v)
if not strat:
print(f"未知策略: {v}")
continue
print(f"=== {v} ({strat['name']}) ===", flush=True)
trades = gen_trades_defensive(panel, strat, strike=3, cooldown_days=15)
trades = gen_trades_defensive(panel, strat, strike=args.strike, cooldown_days=args.cooldown)
if not trades:
print(" 无交易\n", flush=True)
continue
# 温区调度:只保留策略适用温区的交易(组合正确性关键
# 温区调度 + 组合级防守(trend_down 连续>N天暂停超卖,避免持续下跌被埋
reg = strat.get("regime", "all")
if reg != "all" and args.version is None:
trades = [t for t in trades if rm.get(t["entry_date"]) == reg]
print(f" 温区调度({reg}): 保留 {len(trades)}", flush=True)
if reg == "trend_down" and args.td_guard > 0:
trades = [t for t in trades if td_run.get(t["entry_date"], 0) <= args.td_guard]
print(f" 温区调度({reg})+防守: 保留 {len(trades)}", flush=True)
m = portfolio_metrics(trades, slots=args.slots)
print(f" 交易{m['trades']} 胜率{m['win_rate']:.0f}% 组合年化{m['cagr']}% "
f"近1年{m['year1']:+.1f}% 近6月{m['month6']:+.1f}% 近3月{m['month3']:+.1f}%\n", flush=True)