From 29d0eb96ccdd9bec37db0f8cf1ef39770f11fd7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=A5=E5=BE=AE?= Date: Thu, 2 Jul 2026 01:05:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AD=B9=E7=A0=81=E5=9B=A0=E5=AD=90?= =?UTF-8?q?=E6=83=85=E6=99=AF=E6=9D=83=E9=87=8D+=E5=85=B1=E6=8C=AF?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - detect_scenario()判定市况→动态调整筹码因子权重 震荡市(0.9) > 轮动市(0.6) > 上涨(0.4) > 急跌(0.2) - 共振检测: 筹码支撑 vs 枢轴弱支撑(同为最近支撑位) - 权重低时筹码即使一致也标记不可靠 - 止损/止盈仍以枢轴为主,筹码提供中线参考 --- .../strategy_lifecycle.cpython-312.pyc | Bin 88523 -> 89378 bytes strategy_lifecycle.py | 54 ++++++++++++++---- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/__pycache__/strategy_lifecycle.cpython-312.pyc b/__pycache__/strategy_lifecycle.cpython-312.pyc index 0555d229600ed6a54c949f54d99678c068abbce5..4bd6e82315a7f9fdb17746508e1cf6738436fef0 100644 GIT binary patch delta 17108 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 AIRF3v diff --git a/strategy_lifecycle.py b/strategy_lifecycle.py index 78d3eaf..29db55d 100644 --- a/strategy_lifecycle.py +++ b/strategy_lifecycle.py @@ -18,6 +18,7 @@ from datetime import datetime import technical_analysis as ta import multi_timeframe as mtf from mo_data import read_portfolio, read_decisions, read_watchlist +from strategy_tree import detect_scenario def is_hk_stock(code): @@ -591,22 +592,51 @@ def reassess_strategy(code, name, price, cost, shares, current_action, except Exception as e: print(f" 多周期分析失败: {e}", file=sys.stderr) - # ----- 筹码分布支撑/阻力(中长线参考) ----- + # ----- 筹码分布支撑/阻力(中长线参考,加情景权重) ----- chip_sr = None + chip_weight = 0.5 # 默认中等权重 + regime = detect_scenario() + regime_id = regime.get("id", "weak_consolidation") + + # 情景决定筹码因子权重 + if regime_id == "weak_consolidation": + chip_weight = 0.9 # 震荡市筹码最准 + elif regime_id == "bullish_recovery": + chip_weight = 0.4 # 上涨趋势筹码阻力可能被突破 + elif regime_id == "sharp_decline": + chip_weight = 0.2 # 急跌中筹码支撑可能失效 + elif regime_id == "sector_rotation": + chip_weight = 0.6 # 轮动市中筹码有一定参考 + try: chip_sr = calc_chip_sr(code, price) if chip_sr: - print(f" 筹码: 强撑={chip_sr['chip_ss']} 强压={chip_sr['chip_sr']}") - # 与枢轴点对比,判断共振/分歧 - if ss and ws and pivot: - chip_ss_pct = (price - chip_sr['chip_ss']) / price * 100 if chip_sr['chip_ss'] > 0 else 0 - chip_sr_pct = (chip_sr['chip_sr'] - price) / price * 100 if chip_sr['chip_sr'] > 0 else 0 - pivot_ss_pct = (price - ss) / price * 100 if ss > 0 else 0 - pivot_sr_pct = (sr_resist - price) / price * 100 if sr_resist > 0 else 0 - if abs(chip_ss_pct - pivot_ss_pct) < 3: - print(f" ⚡ 支撑共振: 筹码+枢轴均指向{chip_sr['chip_ss']:.0f}附近") - if abs(chip_sr_pct - pivot_sr_pct) < 3: - print(f" ⚡ 阻力共振: 筹码+枢轴均指向{chip_sr['chip_sr']:.0f}附近") + print(f" 筹码: 撑={chip_sr['chip_ss']:.0f} 阻={chip_sr['chip_sr']:.0f} | 情景={regime_id} 权重={chip_weight:.1f}") + # 与枢轴点对比 + if ss and ws and pivot and chip_sr['chip_ss'] > 0 and chip_sr['chip_sr'] > 0: + chip_ss_pct = (price - chip_sr['chip_ss']) / price * 100 + chip_sr_pct = (chip_sr['chip_sr'] - price) / price * 100 + + # 共振检测:筹码支撑 vs 枢轴弱支撑(都是最近支撑位) + if ws and ws > 0: + resonance_ss = abs(chip_ss_pct - ((price - ws) / price * 100)) < 3 + else: + resonance_ss = False + # 共振检测:筹码阻力 vs 枢轴弱阻力(都是最近阻力位) + if wr and wr > 0: + resonance_sr = abs(chip_sr_pct - ((wr - price) / price * 100)) < 3 + else: + resonance_sr = False + + if resonance_ss and chip_weight >= 0.5: + print(f" ⚡ 支撑共振({chip_weight:.0f}): 筹码+枢轴均指向{chip_sr['chip_ss']:.0f}") + elif chip_weight < 0.5: + print(f" 📎 支撑一致但权重低({chip_weight:.1f}): {regime_id}下筹码支撑不可靠") + + if resonance_sr and chip_weight >= 0.5: + print(f" ⚡ 阻力共振({chip_weight:.0f}): 筹码+枢轴均指向{chip_sr['chip_sr']:.0f}") + elif chip_weight < 0.5: + print(f" 📎 阻力一致但权重低({chip_weight:.1f}): {regime_id}下筹码阻力不可靠") except Exception: pass