From dfb5ead698ede6da5e0026b7330a23843a793e81 Mon Sep 17 00:00:00 2001 From: hmo Date: Sat, 15 Aug 2026 03:12:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BB=84=E5=90=88=E6=8C=89=E6=B8=A9?= =?UTF-8?q?=E5=8C=BA=E8=B0=83=E5=BA=A6=E2=80=94=E2=80=94=E6=AF=8F=E7=AC=94?= =?UTF-8?q?=E4=BA=A4=E6=98=93=E5=8F=AA=E5=9C=A8=E5=85=B6=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E9=80=82=E7=94=A8=E6=B8=A9=E5=8C=BA=E5=85=A5=E5=9C=BA(?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3trend=5Fdown=E7=AD=96=E7=95=A5=E5=9C=A8trend?= =?UTF-8?q?=5Fup=E6=B8=A9=E5=8C=BA=E8=AF=AF=E5=85=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/hk_backtest.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/deploy/profile-scripts/hk_backtest.py b/deploy/profile-scripts/hk_backtest.py index 3224feee..ed661cd4 100644 --- a/deploy/profile-scripts/hk_backtest.py +++ b/deploy/profile-scripts/hk_backtest.py @@ -15,6 +15,7 @@ import sys import argparse import collections +import sqlite3 from datetime import datetime, timedelta import pandas as pd @@ -24,8 +25,22 @@ sys.path.insert(0, "/home/hmo/MoFin") # strategy_lab.portfolio_sim(纯函数 from hk_strategies import HK_STRATEGIES, get_hk_strategy PANEL = "/tmp/panel_12d_hk.pkl" +DB = "/home/hmo/MoFin/data/mofin.db" COST = 0.0015 # 港股往返费率近似(佣金+印花税) +# 港股温区映射(组合按温区调度用) +_REGIME_CACHE = None + + +def load_regime_map(): + global _REGIME_CACHE + if _REGIME_CACHE is None: + conn = sqlite3.connect(DB) + _REGIME_CACHE = dict(conn.execute( + "SELECT date, regime FROM market_regime WHERE market='hk'").fetchall()) + conn.close() + return _REGIME_CACHE + def load_panel(): p = pd.read_pickle(PANEL) @@ -130,6 +145,7 @@ def main(): 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: @@ -140,6 +156,11 @@ def main(): if not trades: print(" 无交易\n", flush=True) continue + # 温区调度:只保留策略适用温区的交易(组合正确性关键) + 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) 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)