feat: strategy_router双市场路由——A股按A股温区激活(不变),港股策略(hk_mr1)按港股温区激活(读markets.hk温区+strategy_regime_perf market=hk),输出strategy_weights.json加markets.hk维度
This commit is contained in:
@@ -40,10 +40,27 @@ FAMILY_MAP = {
|
|||||||
"v4.0d": "trend", "v4.0e": "trend", "v4.0f": "trend", "v4.0g": "trend",
|
"v4.0d": "trend", "v4.0e": "trend", "v4.0f": "trend", "v4.0g": "trend",
|
||||||
"v4.0h": "trend", "v4.1": "trend", "v5.0": "trend",
|
"v4.0h": "trend", "v4.1": "trend", "v5.0": "trend",
|
||||||
"v11.0": "trend", "v11.1": "trend",
|
"v11.0": "trend", "v11.1": "trend",
|
||||||
|
"hk_mr1": "mr", # 港股深度超卖反弹(2026-08-14 港股归因研发,trend_down 主战场)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def load_regime():
|
def load_regime(market='a'):
|
||||||
|
"""读取当前温区。market='a'(默认,A股 smoothed 顶层,行为不变) / 'hk'(港股 markets.hk)"""
|
||||||
|
if market == 'hk':
|
||||||
|
try:
|
||||||
|
p = Path("/home/hmo/MoFin/data/market_regime_smoothed.json")
|
||||||
|
if p.exists():
|
||||||
|
d = json.loads(p.read_text(encoding="utf-8"))
|
||||||
|
mk = (d.get("markets") or {}).get("hk") or {}
|
||||||
|
if mk.get("current_regime"):
|
||||||
|
return {"regime": mk["current_regime"], "date": mk.get("current_date", "")}
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
from market_regime import load_market_regime
|
||||||
|
return load_market_regime(market='hk')
|
||||||
|
except Exception:
|
||||||
|
return {"regime": "unknown"}
|
||||||
try:
|
try:
|
||||||
p = Path("/home/hmo/MoFin/data/market_regime_smoothed.json")
|
p = Path("/home/hmo/MoFin/data/market_regime_smoothed.json")
|
||||||
if p.exists():
|
if p.exists():
|
||||||
@@ -59,22 +76,25 @@ def load_regime():
|
|||||||
return {"regime": "unknown"}
|
return {"regime": "unknown"}
|
||||||
|
|
||||||
|
|
||||||
def load_temp():
|
def load_temp(market='a'):
|
||||||
|
"""读取当前温度。market='a'(默认,A股) / 'hk'(港股)"""
|
||||||
try:
|
try:
|
||||||
from temp_band import get_market_temp
|
from temp_band import get_market_temp
|
||||||
return get_market_temp()
|
return get_market_temp(market=market)
|
||||||
except Exception:
|
except Exception:
|
||||||
return {"band": "unknown", "rsi": None}
|
return {"band": "unknown", "rsi": None}
|
||||||
|
|
||||||
|
|
||||||
def load_regime_perf():
|
def load_regime_perf(market='a'):
|
||||||
|
"""读取策略-温区表现。market='a'(默认,A股,行为不变) / 'hk'(港股策略)"""
|
||||||
conn = None
|
conn = None
|
||||||
try:
|
try:
|
||||||
import sqlite3
|
import sqlite3
|
||||||
conn = sqlite3.connect("/home/hmo/MoFin/data/mofin.db", timeout=30)
|
conn = sqlite3.connect("/home/hmo/MoFin/data/mofin.db", timeout=30)
|
||||||
conn.execute("PRAGMA busy_timeout=30000")
|
conn.execute("PRAGMA busy_timeout=30000")
|
||||||
rows = conn.execute(
|
rows = conn.execute(
|
||||||
"SELECT strategy, regime, trades, win_rate, avg_pnl FROM strategy_regime_perf"
|
"SELECT strategy, regime, trades, win_rate, avg_pnl FROM strategy_regime_perf "
|
||||||
|
"WHERE COALESCE(market,'a')=?", (market,)
|
||||||
).fetchall()
|
).fetchall()
|
||||||
result = {}
|
result = {}
|
||||||
for strat, reg, n, wr, pnl in rows:
|
for strat, reg, n, wr, pnl in rows:
|
||||||
@@ -122,9 +142,10 @@ def route(regime, temp, perf):
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
regime = load_regime()
|
# A股路由(完全不变)
|
||||||
temp = load_temp()
|
regime = load_regime() # A股温区
|
||||||
perf = load_regime_perf()
|
temp = load_temp() # A股温度
|
||||||
|
perf = load_regime_perf('a') # A股策略表现
|
||||||
weights = route(regime, temp, perf)
|
weights = route(regime, temp, perf)
|
||||||
out = {
|
out = {
|
||||||
"state": regime.get("regime", "unknown"),
|
"state": regime.get("regime", "unknown"),
|
||||||
@@ -136,9 +157,28 @@ def main():
|
|||||||
"updated_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
"updated_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
|
||||||
"note": "温区(平滑K=5)选策略类型 + 温度(rsi)乘数;策略全温区发信号,适用温区由实测动态决定",
|
"note": "温区(平滑K=5)选策略类型 + 温度(rsi)乘数;策略全温区发信号,适用温区由实测动态决定",
|
||||||
}
|
}
|
||||||
|
# 港股路由(2026-08-14 新增,不影响A股)——港股策略按港股温区激活
|
||||||
|
try:
|
||||||
|
hk_regime = load_regime('hk')
|
||||||
|
hk_temp = load_temp('hk')
|
||||||
|
hk_perf = load_regime_perf('hk')
|
||||||
|
if hk_perf:
|
||||||
|
hk_weights = route(hk_regime, hk_temp, hk_perf)
|
||||||
|
out["markets"] = {"hk": {
|
||||||
|
"state": hk_regime.get("regime", "unknown"),
|
||||||
|
"state_date": hk_regime.get("date", ""),
|
||||||
|
"temp_band": hk_temp.get("band", "unknown"),
|
||||||
|
"weights": hk_weights,
|
||||||
|
"active": [k for k, v in hk_weights.items() if v["matched"]],
|
||||||
|
}}
|
||||||
|
except Exception as e:
|
||||||
|
print(f"港股路由失败(不影响A股): {e}", flush=True)
|
||||||
OUT.write_text(json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8")
|
OUT.write_text(json.dumps(out, ensure_ascii=False, indent=1), encoding="utf-8")
|
||||||
print(f"strategy_weights.json: 状态={out['state']} 温度={out['temp_band']}(rsi={out['temp_rsi']})")
|
print(f"strategy_weights.json: 状态={out['state']} 温度={out['temp_band']}(rsi={out['temp_rsi']})")
|
||||||
print(f"激活策略: {out['active']}")
|
print(f"激活策略(A股): {out['active']}")
|
||||||
|
if "markets" in out:
|
||||||
|
hk = out["markets"]["hk"]
|
||||||
|
print(f"港股温区={hk['state']} 激活策略(港股): {hk['active']}")
|
||||||
print("权重排名(前15):")
|
print("权重排名(前15):")
|
||||||
for name, w in list(weights.items())[:15]:
|
for name, w in list(weights.items())[:15]:
|
||||||
mark = "✓" if w["matched"] else "观察"
|
mark = "✓" if w["matched"] else "观察"
|
||||||
|
|||||||
Reference in New Issue
Block a user