Metadata-Version: 2.4
Name: tp-quant
Version: 1.2.6
Summary: Trading Pattern Scanner Identifies complex patterns like head and shoulder, wedge and many more.
Author: Preetam Sharma
License: CC BY-NC-SA 4.0
Requires-Python: ==3.12.*
Description-Content-Type: text/markdown
License-File: LICENSE.md
Requires-Dist: numpy>=2.0.0
Requires-Dist: pandas<4,>=3.0.0
Requires-Dist: kdata-quant>=1.1.2
Requires-Dist: mootdx2>=1.0.8
Requires-Dist: TA-Lib>=0.4.32
Requires-Dist: pyyaml>=6.0
Requires-Dist: pyarrow>=25.0.1
Provides-Extra: backtest
Requires-Dist: backtrader>=1.9.78.123; extra == "backtest"
Dynamic: license-file

# Python API 接口参考文档 (API Reference)

本文档面向需要在下游系统（如 LLM AI Agent、量化自动化交易流水线、复盘看板）中直接集成 `tp-quant` 的开发者。

安装包：`pip install tp-quant`

> [!TIP]
> 🌟 **全频段自适应特性 (Timeframe-Agnostic Adaptation)**  
> 核心引擎（包括各大策略与形态机）内置了自动频率推断。你可以自由传入**日线 (Daily)** 或 **周线 (Weekly)** DataFrame：
> - **内部参数自适应**：算法会自动探测 `df` 的物理间隔（如 1天 vs 7天），并将所有硬编码的 K 线阈值（如横盘 15 天）智能折算（如变更为横盘 3 周）。
> - **多周期共振升维**：涉及“跨周期共振”的策略，输入日线时会自动参考周线，而**输入周线时则会自动升维参考月线 (Monthly)**！无需人工指定参数，实现无缝的小图进场、大图顺势。

---

## 🎯 核心架构速查与对应关系 (Architecture & Quick Navigation)

`tp-quant` 的核心能力由 **全雷达体系 (Opportunity Radar)** 与 **交易执行双核体系 (Dual-Core Strategy Engines)** 组成，各自解决不同场景的需求：

| 体系 / 核心概念 | 解决什么问题 | 外部调用 Python API | 对应文档章节 |
| :--- | :--- | :--- | :--- |
| **🌐 全雷达体系**<br>(Opportunity Radar) | **全市场/全池选品与异动扫描**<br>将标的分类为 5 态（机会/异动/风险/降温/观察），计算动态防守线与双距离 | `analyze_opportunity_radar()`<br>`evaluate_opportunity_radar_item()` | [第 1 章 (1.2, 1.3)](#1-全域机会雷达综合引擎-combined-opportunity-radar) |
| **🧭 核心 1：右侧趋势突破**<br>(Engine 1 / Trend Breakout) | **交易执行：右侧主升浪做多**<br>抓放量结构突破 + EMA20 回踩确认 + EMA53 移动跟踪 | `get_strategy_signal(StrategyEngine.ENGINE1_TREND, df)` | [第 1 章 (1.1, 1.2)](#1-全域机会雷达综合引擎-combined-opportunity-radar) |
| **⚡ 核心 2：左侧均值回归**<br>(Engine 2 / Mean Reversion) | **交易执行：左侧大波段抄底**<br>抓周线布林超跌 + K线底部反转 + 3阶段跟踪止盈 (Stage 1/2/3) + 熊市冷却 | `get_mean_reversion_signal()`<br>或 `get_strategy_signal(StrategyEngine.ENGINE2_REVERSAL, df)` | [第 6 章 (6.1)](#6-均值回归与板块轮动引擎-mean_reversion--sector_rotation) |
| **🌟 双核综合引擎**<br>(Combined Engine) | **双核同时运行 / 实盘仿真回测**<br>左侧 + 右侧信号一起抓，用于全历史实战回测与多策略综合调度 | `get_strategy_signal(StrategyEngine.COMBINED, df)`<br>`run_strategy_engine_simulation()` | [第 1 章 (1.1, 1.4)](#1-全域机会雷达综合引擎-combined-opportunity-radar) |
| **📊 截面板块轮动**<br>(Sector Rotation) | **多标的资产配置与强弱轮动**<br>以沪深300为基准，计算 RS 相对强弱与 4 象限分布 (领涨/复苏/衰退/滞后) | `SectorRotationEngine`<br>`run_sector_rotation_backtest()` | [第 6 章 (6.4~6.7)](#6-均值回归与板块轮动引擎-mean_reversion--sector_rotation) |
| **🗽 美股专属量化双核**<br>(US Quantitative System) | **美股自适应超级趋势与截面双动量**<br>宏观 SPY SMA200/10月动量体制判别、KAMA 吊灯超级趋势、截面行业轮动、0-10 分 5 大态机会雷达（支持统一门面 `timeframe="D"/"W"`） | `run_us_strategy()`<br>`compute_us_rotation()`<br>`analyze_us_radar()` | [第 7 章 (7.1~7.5)](#7-美股专属量化系统与机会雷达-us-etf-quantitative-system--radar) |
| **🌏 跨境溢价共振**<br>(Overseas Premium) | **跨境 QDII ETF 溢价风控与套利**<br>盘后时差对齐 (国内T日锚定美股T-1日)，60日比价偏离度 Z-Score 门禁 + 美股周线强趋势共振 + 全池机会雷达 | `evaluate_overseas_opportunity_item()`<br>`analyze_overseas_radar()`<br>`run_overseas_premium_strategy()` | [第 8 章 (8.1~8.5)](#8-跨境-qdii-etf-溢价套利与趋势共振引擎-overseas_premium) |
| **🛡️ 交易撮合与执行生命周期**<br>(Execution Matcher) | **A 股实盘仿真与未成交追踪**<br>开盘一字涨跌停拦截、停牌检测、滑点佣金仿真、未成交信号生命周期归档与成交率统计 | `ExecutionMatcher`<br>`compute_execution_summary()`<br>`get_a_share_price_limit_ratio()` | [第 9 章 (9.1~9.3)](#9-实盘撮合与信号全生命周期追踪-execution) |

---

## 目录索引 (Table of Contents)

1. [全域机会雷达综合引擎 (Combined Opportunity Radar)](#1-全域机会雷达综合引擎-combined-opportunity-radar)
   - 1.1 [统一策略枚举与事件契约 (`StrategyEngine`)](#11-统一策略枚举与事件契约)
   - 1.2 [单标的雷达信号调用 (`get_strategy_signal` / `evaluate_opportunity_radar_item`)](#12-单标的雷达信号调用)
   - 1.3 [全市场多周期雷达批量扫描 (`analyze_opportunity_radar`)](#13-全市场多周期雷达批量扫描)
   - 1.4 [全景回测与实战验证 CLI](#14-全景回测与实战验证-cli)
2. [网格交易与组合资产顾问 (`grid` & `grid_advisor`)](#2-网格交易与组合资产顾问)
   - 2.1 [单标的网格计划 (`build_grid_plan`)](#21-单标的网格计划-build_grid_plan)
   - 2.2 [ETF 网格严选评估 (`evaluate_strict_grid_candidate`)](#22-etf-网格严选评估-evaluate_strict_grid_candidate)
   - 2.3 [网格事件驱动轻量回测 (`simulate_grid_strategy`)](#23-网格事件驱动轻量回测-simulate_grid_strategy)
   - 2.4 [多标的组合网格与 8 步调仓换仓 (`build_etf_grid_advice`)](#24-多标的组合网格与-8-步调仓换仓-build_etf_grid_advice)
3. [技术形态扫描与预筛选管道 (`pre_screen_and_scan`)](#3-技术形态扫描与预筛选管道-pre_screen_and_scan)
   - 3.1 [预筛选与扫描主接口](#31-预筛选与扫描主接口)
   - 3.2 [Context Package 上下文数据包全字段解析](#32-context-package-上下文数据包全字段解析)
   - 3.3 [威科夫量价供需分析 (`detect_wyckoff_context`)](#33-威科夫量价供需分析-detect_wyckoff_context)
4. [市场状态机与多周期趋势评估](#4-市场状态机与多周期趋势评估)
   - 4.1 [综合唯一主状态机 (`detect_side_state`)](#41-综合唯一主状态机-detect_side_state)
   - 4.2 [做多右侧状态机 (`detect_right_side_state`)](#42-做多右侧状态机-detect_right_side_state)
   - 4.3 [底部结构跟踪状态机 (`detect_bottom_tracking_state`)](#43-底部结构跟踪状态机-detect_bottom_tracking_state)
   - 4.4 [独立周线中期趋势质量评分 (`evaluate_weekly_trend`)](#44-独立周线中期趋势质量评分-evaluate_weekly_trend)
5. [市场环境与辅助分析工具](#5-市场环境与辅助分析工具)
   - 5.1 [市场情绪温度计 (`sentiment_thermometer`)](#51-市场情绪温度计-sentiment_thermometer)
   - 5.2 [动态支撑阻力计算 (`calculate_support_resistance`)](#52-动态支撑阻力计算-calculate_support_resistance)
   - 5.3 [组合风险平权与相关性去重](#53-组合风险平权与相关性去重)
6. [均值回归与板块轮动引擎 (`mean_reversion` & `sector_rotation`)](#6-均值回归与板块轮动引擎-mean_reversion--sector_rotation)
   - 6.1 [A 股周线均值回归与三阶段跟踪 (`get_mean_reversion_signal` / `MeanReversionSignal`)](#61-a-股周线均值回归与三阶段跟踪-get_mean_reversion_signal)
   - 6.2 [TA-Lib 底部反转形态扫描与权重 (`scan_talib_patterns`)](#62-ta-lib-底部反转形态扫描与权重-scan_talib_patterns)
   - 6.3 [均值回归事件驱动回测 (`run_mean_reversion_simulation`)](#63-均值回归事件驱动回测-run_mean_reversion_simulation)
   - 6.4 [全池截面轮动评估与纯趋势研判 (`evaluate_universe`)](#64-全池截面轮动评估与纯趋势研判-evaluate_universe)
   - 6.5 [四象限坐标体系与动能研判逻辑](#65-四象限坐标体系与动能研判逻辑)
   - 6.6 [截面状态指标 (`SectorMetric` / `RotationQuadrant`)](#66-截面状态指标-sectormetric--rotationquadrant)
   - 6.7 [截面组合历史回测 (`run_sector_rotation_backtest`)](#67-截面组合历史回测-run_sector_rotation_backtest)
7. [美股专属量化系统与机会雷达 (`us_macro` / `us_strategy` / `us_opportunity_radar`)](#7-美股专属量化系统与机会雷达-us-etf-quantitative-system--radar)
   - 7.1 [宏观绝对动量与体制判别 (`us_macro`)](#71-宏观绝对动量与体制判别-us_macro)
   - 7.2 [自适应超级趋势与截面双动量策略 (`us_strategy` / `us_weekly_strategy`)](#72-自适应超级趋势与截面双动量策略-us_strategy)
   - 7.3 [美股专属 0-10 分机会雷达与 5 大状态机 (`us_opportunity_radar` / `us_weekly_opportunity_radar`)](#73-美股专属-0-10-分机会雷达与-5-大状态机-us_opportunity_radar)
   - 7.4 [多周期统一门面入口 (`run_us_strategy` / `compute_us_rotation` / `analyze_us_radar`)](#74-多周期统一门面入口)
   - 7.5 [美股全景回测与雷达扫描 CLI](#75-美股全景回测与雷达扫描-cli)
8. [跨境 QDII ETF 溢价套利与趋势共振引擎 (`overseas_premium`)](#8-跨境-qdii-etf-溢价套利与趋势共振引擎-overseas_premium)
   - 8.1 [底层资产映射与盘后时差对齐 (`OVERSEAS_UNDERLYING_MAP` / `align_cn_us_series`)](#81-底层资产映射与盘后时差对齐)
   - 8.2 [60日相对比价偏离度计算 (`calculate_premium_zscore`)](#82-60日相对比价偏离度计算)
   - 8.3 [单标的实时机会与信号评估 (`evaluate_overseas_opportunity_item` / `get_overseas_premium_signal`)](#83-单标的实时机会与信号评估)
   - 8.4 [跨境全池机会雷达批量扫描 (`analyze_overseas_radar` / `OverseasRadarSummary`)](#84-跨境全池机会雷达批量扫描)
   - 8.5 [双核共振策略回测与绩效寻优 (`run_overseas_premium_strategy`)](#85-双核共振策略回测与绩效寻优)
9. [实盘撮合与信号全生命周期追踪 (`execution`)](#9-实盘撮合与信号全生命周期追踪-execution)
   - 9.1 [交易所物理约束与涨跌停比例 (`get_a_share_price_limit_ratio` / `ExecutionStatus`)](#91-交易所物理约束与涨跌停比例)
   - 9.2 [次日开盘撮合可行性仿真 (`ExecutionMatcher`)](#92-次日开盘撮合可行性仿真-executionmatcher)
   - 9.3 [未成交信号追踪与生命周期汇总 (`UnfilledSignal` / `compute_execution_summary`)](#93-未成交信号追踪与生命周期汇总)

---

## 1. 全域机会雷达综合引擎 (Combined Opportunity Radar)

**全域机会雷达综合引擎 (`Combined Radar`) 采用“交易执行双核 (Dual Cores) + 选品形态雷达 (Pattern Radar) + 截面板块轮动 (Sector Rotation)”分层架构**。

它将复杂的形态发现、宏观截面与严谨的量化执行解耦：
1. **📊 经典形态雷达层 (Pattern Radar)**：负责 10+ 经典几何形态（头肩底、双底、杯柄、三角形突破）识别、0-10 综合技术评分与自媒体图文可视化；
2. **⚡ 左侧均值回归核 (Left-Side Core - Engine 2 / Mean Reversion)**：周线布林超跌 + TA-Lib K 线底部形态 + 三阶段跟踪止盈 (Stage 1/2/3) + 熊市止损冷却与假摔快速重入保护；
3. **🧭 右侧趋势突破核 (Right-Side Core - Engine 1 / Trend Breakout)**：右侧放量突破结构 + EMA20 回踩确认 + EMA53 防守跟踪主升浪；
4. **🌐 截面板块轮动与全天候自适应**：四象限相对强度软打分赋能雷达；同时独立提供 Kaufman KAMA 自适应趋势引擎 (Engine 3)。

```
                  ┌────────────────────────────────────────────────────────────┐
                  │              StrategySignalEvent 统一信号契约              │
                  │  (buy_signal, sell_signal, stop_loss, take_profit, reason) │
                  └─────────────────────────────┬──────────────────────────────┘
                                                │
                          【Combined Opportunity Radar 综合雷达】
                       StrategyEngine.COMBINED / analyze_opportunity_radar
                                                │
         ┌──────────────────────────────────────┴──────────────────────────────────────┐
         ▼                                                                             ▼
【⚡ 左侧均值回归核 (Engine 2 / MR)】                          【🧭 右侧趋势突破核 (Engine 1 / Trend)】
  周线布林超跌 + TA-Lib底部形态 + 三阶段止盈                      右侧放量突破 + EMA20回踩 + EMA53动态跟踪
         ▲                                                                             ▲
         └──────────────────────────────┬──────────────────────────────────────────────┘
                                        │ 选品形态赋能 & 截面轮动加权
              【📊 经典形态雷达 (Pattern Radar) & 🌐 板块轮动四象限 (Sector Rotation)】
                       头肩底 / 双底 / 杯柄 / 三角形 / 0-10综合评分 / 领涨-复苏-衰退-滞后
```

---

### 1.1 统一策略枚举与事件契约

```python
from tradingpatterns import (
    StrategyEngine,                 # 核心策略枚举类 (COMBINED, MEAN_REVERSION, ENGINE1_TREND, ENGINE2_REVERSAL, ENGINE3_KAUFMAN)
    EngineType,                     # StrategyEngine 别名
    get_strategy_signal,            # 顶层统一单策略信号分发器 (E1/E2/E3/MR)
    evaluate_opportunity_radar_item,# 单标的全维度雷达评估
    analyze_opportunity_radar,      # 全池多周期雷达批量扫描 (内嵌板块轮动)
    StrategySignalEvent,            # 统一信号事件基类
    deduce_exit_metadata,           # 标准化平仓元数据与标签推断
    run_strategy_engine_simulation, # 单标的纯量化撮合回测仿真
)
```

#### 策略引擎枚举 (`StrategyEngine`)：
- **`ENGINE1_TREND` / `ENGINE1`**: 右侧趋势突破引擎 (放量突破 + EMA20 回踩 + EMA53 移动跟踪)。
- **`ENGINE2_REVERSAL` / `MEAN_REVERSION`**: A 股周线均值回归与三阶段跟踪引擎 (周线布林超跌 + TA-Lib K 线底部形态 + 3-Stage 跟踪止盈 + 熊市止损冷却与假摔快速重入)。
- **`ENGINE3_KAUFMAN` / `ENGINE3`**: Kaufman KAMA 全天候自适应趋势引擎。
- **`COMBINED`**: 全域机会雷达双核综合引擎 (Engine 1 + Engine 2，用于全池雷达与组合回测)。

#### 统一返回对象 (`StrategySignalEvent` 标准契约)：
支持属性访问（`sig.buy_signal`）与字典键访问（`sig["buy_signal"]`）：

| 字段/属性 | 类型 | 说明 |
| :--- | :--- | :--- |
| **`buy_signal`** | `bool` | 是否触发次日开盘买入信号。 |
| **`sell_signal`** | `bool` | 是否触发次日开盘卖出/离场信号。 |
| **`stop_loss`** | `float` | 建议的量化止损防守线（破位即走，内置 $\le 7\%$ 硬风险兜底）。 |
| **`take_profit`** | `float` | 建议的目标止盈价/关键阻力位（到达考虑减仓止盈）。 |
| **`signal_tier`** | `str \| None` | 信号确定性分级 (`"L3"` 强信号 \| `"L2"` 中等/接力 \| `"L1"` 预警关注 \| `None`)。 |
| **`reason`** | `str` | 信号触发的详细原因说明。 |
| **`state`** | `str` | 策略内部状态机状态 / 体制（如 `"RIGHT_CONFIRMED"`, `"TREND_BULL"`, `"TRIGGERED"`, `"COOLDOWN"`）。 |
| **`symbol`** | `str` | 标的代码。 |
| **`date`** | `str` | 信号产生的 K 线日期 (`YYYY-MM-DD`)。 |
| **`details`** | `dict` | 包含底层指标、KAMA 生命线、周线宏观状态与形态元数据的完整字典。 |

---

### 1.2 单标的雷达信号调用

#### 方式一：调用单策略引擎信号接口 (`get_strategy_signal`)
`get_strategy_signal` 用于提取具体单一策略引擎在第 T 日收盘后的执行决策：

```python
import tradingpatterns as tp
import kdata

# 抓取日线 OHLCV 数据
df = kdata.get_ohlc("513120", "2024-01-01", "2026-08-19")

# 1. 获取左侧均值回归信号 (Engine 2 / Mean Reversion)
sig_mr = tp.get_strategy_signal(
    tp.StrategyEngine.MEAN_REVERSION, # 或 tp.StrategyEngine.ENGINE2_REVERSAL
    df, 
    symbol="513120"
)

# 2. 获取右侧趋势突破信号 (Engine 1)
sig_trend = tp.get_strategy_signal(
    tp.StrategyEngine.ENGINE1_TREND,
    df,
    symbol="513120"
)

# 3. 获取 Kaufman 自适应趋势信号 (Engine 3)
sig_kaufman = tp.get_strategy_signal(
    tp.StrategyEngine.ENGINE3_KAUFMAN,
    df,
    symbol="513120",
    use_multitimeframe=True
)

if sig_mr.buy_signal:
    print(f"【🔥均值回归买入】({sig_mr.signal_tier}) | 建议止损: {sig_mr.stop_loss:.3f} | 原因: {sig_mr.reason}")
```

#### 方式二：调用单标的全维度雷达评估 (`evaluate_opportunity_radar_item`)
一站式计算形态扫描、状态机、多引擎信号、截面板块轮动属性与防追高过滤：

```python
from tradingpatterns import evaluate_opportunity_radar_item

item_res = evaluate_opportunity_radar_item(
    df=df,
    symbol="515880",
    name="通信ETF",
    frequency="weekly",      # "weekly" (周频) 或 "daily" (日频)
    min_amount_ea=None,      # 异动成交额门槛 (亿)，None 时自动取默认
    min_vol_ratio=1.5,       # 放量倍数门槛 (默认 1.5 倍)
    min_pct_change=1.5,      # 涨跌幅门槛 (默认 1.5%)
    weekly_mode="early",     # 周线模式
)

print(f"机会来源: {item_res['primary_opp_source']}")
print(f"状态变迁: {item_res['prev_state_cn']} ━━➔ {item_res['curr_state_cn']}")
print(f"建议防守线: {item_res['stop_loss']}")
print(f"板块轮动象限: {item_res['quadrant_cn']} (分位数: {item_res['rs_percentile']}%, 斜率: {item_res['rs_slope']})")
```

**核心输出字段**：
- `has_buy_signal` (bool): 是否触发任一核心买点。
- `has_sell_signal` (bool): 是否触发离场/移动止损/止盈信号。
- `opp_sources` (List[str]): 机会来源组合（包含 `"ENGINE2"` 左侧均值回归, `"ENGINE1"` 右侧趋势突破, `"ENGINE3"` Kaufman 趋势）。
- `primary_opp_source` (str): 主导机会来源中文说明。
- `signal_tier`: 最高信号级别 (`"L3"` 强信号 \| `"L2"` 中等/接力 \| `"L1"` 预警关注)。
- `is_opportunity` (bool): 是否归入【潜在机会】。
- `is_vol_abnormal` (bool): 是否归入【量化异动】。
- `is_risk` (bool): 是否归入【风险提示】。
- `quadrant` / `quadrant_cn` (str): 所属板块轮动四象限（`LEADING` 领涨区 / `RECOVERING` 复苏区 / `WEAKENING` 衰退区 / `LAGGING` 滞后区）。
- `rs_percentile` (float): 相对基准的 60 日历史分位数 (0~100%)。
- `rs_slope` (float): 相对基准的 10 日线性回归斜率。

---

### 1.3 全市场多周期雷达批量扫描

雷达模块负责全市场标的实时扫描、内嵌板块轮动截面计算、多引擎信号聚合、时效性降级 (Staleness Check) 以及多栏目去重归类，可直接作为**自媒体每日内容生产工具**与**选品大漏斗**：

```python
from tradingpatterns import analyze_opportunity_radar

# 批量扫描标的池 (内置自动计算截面相对强弱与四象限轮动)
vol_list, opp_list, risk_list = analyze_opportunity_radar(
    etf_pool={"515880": ("通信ETF", df1), "512880": ("证券ETF", df2), "513120": ("港股创新药", df3)},
    frequency="weekly",   # "weekly" 或 "daily"
    min_amount_ea=None,
    min_vol_ratio=1.5,
    min_pct_change=1.5,
)

# 自动格式化输出自媒体复盘日报
print(f"📊 【量化机会雷达 | 今日全市场扫描】\n")

print("🔥 【核心策略引擎触发】")
for item in opp_list:
    if item["opp_sources"]:
        print(f"• [{item['primary_opp_source']}] {item['symbol']} {item['name']}: 建议防守位 {item['stop_loss']:.3f} | 板块象限: {item['quadrant_cn']}")

print("\n👀 【蓄势预热池】")
for item in opp_list:
    if not item["opp_sources"] and item["curr_state_cn"] in ["筑底成熟", "启动预热", "蓄势待发"]:
        print(f"• {item['symbol']} {item['name']}: 状态【{item['curr_state_cn']}】, 均线贴近支撑")

print("\n⚠️ 【风险预警】")
for item in risk_list:
    print(f"• {item['symbol']} {item['name']}: 状态【{item['curr_state_cn']}】, 警惕回调风险")
```

---

### 1.4 全景回测与实战验证 CLI

包内置了多周期与多策略批量回测命令行工具与 Python 标准调用接口：

```bash
# 1. 单标的策略回测 (支持 pattern / sma / combined)
tp backtest -s 510050 --engine combined --start 2024-01-01

# 2. 标的池文件批量快速扫描
tp scan -f pool.yaml --json-simple
```

对于需要在 Python 代码中执行纯量化仿真回测的开发者，推荐直接调用顶层回测 API：
- `run_strategy_engine_simulation(...)`: 单标的策略引擎（双核 Combined / 趋势突破 Engine 1 / Kaufman Engine 3）标准撮合回测；
- `run_mean_reversion_simulation(...)`: 单标的周线均值回归与三阶段跟踪专用撮合回测；
- `run_sector_rotation_backtest(...)`: 多标的截面板块轮动与 Top-K 动态换仓组合回测。

---

## 2. 网格交易与组合资产顾问

网格模块提供**震荡市均值回归套利**的完整量化解决方案，包括单标的几何 ATR 网格构建、ETF 专属最优参数池、事件驱动回测引擎与组合层 8 步调仓换仓顾问。

### 2.1 单标的网格计划：`build_grid_plan`

```python
from tradingpatterns import build_grid_plan

plan = build_grid_plan(
    df,
    symbol="510300",
    capital=100000.0,
    grid_count=8,
    min_step_pct=0.008,
    max_step_pct=0.035,
    base_position_pct=0.30,
    max_position_pct=0.80,
    allocation_style="equal",    # "equal" 等额 或 "pyramid" 金字塔加权
    weekly=False,                # True 时按周线自适应
)
```

**返回值核心字段**：
- `state`: 网格状态枚举（`GRID_ACTIVE` 适合开网, `PAUSED_TREND_UP` 向上突破暂停买入, `FAILED_BREAKDOWN` 跌破止损, `RESET_REQUIRED` 需要重置, `WAIT_RANGE` 等待区间）。
- `is_grid_tradeable` (bool): 当前是否满足开网条件。
- `orders` (list[dict]): 包含具体买卖挂单价格与份额的委托计划。
- `next_triggers` (dict): 最近的下一买入与卖出触发价位。

---

### 2.2 ETF 网格严选评估：`evaluate_strict_grid_candidate`

一站式评估标的是否符合开启网格的严苛风控标准（包含趋势形态过滤、区间位置与收益率下限）：

```python
from tradingpatterns import evaluate_strict_grid_candidate, get_etf_optimal_grid_params

res = evaluate_strict_grid_candidate(
    df,
    symbol="515880",
    capital=100000.0,
    grid_count=8,
    name="通信ETF",
    is_weekly_grid=True          # 启用周线大网格模式
)

if res["is_strict_pass"]:
    print("通过严选，可开启网格交易！")
else:
    print(f"未通过原因: {res['strict_fail_reasons']}")
```

- **内置最优参数表 (`ETF_WEEKLY_OPTIMAL_PARAMS`)**：系统内置 44 只核心 ETF 的周线实证最优参数，启用 `is_weekly_grid=True` 时会自动覆盖为最优配置。

---

### 2.3 网格事件驱动轻量回测：`simulate_grid_strategy`

基于“收盘确认、次日开盘成交”原则的轻量事件驱动回测引擎：

```python
from tradingpatterns import simulate_grid_strategy

backtest = simulate_grid_strategy(
    df,
    symbol="510300",
    capital=100000.0,
    grid_count=8,
    max_loss_pct=0.12            # 账户最大亏损强制止损阈值 (12%)
)

print(f"总收益率: {backtest['summary']['return_pct']}%")
print(f"最大回撤: {backtest['summary']['max_drawdown_pct']}%")
print(f"网格往返套利次数: {backtest['summary']['grid_roundtrips']}")
```

---

### 2.4 多标的组合网格与 8 步调仓换仓：`build_etf_grid_advice`

针对大容量 ETF 池在固定持仓上限（如 `max_active_symbols = 10`）下的组合网格交易与资金统筹调度：

```python
from tradingpatterns import build_etf_grid_advice, compute_candidate_score

advice = build_etf_grid_advice(
    pool=etf_dfs_dict,
    asof_date="2026-08-19",
    max_active_symbols=10,
    capital=1000000.0,
    min_holding_days=20,
    min_switch_score_gap=15.0    # 候补第一名分差领先 15 分触发调仓
)
```

---

## 3. 技术形态扫描与预筛选管道 (`pre_screen_and_scan`)

### 3.1 预筛选与扫描主接口

一体化的预筛选与形态扫描管道 (v2.4)，结合生命周期、趋势环境与量价配合度，对标的进行严格漏斗过滤并生成详尽的 **Context Package**。

```python
from tradingpatterns import pre_screen_and_scan

# 单标的诊断/扫描
result = pre_screen_and_scan(df, symbol="sh.600519", min_score=6.0)

# 批量扫描
results = pre_screen_and_scan(jobs, min_score=6.0, max_workers=8)
```

---

### 3.2 Context Package 上下文数据包全字段解析

```json
{
  "symbol": "sh.600519",
  "name": "贵州茅台",
  "total_score": 8.5,
  "pre_screen_passed": true,
  "rejection_reason": null,
  "pre_screen": {
    "strategy_hint": "趋势跟随",
    "priority_score": 0.88,
    "urgency": "MEDIUM",
    "signal_age_days": 2,
    "stale": false,
    "stop_infeasible": false
  },
  "trend_structure": {
    "ema_alignment": "bullish_aligned",
    "adx": 28.5
  },
  "volume": {
    "vr": 1.1,
    "vr_type": "正常",
    "obv_accumulation": true
  },
  "wyckoff": {
    "phase": "accumulation",
    "event": "spring",
    "bias": "demand"
  },
  "weekly_context": {
    "weekly_trend_direction": "bullish"
  },
  "calculated_constraints": {
    "max_position_pct": 30,
    "min_rrr": 1.2
  }
}
```

| 字段路径 | 说明 |
| :--- | :--- |
| **`total_score`** | 日线预筛选 0~10 排序总分（由优先级、最高形态分、置信度、共振项加权生成）。 |
| **`pre_screen.strategy_hint`** | 建议策略框架（`趋势跟随`, `底部反转`, `区间震荡`, `等待突破`, `观望`）。 |
| **`pre_screen.stop_infeasible`** | 止损不可行硬标记（价格偏离技术位超过允许的 ATR 上限）。 |
| **`wyckoff`** | 威科夫供需分析结果 (`phase`, `event`, `bias`, `score`)。 |
| **`calculated_constraints`** | 系统预计算的风控约束（建议最大仓位比例、最小盈亏比、最大止损宽容度）。 |

---

### 3.3 威科夫量价供需分析：`detect_wyckoff_context`

```python
from tradingpatterns import detect_wyckoff_context

wyckoff = detect_wyckoff_context(df)
print(wyckoff["phase"], wyckoff["event"], wyckoff["bias"])
```

---

## 4. 市场状态机与多周期趋势评估

### 4.1 综合唯一主状态机：`detect_side_state`

将左侧筑底状态机（`BottomTrackingState`）与右侧做多状态机（`RightSideState`）合并为全局唯一的单一主状态，并输出标准化的筑底观察阶段、右侧交易计划与风控防守线：

```python
from tradingpatterns import (
    detect_side_state,
    SideState,
    STATE_LABELS,
    BOTTOM_OBSERVATION_LABELS,
    RIGHT_SIDE_PLAN_LABELS,
    STATE_EMOJIS,
    get_state_label_cn,
    get_bottom_observation_cn,
    get_right_side_plan_cn,
    get_state_emoji,
)

res = detect_side_state(df, weekly_mode="balanced")

print(f"主状态编码: {res['state']}")
print(f"主状态中文: {get_state_label_cn(res['state'])} ({get_state_emoji(res['state'])})")
print(f"筑底观察: {get_bottom_observation_cn(res['bottom_observation'])}")
print(f"右侧计划: {get_right_side_plan_cn(res['right_side_plan'])}")
print(f"刚跨入右侧: {res['entered_right_side']} | 处于右侧趋势: {res['in_right_side']}")
```

#### 标准中文状态映射表 (`STATE_LABELS`)：
| 英文枚举值 (`State`) | 标准中文标签 (`STATE_LABELS`) | 视觉图标 | 业务语义与交易指导 |
| :--- | :--- | :--- | :--- |
| `BASE` | **底部蓄势** | ⚪ | 下跌/回撤/底部构筑阶段，尚未形成有效反转 |
| `CANDIDATE` | **右侧候选** | 🟡 | 出现止跌回升证据，正等待关键结构突破 |
| `RIGHT_CONFIRMED` | **右侧确认** | 🟢 | **突破确认成立**（收盘突破前高阻力 + 辅助确认成立，`entered_right_side=True`） |
| `RIGHT_ACTIVE` | **右侧延续** | 🔵 | 突破后趋势持续有效，守在防守失效线上方（`HOLD_AND_TRACK`） |
| `RIGHT_EXTENDED` | **右侧过度延伸** | 🟠 | 趋势仍有效但乖离过大，警惕回调风险（`AVOID_CHASING`） |
| `FAILED` | **结构失效** | 🔴 | 候选或已确认结构跌破防守线，结构破坏（`STAND_ASIDE`） |
| `DECLINING` | **左侧下跌** | ⚪ | 处于左侧单边下行通道中，未见止跌迹象 |
| `BOTTOM_WATCH` | **筑底观察** | 🟡 | 初步探底，开始跟踪底部锚点 |
| `BOTTOM_BUILDING` | **筑底构建** | 🟠 | 在底部箱体内反复震荡夯实底部（Higher Lows 形成中） |
| `BOTTOM_MATURE` | **筑底成熟** | 🟠 | 底部构筑充分（持续超 20 根 K 线），蓄势待发 |
| `STARTUP_PREHEAT` | **启动预热** | 🟢 | 均线与 MACD 出现向上拐头共振，准备向右侧突破 |
| `BOTTOM_FAILED` | **筑底失败** | 🔴 | 跌破前期底部支撑锚点，底部形态破坏 |

#### 筑底观察与右侧计划映射表：
* **`BOTTOM_OBSERVATION_LABELS`**：
  - `"RIGHT_SIDE_ACTIVE"`: `已转入右侧，不再跟踪筑底`
  - `"BOTTOM_READY"`: `底部结构就绪，等待右侧突破`
  - `"BOTTOM_TRACKING"`: `底部观察中`
  - `"BOTTOM_FAILED"`: `当前底部结构失效`
  - `"NO_BOTTOM_SETUP"`: `暂无有效筑底结构`
* **`RIGHT_SIDE_PLAN_LABELS`**：
  - `"WAIT_BREAKOUT"`: `等待结构突破`
  - `"HOLD_AND_TRACK"`: `持有并跟踪失效位`
  - `"AVOID_CHASING"`: `避免追高，等待回撤`
  - `"STAND_ASIDE"`: `观望，等待新结构`
  - `"NONE"`: `暂无右侧计划`

#### 状态生命周期流转轨迹（Lifecycle Flow）：
```
【左侧下跌】(DECLINING) 
     │ (触底企稳)
     ▼
【筑底构建】(BOTTOM_BUILDING) ➔ 【筑底成熟】(BOTTOM_MATURE) ➔ 【启动预热】(STARTUP_PREHEAT) / 【右侧候选】(CANDIDATE)
     │ (收盘突破前20日高点阻力位 + 周线共振)
     ▼
【右侧确认】(RIGHT_CONFIRMED, 触发入场信号 entered_right_side=True)
     │ (次日及后续站稳突破位)
     ▼
【右侧延续】(RIGHT_ACTIVE, 跟踪持有 HOLD_AND_TRACK)
     ├── (涨幅过大 / 偏离EMA20过大) ──➔ 【右侧过度延伸】(RIGHT_EXTENDED)
     └── (跌破动态失效防守位) ────────➔ 【结构失效】(FAILED) ──➔ 【底部蓄势】(BASE)
```

---

### 4.2 做多右侧状态机：`detect_right_side_state`

```python
from tradingpatterns import detect_right_side_state, RightSideState

rs = detect_right_side_state(df, weekly_mode="balanced")
# 输出字典包含: state, entered_right_side, in_right_side, is_tradeable, breakout_level, invalidation_level, confidence_score
```

---

### 4.3 底部结构跟踪状态机：`detect_bottom_tracking_state`

```python
from tradingpatterns import detect_bottom_tracking_state, BottomTrackingState

bt = detect_bottom_tracking_state(df)
# 输出字典包含: state, in_bottom_tracking, bottom_mature, ready_for_right_side, anchor_low, support_level, resistance_level
```

---

### 4.4 独立周线中期趋势质量评分：`evaluate_weekly_trend`

独立的中期周线质量评分系统（0~100 分），不参与日线预筛选总分合成：

```python
from tradingpatterns import evaluate_weekly_trend, evaluate_weekly_trends

res = evaluate_weekly_trend(df, symbol="512880")
print(f"周线评分: {res['weekly_trend_score']} | 评级: {res['rating']}")
```

---

### 4.5 终端宽字符排版对齐工具 (`wc_len` / `wc_pad`)

用于在开发命令行 CLI、控制台对齐输出包含中文、Emoji 等宽字符的 Markdown 表格与报告：

```python
from tradingpatterns import wc_len, wc_pad

# 中文字符占 2 个显示宽度，英文占 1 个
print(wc_len("右侧确认"))  # 输出 8

# 对齐排版
header = f"{wc_pad('标的代码', 10)} | {wc_pad('标的名称', 12)} | {wc_pad('当前主状态', 14)}"
print(header)
```

---

## 5. 市场环境与辅助分析工具

### 5.1 市场情绪温度计：`sentiment_thermometer`

提供 A 股市场整体情绪温度（0~100）的计算、自适应历史分位数归一化、情绪状态分级与 5 大温区操作总方针：

```python
from tradingpatterns import (
    compute_sentiment_snapshot,
    compute_sentiment_series,
    DEFAULT_CONFIG,
    SentimentConfig,
    SENTIMENT_ZONES,
    get_sentiment_zone_desc,
    CORE_BENCHMARK_ETFS,
)

# 1. 单日情绪快照 (推荐使用周频 freq="W" 进行波段择时，日频 freq="D" 进行短线监控)
snapshot = compute_sentiment_snapshot(date="2026-08-19", config=SentimentConfig(freq="W"))
temp = snapshot["temperature"]

# 2. 获取当前温度的标准战术操作建议
zone_title, action_advice, full_desc = get_sentiment_zone_desc(temp)

print(f"情绪温度: {temp:.1f} / 100.0 | 状态: {snapshot['state']} | 趋势: {snapshot['direction']}")
print(f"当前温区: {zone_title}")
print(f"战术总方针: {action_advice}")
print(f"底层因子分位: {snapshot['factors']}")
# 输出示例: {'breadth': 88.0, 'momentum': 94.0, 'turnover': 5.0, 'volatility': 50.0, 'positioning': 96.0}
```

#### 情绪温区划分与战术指南 (`SENTIMENT_ZONES`)：
| 温度区间 | 状态代码 | 温区标识 | 市场特征与战术操作方针 |
| :--- | :--- | :--- | :--- |
| $\le 15.0$ | `ICE_COLD` | **🥶 冰点极寒区** | 绝佳的左侧中线击球区，不要盲目割肉，逢低收集带血筹码！ |
| $15.0 \sim 35.0$ | `COLD` | **❄️ 偏冷寻底区** | 市场处于左侧探底阶段，控制仓位，耐心等待右侧放量信号。 |
| $35.0 \sim 65.0$ | `NEUTRAL` | **☁️ 中性震荡区** | 情绪平稳，重个股轻大盘，聚焦结构性机会。 |
| $65.0 \sim 85.0$ | `HOT` | **🔥 偏热狂飙区** | 市场处于主升浪，持筹待涨。如果遇到降速回踩，通常是空中加油。 |
| $\ge 85.0$ | `OVERHEAT` | **🌋 极度过热区** | **最高级别风控预警**：中线面临均值回归压力，严禁追高，右侧破位坚决止盈！ |

#### 核心机制与量化解读要点：
1. **高温度与极度过热（$\ge 85.0$）是“逆向风控预警”，绝非追高做多信号**：
   - 情绪温度计衡量的是全市场的拥挤度与透支程度。实证显示，处于 `OVERHEAT` 时未来一季度的平均收益极低（+1.22%）、胜率不足 46%，面临强烈的均值回归回撤压力。
2. **大盘缩量时温度为何依然可能走高（量价背离与虚热机制）**：
   - **量能因子如实归零**：缩量时，`turnover`（量能因子，权重 20%）单项分会跌至接近 0 分，如实反映增量资金枯竭；
   - **价格因子绝对主导**：若全市场普涨（广度 F1 占 35%）、动量向上（动量 F2 占 25%）且持仓均处于近期高位无套牢盘（位置 F5 占 20%），合占 80% 权重的价格因子会合力拉高初始加权分；
   - **二次分位数拉伸**：在历史 1 年参照系下，加权分排在前 5% 以内，直接触发 90+ 度的 `OVERHEAT` 警报；
   - **实战意义**：缩量上涨反映的是“筹码锁仓、下方无买盘承接”的脆弱形态（空中楼阁）。系统打出极高温度，正是精确量化出这种“量价背离的极端脆弱性”，提示必须启动防守减仓。
3. **温度方向（`direction`）语义消歧**：
   - **低位 `warming`（$\le 35$ 度）**：**【良性企稳 / 冰点回暖】**。恐慌出清后的右侧高胜率进场点。
   - **中位 `warming`（$35 \sim 85$ 度）**：**【动量升温 / 趋势延续】**。
   - **高位 `warming`（$\ge 85$ 度）**：**【加速发烧 / 冲顶透支】**。如同人体体温升至 40.5℃，属于极度危险的危险脉冲，切忌误读为“行情转好继续追高”。

#### 常用核心基准标的池 (`CORE_BENCHMARK_ETFS`)：
包含 A 股主流宽基与大行业 ETF 代码字典（`"510300": "沪深300ETF"`, `"510500": "中证500ETF"`, `"512100": "中证1000ETF"`, `"159915": "创业板ETF"`, `"512880": "证券ETF"`, `"512800": "银行ETF"`, `"518880": "黄金ETF"`, `"513100": "纳指ETF"`）。

---

### 5.2 动态支撑阻力计算：`calculate_support_resistance`

```python
from tradingpatterns import calculate_support_resistance

sr_df = calculate_support_resistance(df, window=3)
current_support = sr_df["support"].dropna().iloc[-1]
```

---

### 5.3 组合风险平权与相关性去重

```python
from tradingpatterns import filter_correlated_assets, volatility_adjusted_position_sizing

# 1. 过滤高相关性同质化标的 (相关系数 > 0.8)
kept_symbols = filter_correlated_assets(returns_df, scores_dict, threshold=0.80)

# 2. 基于 ATR 倒数的风险平权资金分配 (Risk Parity)
weights = volatility_adjusted_position_sizing(atr_dict, total_capital=100000.0)
```

---

## 6. 均值回归与板块轮动引擎 (`mean_reversion` & `sector_rotation`)

该模块针对 A 股高波动、易超跌反弹与板块快速轮动的特征，提供 **A 股周线均值回归与三阶段跟踪引擎** 与 **截面相对强度四象限板块轮动引擎**。

### 6.1 A 股周线均值回归与三阶段跟踪 (`get_mean_reversion_signal`)

专门针对 A 股市场设计的周线大级别均值回归策略（Engine 2 核心）。采用“周线定大方向环境，日线形态/动量抓精准买点，三阶段移动止盈让利润奔跑”的设计：

```python
from tradingpatterns import (
    get_mean_reversion_signal,
    MeanReversionSignal,
    BOTTOM_PATTERNS
)

# 计算日线收盘后的均值回归信号 (供次日开盘执行)
sig = get_mean_reversion_signal(
    df_daily=df,
    symbol="510050",
    is_holding=False,             # 是否处于持仓状态
    entry_price=0.0,              # 若持仓，传入成本价
    holding_stage=1,              # 若持仓，传入当前跟踪阶段 (1, 2, 3)
    holding_weeks=0,              # 若持仓，传入已持仓周数
    current_stop_loss=0.0,        # 当前动态止损价
    trade_history=[]              # 传入历史交易记录用于单边熊市止损冷却判断
)

if sig.buy_signal:
    print(f"触发均值回归买入: 止损价={sig.stop_loss:.3f}, 原因={sig.reason}")
elif sig.sell_signal:
    print(f"触发平仓离场: 原因={sig.reason}")
```

#### 核心机制与三阶段动态跟踪止盈：
1. **周线超跌门禁**：周线触及布林下轨 (BBANDS 20, 2.0)、周线 RSI(14) $\le 38$、周线 CCI(14) $\le -90$ 多重共振。
2. **日线精准触发**：
   - 组合 A: TA-Lib 底部 K 线反转形态加权分 $\ge 0.8$ 且日 RSI $< 48$；
   - 组合 B: 日 RSI $< 35$ 拐头回升且 KD 低位金叉；
   - 组合 C: 资金流向 MFI $< 25$ 回升且收实体真阳线；
   - 周线 MACD 底背离（额外提供强信号加权）。
3. **三阶段跟踪止盈 (3-Stage Trailing Stop)**：
   - **Stage 1 (回归等待期)**：建仓后等待价格向周线中轨 (SMA20) 回归。执行近 3 周最低点 $\times 0.985$ 与日线 ATR 止损；若超 16 周未回归中轨触发时间止损。
   - **Stage 2 (回归确认期)**：价格有效突破周线中轨后，自动升级至 Stage 2，切换为 **Weekly EMA10 动态跟踪止盈**。
   - **Stage 3 (趋势延续期)**：价格突破周线布林上轨后，自动升级至 Stage 3，切换为 **Weekly EMA20 动态跟踪止盈**，全程护航大牛浪。
4. **风控保护机制**：
   - **单边熊市止损冷却 (Bear Market Cooldown)**：在价格低于 EMA53 的弱势格局下，若发生止损，触发 10 根 K 线（连续止损为 20 根）冷却期，禁止在同一深跌浪中频繁抄底，除非价格创出新低（$< 0.97 \times \text{前次止损价}$）或收复 EMA53。
   - **假摔快速重入 (Shakeout Re-entry)**：若止损后 6 根 K 线内快速以实体阳线收复 EMA20，判定为主力诱空假摔，触发快速纠错重入。

---

### 6.2 TA-Lib 底部反转形态扫描与权重 (`scan_talib_patterns`)

内置 11 种经典 TA-Lib 底部反转形态的向量化扫描与置信度权重评分：

```python
from tradingpatterns import scan_talib_patterns, BOTTOM_PATTERNS

# 扫描并获取当天命中的底部形态及综合权重
detected_patterns, total_weight = scan_talib_patterns(df_daily)
print("命中形态:", detected_patterns) # 如 ['CDLMORNINGSTAR', 'CDLENGULFING_BULL']
print("综合形态得分:", total_weight)      # 权重加权分
```

- **形态权重表 (`BOTTOM_PATTERNS`)**：包含晨星 (`CDLMORNINGSTAR`: 1.5)、看涨吞没 (`CDLENGULFING_BULL`: 1.5)、三白兵 (`CDL3WHITESOLDIERS`: 1.5)、看涨弃婴 (`CDLABANDONEDBABY_BULL`: 1.2)、十字晨星 (`CDLMORNINGDOJISTAR`: 1.2)、锤头线 (`CDLHAMMER`: 1.0)、刺透形态 (`CDLPIERCING`: 1.0)、倒锤头线 (`CDLINVERTEDHAMMER`: 0.8)、看涨孕线 (`CDLHARAMI_BULL`: 0.8)、蜻蜓十字 (`CDLDRAGONFLYDOJI`: 0.8)、看涨踢脚 (`CDLKICKING_BULL`: 1.0)。

---

### 6.3 均值回归事件驱动回测 (`run_mean_reversion_simulation`)

```python
from tradingpatterns import run_mean_reversion_simulation

res = run_mean_reversion_simulation(
    df=df_daily,
    symbol="510050",
    name="上证50ETF",
    initial_capital=100000.0,
    start_date="2024-01-01",
    min_window=40
)

print(f"累计收益率: {res.total_return_pct:.2f}%")
print(f"最大回撤: {res.max_drawdown_pct:.2f}%")
print(f"胜率: {res.win_rate_pct:.2f}% | 盈亏比: {res.profit_loss_ratio:.2f}")
```

---

### 6.4 全池截面轮动评估与纯趋势研判 (`evaluate_universe`)

`SectorRotationEngine` 的核心截面评级计算器。**如果仅用于日常盯盘、自媒体复盘、板块热点研判而不进行自动化交易与回测**，只需传入全池标的截至当天的历史 K 线数据，即可一次性计算出所有标的当前所属的轮动四象限、相对大盘强度 (RS) 历史分位数以及 10 日动能斜率。

```python
import kdata
from tradingpatterns import SectorRotationEngine

# 1. 准备待观察的板块/ETF 列表与对标基准 (默认 510300 沪深300ETF)
symbols = ["515880", "512800", "512690", "588000", "516160"]
names = {"515880": "通信", "512800": "银行", "512690": "酒", "588000": "科创50", "516160": "新能源"}
bench_sym = "510300"

# 2. 抓取近期 OHLCV 数据 (建议包含最近 >=60 根 K 线用于计算分位数与斜率)
dfs = {s: kdata.get_ohlc(s, "2025-01-01", "2026-08-22") for s in symbols}
bench_df = kdata.get_ohlc(bench_sym, "2025-01-01", "2026-08-22")

# 3. 初始化轮动引擎并计算最新截面
engine = SectorRotationEngine(
    symbols=symbols,
    names=names,
    benchmark_symbol=bench_sym
)

# current_date_idx 指定目标评估日在 DataFrame 中的索引 (最新一天取 len-1)
metrics = engine.evaluate_universe(
    universe_dfs=dfs,
    benchmark_df=bench_df,
    current_date_idx=len(bench_df) - 1,
    prev_quadrants={}          # 用于迟滞防抖 (单点截面快照可置空)
)

# 4. 打印板块趋势与动能分布
for m in metrics:
    print(f"[{m.quadrant.value:<10}] {m.symbol} {m.name:<6} | "
          f"相对强度分位数: {m.rs_percentile:>5.1f}% | "
          f"10日动能斜率: {m.rs_slope:>+7.4f} | "
          f"综合评分: {m.composite_score:.1f}")
```

---

### 6.5 四象限坐标体系与动能研判逻辑

板块轮动模型构建在 **“相对强弱 (RS Percentile) - 动能方向 (RS Slope)”** 二维坐标系上，用于定性识别资金在不同行业间的宏观转移规律：

```
                    RS 斜率向上 (资金持续流入 / 走强)
                                   ▲
                                   │
           【🌱 潜伏复苏区】        │      【🚀 强势领涨区】
             (RECOVERING)          │        (LEADING)
        • RS 分位 < 30%            │   • RS 分位 >= 30%
        • 斜率 > 0 (左侧拐头向上)   │   • 斜率 > 0 (顺势主升浪)
                                   │
 ──────────────────────────────────┼──────────────────────────────────► RS 相对强度历史分位数
                                   │                                    (基准线 30% 区分强弱)
           【❄️ 弱势持续区】        │      【🍂 高位衰退区】
             (LAGGING)             │        (WEAKENING)
        • RS 分位 < 30%            │   • RS 分位 >= 30%
        • 斜率 <= 0 (持续阴跌)     │   • 斜率 <= 0 (高位动能衰竭)
                                   │
                    RS 斜率向下 (资金持续抽离 / 走弱)
```

#### 纯趋势研判实操准则：
1. **🚀 寻找主线主升浪 (LEADING)**：处于领跑区，相对大盘走强且动能加速，代表当前全市场最确定的强势主线。
2. **🌱 捕捉低位反转潜伏 (RECOVERING)**：处于超跌复苏区，虽然过去 60 天表现弱于大盘，但 10 日回归斜率已向上拐头，通常对应主力左侧建仓的超跌修复期。
3. **🍂 识别高位出货风险 (WEAKENING)**：虽然过去强势（RS 高位），但动能斜率已掉头向下，表明资金开始分歧流出，警惕补跌风险。
4. **❄️ 规避弱势下行深坑 (LAGGING)**：低位且动能继续下行，资金持续抽离，坚决规避。

---

### 6.6 截面状态指标 (`SectorMetric` / `RotationQuadrant` / `QUADRANT_META`)

`evaluate_universe` 返回的 `List[SectorMetric]` 包含完整的量化截面指标与标准化象限元数据：

```python
from tradingpatterns import (
    SectorMetric,
    RotationQuadrant,
    QUADRANT_META,
    get_quadrant_meta,
)

# 获取任一象限的标准元数据
meta = get_quadrant_meta(RotationQuadrant.LEADING)
print(meta["title"])  # 输出: 🔥 领涨区 (LEADING)
print(meta["desc"])   # 输出: 强势上涨，强者恒强，建议持仓或顺势加仓
```

#### 四象限标准元数据与操作建议 (`QUADRANT_META`)：
| 象限枚举 (`RotationQuadrant`) | 象限名称 | 标识 | 业务语义与实战建议 |
| :--- | :--- | :--- | :--- |
| `LEADING` | **领涨区** | 🔥 | 强势上涨，强者恒强，建议持仓或顺势加仓 |
| `RECOVERING` | **复苏区** | 🌱 | 低位拐头向上，动能正在积聚，建议关注或潜伏 |
| `WEAKENING` | **衰退区** | ⚠️ | 高位动能衰竭，相对走弱，建议减仓或防守 |
| `LAGGING` | **滞后区** | ❄️ | 弱势下行通道，未见企稳，建议规避 |

#### `SectorMetric` 核心字段：
- **`quadrant`** (Enum: `RotationQuadrant`): 标的当前所属的轮动四象限（`LEADING`, `RECOVERING`, `WEAKENING`, `LAGGING`）。
- **`rs_value` / `rs_smooth`**: 标的相对基准的 20 日收益比率及经 EMA(5) 平滑后的相对强度序列。
- **`rs_percentile`**: 相对强度 (RS) 在过去 60 个交易日内的历史分位数排名（100% 代表当前处于 60 日最强极点，0% 为最弱极点）。
- **`rs_slope`**: RS 近 10 日的线性回归斜率（`talib.LINEARREG_SLOPE`）。大于 0 代表动能正在走强向上。
- **`composite_score`**: 0~10 的软加权综合打分（包含象限基础加权分与均值回归底背离加分）。
- **`reversion_signal`**: 若当天同时触发了日周双级别均值回归买点，携带对应的 `MeanReversionSignal` 信号事件。

---

### 6.7 截面组合历史回测 (`run_sector_rotation_backtest`)

将上述横截面评估能力放入时间轴，自动撮合多标的换仓，生成宏观资产组合的回测报告。

```python
from tradingpatterns import run_sector_rotation_backtest

portfolio_res = run_sector_rotation_backtest(
    universe_dfs=universe_dfs,
    benchmark_df=bench_df,
    symbols=symbols,
    names=names,
    benchmark_symbol="510300",
    start_date="2024-01-01",
    initial_capital=1000000.0,
    max_positions=4,           # 动态组合最大同时持仓数 (Top K)
    min_window=60              # 历史指标预热期
)

# 打印宏观绩效
print("组合累计收益率:", portfolio_res["total_return_pct"])
print("组合最大回撤:", portfolio_res["max_drawdown_pct"])
print("调仓明细:", portfolio_res["trades"]) # 返回详尽的买卖时间线
```

---

## 7. 美股专属量化系统与机会雷达 (US ETF Quantitative System & Radar)

为了适配美股市场的长牛强趋势（High Efficiency Ratio）、T+0 交易机制、行业动量效应与宏观利率敏感性，系统提供了独立于 A 股体系的美股专属量化层。

```
                          【SPY 宏观绝对动量与体制判别 (us_macro)】
                            (SMA200 / 10月绝对动量 / 建议总仓位)
                                              │
                     ┌────────────────────────┴────────────────────────┐
                     ▼                                                 ▼
        【自适应超级趋势策略 (us_strategy)】               【美股机会雷达 5 大状态机 (us_opportunity_radar)】
         - KAMA 自适应均线 + Donchian 通道突破              - SUPER_TREND / MOMENTUM_LEADER
         - EMA20 / SMA50 缩量回踩优质低吸                    - PULLBACK_BUY / DEFENSIVE_HOLD / LAGGING
         - 动态 Chandelier ATR 吊灯止损                     - 0-10 分多维加权技术评分
```

### 7.1 宏观绝对动量与体制判别 (`us_macro`)

```python
from tradingpatterns import (
    USMarketRegime,
    USMacroSnapshot,
    compute_us_macro_series,
    get_latest_us_macro_snapshot,
)

# 1. 计算 SPY 宏观体制时间序列
macro_df = compute_us_macro_series(spy_df, cash_df=shy_df)

# 2. 获取最新宏观快照
snapshot: USMacroSnapshot = get_latest_us_macro_snapshot(spy_df, cash_df=shy_df)

print("市场体制:", snapshot.regime.value)               # RISK_ON / RISK_OFF / VOL_PANIC
print("站上200日均线:", snapshot.is_above_sma200)      # True / False
print("10月绝对动量:", snapshot.momentum_10m)          # float
print("宏观安全得分 (0-10):", snapshot.risk_score)     # 0.0 ~ 10.0
print("建议股票总仓位:", snapshot.suggested_equity_ratio) # 0.0 ~ 1.0 (例如 0.2 或 1.0)
```

---

### 7.2 自适应超级趋势与截面双动量策略 (`us_strategy`)

```python
from tradingpatterns import (
    calculate_kama,
    run_us_super_trend_strategy,
    compute_us_rotation_metrics,
    USTrendBacktestResult,
    USRotationMetric,
    USRotationQuadrant,
)

# 1. Kaufman 自适应均线与效率比 (ER) 计算
kama_arr, er_arr = calculate_kama(df["close"].to_numpy(), period=10)

# 2. 单标的美股超级趋势策略回测 (内嵌宏观风控与动态吊灯止损)
result: USTrendBacktestResult = run_us_super_trend_strategy(
    df=qqq_df,
    symbol="QQQ",
    macro_series=macro_df,
    initial_capital=100000.0
)

print(f"累计收益: {result.total_return_pct:+.2f}% | 年化CAGR: {result.cagr:+.2f}%")
print(f"夏普比率: {result.sharpe_ratio:.2f} | 最大回撤: {result.max_drawdown_pct:.2f}%")
print(f"胜率: {result.win_rate:.1f}% | 盈亏比: {result.profit_factor:.2f}")

# 3. 截面双动量与行业相对强度 (RS) 轮动评估
rotation_metrics = compute_us_rotation_metrics(
    target_dfs={"XLK": xlk_df, "XLE": xle_df, "SMH": smh_df},
    benchmark_df=spy_df
)
for sym, metric in rotation_metrics.items():
    print(f"{sym}: 象限={metric.quadrant.value}, 复合动量={metric.composite_momentum:.3f}, RS百分位={metric.rs_percentile:.1f}%")
```

---

### 7.3 美股专属 0-10 分机会雷达与 5 大状态机 (`us_opportunity_radar`)

```python
from tradingpatterns import (
    USRadarState,
    USRadarItem,
    USRadarSummary,
    evaluate_us_opportunity_item,
    analyze_us_opportunity_radar,
)

# 1. 单标的雷达打分与状态评估
item: USRadarItem = evaluate_us_opportunity_item(
    symbol="NVDA",
    df=nvda_df,
    benchmark_df=spy_df,
    name="NVIDIA Corp",
    rank_percentile=95.0
)
print("雷达状态:", item.radar_state.value)       # SUPER_TREND / MOMENTUM_LEADER / PULLBACK_BUY / DEFENSIVE_HOLD / LAGGING
print("综合得分:", item.composite_score)        # 0.0 ~ 10.0 (趋势40% + 动量30% + 回踩20% + 宏观10%)
print("关键支撑位:", item.key_support)          # float
print("操作建议:", item.action_suggestion)     # 专家行动指南

# 2. 全池批量机会雷达分析
summary: USRadarSummary = analyze_us_opportunity_radar(
    target_dfs=target_dfs,
    benchmark_df=spy_df,
    cash_df=shy_df
)
print(f"扫描标的数: {summary.total_scanned}")
print("超级主升标的:", [x.symbol for x in summary.super_trend_items])
print("动量领跑标的:", [x.symbol for x in summary.momentum_leaders])
print("优质回踩低吸:", [x.symbol for x in summary.pullback_buys])
print("避险防守标的:", [x.symbol for x in summary.defensive_holds])
```

---

### 7.4 多周期统一门面入口 (`run_us_strategy` / `compute_us_rotation` / `analyze_us_radar`)

系统提供了支持日线 (`'D'`) 与周线 (`'W'`) 自动调度的统一顶层门面 API，内置自适应降采样 (`auto_resample=True` 时自动将日线转为 `'W-FRI'` 周线)：

```python
from tradingpatterns import (
    run_us_strategy,
    compute_us_rotation,
    analyze_us_radar,
    run_us_weekly_super_trend_strategy,
    compute_us_weekly_rotation_metrics,
    analyze_us_weekly_opportunity_radar,
    USWeeklyTrendSignalType,
    USWeeklyRotationQuadrant,
    USWeeklyTrendTrade,
    USWeeklyTrendBacktestResult,
    USWeeklyRotationMetric,
)

# 1. 统一入口：运行美股趋势策略 (支持日频 'D' 或周频 'W'，内置自动重采样)
res_daily: USTrendBacktestResult = run_us_strategy(
    df=qqq_df,
    symbol="QQQ",
    macro_series=macro_df,
    initial_capital=100000.0,
    timeframe="D",
)

res_weekly: USWeeklyTrendBacktestResult = run_us_strategy(
    df=qqq_df,
    symbol="QQQ",
    macro_series=macro_df,
    initial_capital=100000.0,
    timeframe="W",
    auto_resample=True,
)

print(f"周线策略累计收益: {res_weekly.total_return_pct:+.2f}% | 夏普: {res_weekly.sharpe_ratio:.2f}")

# 2. 统一入口：计算截面行业双动量与相对强度 (支持 'D' / 'W')
rotation_daily = compute_us_rotation(
    target_dfs={"XLK": xlk_df, "XLE": xle_df, "SMH": smh_df},
    benchmark_df=spy_df,
    timeframe="D",
)

rotation_weekly = compute_us_rotation(
    target_dfs={"XLK": xlk_df, "XLE": xle_df, "SMH": smh_df},
    benchmark_df=spy_df,
    cash_df=shy_df,
    timeframe="W",
    auto_resample=True,
)

# 3. 统一入口：运行全池机会雷达批量扫描 (支持 'D' / 'W')
weekly_radar_summary = analyze_us_radar(
    target_dfs=target_dfs_dict,
    benchmark_df=spy_df,
    cash_df=shy_df,
    timeframe="W",
    auto_resample=True,
)
print(f"周线机会雷达扫描完成: 共 {weekly_radar_summary.total_scanned} 标的")
```

---

### 7.5 美股全景回测与雷达扫描 CLI

支持通过包自带的 CLI 命令行工具或 Python API 对美股全池或自定义标的进行批量回测与最新雷达扫描：

```bash
# 全池或多标的批量策略回测
tp backtest -s SPY,QQQ,SMH,XLK,XLE,GLD --engine combined --start 2024-01-01

# 标的池 YAML 文件批量快速扫描
tp scan -f us_pool.yaml --json-simple
```

---

## 8. 跨境 QDII ETF 溢价套利与趋势共振引擎 (`overseas_premium`)

**跨境 QDII ETF 溢价双核共振引擎 (`Overseas Premium Engine`) 专为国内挂牌的海外指数/行业 ETF（如标普500 ETF、纳指100 ETF、纳指科技 ETF、标普油气 ETF、日经225 ETF等）设计。**

它解决了跨境 ETF 常见的两大核心痛点：
1. **防范高位溢价泡沫接盘**：美股走牛或国内情绪过热时，国内 QDII ETF 溢价率经常飙升至 10%~20%。引擎通过**“盘后相对比价偏离度 (Z-Score)”**进行硬性阻断，并在溢价泡沫破裂时提前止盈；
2. **美股超级趋势与周线强共振**：仅在美股底层资产（SPY/QQQ/XOP/EWJ）确认周线及日线多头强趋势、且国内溢价健康时才触发买入；同时在极端恐慌错杀（折价率极深）时触发左侧套利。

```
                      【国内 QDII ETF 行情 + 美股底层资产行情】
                                         │
                                         ▼
                           【align_cn_us_series 盘后对齐】
                           (国内 T 日 锚定 美股 T-1 日收盘)
                                         │
                                         ▼
                       【calculate_premium_zscore 溢价偏离度】
                        (60日滚动比价偏离度 Z-Score 计算)
                                         │
                   ┌─────────────────────┴─────────────────────┐
                   ▼                                           ▼
       【底层美股趋势与动能判定】                       【溢价风控门禁与极值判别】
   • KAMA 上行 + Donchian 通道突破              • 正常安全区: Z < 1.0 (允许买入)
   • EMA20 强势回踩企稳 (Pullback)              • 追高阻断区: Z >= 1.0 (阻断开仓)
   • 周线 EMA20 多头强趋势共振                   • 泡沫风险区: Z > 2.5 (止盈预警)
                   │                                           │
                   └─────────────────────┬─────────────────────┘
                                         │
                                         ▼
          【evaluate_overseas_opportunity_item / analyze_overseas_radar】
      输出：TREND_BUY (趋势共振买点) / DISCOUNT_BUY (折价套利买点) /
            BLOCKED (高溢价阻断) / PREMIUM_BUBBLE_SELL (泡沫风险卖点) / WATCH (观望)
```

---

### 8.1 底层资产映射与盘后时差对齐

```python
from tradingpatterns import (
    OVERSEAS_UNDERLYING_MAP,
    get_underlying_for_symbol,
    align_cn_us_series,
)

# 1. 查询国内跨境 ETF 对应的底层海外代码
us_symbol = get_underlying_for_symbol("513100")  # 返回 "QQQ"
us_symbol_oil = get_underlying_for_symbol("159518")  # 返回 "XOP"

# 2. 盘后离线交易日时差严格对齐 (国内 T 日白盘收盘价锚定美股 T-1 日收盘价)
cn_aligned, us_aligned = align_cn_us_series(cn_df, us_df)
```

---

### 8.2 60日相对比价偏离度计算 (`calculate_premium_zscore`)

无需获取实时汇率或 IOPV，算法通过滚动统计比价的比值来规避长期汇率漂移：

$$Ratio_t = \frac{Close_{CN, t}}{Close_{US, t-1}}$$
$$Z_t = \frac{Ratio_t - Mean_{60}}{\max(Std_{60}, 1e-6)}$$

```python
from tradingpatterns import calculate_premium_zscore

# 计算 60 日相对比价、滚动均值及偏离度 Z-Score
ratio_arr, mean_arr, zscore_arr = calculate_premium_zscore(
    cn_close=cn_df["close"].to_numpy(),
    us_close_aligned=us_aligned["close"].to_numpy(),
    window=60
)
print("最新溢价偏离度 Z-Score:", zscore_arr[-1])
```

---

### 8.3 单标的实时机会与信号评估 (`evaluate_overseas_opportunity_item` / `get_overseas_premium_signal`)

用于每日收盘后对单个跨境 ETF 进行**实时机会发现与风控决策**（例如次日是否开仓、是否被高溢价阻断、是否需要止盈止损）：

```python
from tradingpatterns import evaluate_overseas_opportunity_item, compute_us_macro_series

# 1. 计算宏观背景序列 (以 SPY 为基准)
macro_df = compute_us_macro_series(spy_df)

# 2. 评估单标的最新机会与决策
item = evaluate_overseas_opportunity_item(
    cn_df=cn_df,                        # 国内 ETF 日线 (如 513100)
    us_df=qqq_df,                       # 对应底层美股日线 (如 QQQ)
    symbol="513100",
    name="纳指ETF",
    macro_series=macro_df,
    max_buy_zscore=1.0,                 # 溢价门禁 (Z-Score < 1.0 允许买入)
    bubble_sell_zscore=2.5,             # 泡沫止盈阈值 (Z-Score > 2.5)
    discount_buy_zscore=-2.5,           # 极端折价套利阈值 (Z-Score < -2.5)
    require_weekly_bull=True,           # 开启周线多头强趋势门禁
    is_holding=False,                   # 当前是否持仓
)

if item:
    print(f"标的: {item.name}({item.symbol}) -> 底层: {item.underlying_symbol}")
    print(f"最新收盘: 国内 {item.close_cn} | 底层美股 {item.close_us}")
    print(f"溢价偏离 Z-Score: {item.zscore:+.2f} (溢价安全={item.is_premium_safe}, 泡沫风险={item.is_bubble_risk})")
    print(f"美股动能: 突破={item.is_us_breakout}, 回踩={item.is_us_pullback}, 周线多头={item.is_weekly_bull}")
    print(f"执行行动: 【{item.action}】 (买入信号={item.buy_signal}, 卖出信号={item.sell_signal})")
    print(f"建议防守止损位: {item.stop_loss:.3f}")
    print(f"决策原因: {item.reason}")
```

#### 决策行动分类 (`item.action`)：
- **`BUY`**: 触发买点！底层美股趋势突破/回踩确认且溢价健康（`TREND_BUY`），或国内极端恐慌错杀折价（`DISCOUNT_BUY`）。
- **`BLOCKED`**: **高溢价风控阻断！** 底层美股虽然走牛，但国内 ETF 溢价偏离度过高（`Z-Score >= 1.0`），坚决禁止追高。
- **`SELL`**: 触发离场！包含高溢价泡沫破裂防范（`PREMIUM_BUBBLE_SELL`）、底层美股破位吊灯移动止损（`US_TRAILING_STOP`）或宏观极速恐慌（`US_MACRO_RISK_OFF`）。
- **`WATCH`**: 观望蓄势或处于无买点震荡区间。
- **`HOLD`**: 若传入 `is_holding=True` 且未触发卖点，处于正常持仓保护状态。

---

### 8.4 跨境全池机会雷达批量扫描 (`analyze_overseas_radar` / `OverseasRadarSummary`)

一键对全市场所有跨境 QDII ETF 进行批量扫描与分类归档，可直接作为**每日跨境机会复盘看板与自动化监控工具**：

```python
from tradingpatterns import analyze_overseas_radar, compute_us_macro_series

# 准备国内标的池字典与海外底层资产字典
# cn_pool: {"513100": cn_df1, "159518": cn_df2, "513880": cn_df3, ...}
# us_pool: {"QQQ": qqq_df, "XOP": xop_df, "EWJ": ewj_df, "SPY": spy_df}

macro_df = compute_us_macro_series(us_pool["SPY"])

# 批量扫描跨境全池机会雷达
radar: OverseasRadarSummary = analyze_overseas_radar(
    cn_dfs=cn_pool,
    us_dfs=us_pool,
    macro_series=macro_df,
    names={"513100": "纳指ETF", "159518": "油气ETF", "513880": "日经225ETF"},
    max_buy_zscore=1.0,
    bubble_sell_zscore=2.5,
    discount_buy_zscore=-2.5,
)

print(f"📊 【跨境 QDII ETF 机会雷达 | 日报】(共扫描 {radar.total_scanned} 只标的)\n")

print("🔥 【核心买入机会 (趋势共振 / 折价套利)】")
for opp in radar.opportunities:
    print(f"• [{opp.signal_type.value}] {opp.name}({opp.symbol}): Z-Score={opp.zscore:+.2f} | 建议防守位: {opp.stop_loss:.3f} | 原因: {opp.reason}")

print("\n🚫 【美股走强但高溢价阻断 (严禁追高)】")
for blk in radar.blocked_items:
    print(f"• {blk.name}({blk.symbol}): Z-Score={blk.zscore:+.2f} (偏离过大) | 底层美股: {blk.underlying_symbol}")

print("\n⚠️ 【高溢价泡沫风险预警】")
for risk in radar.bubble_risks:
    print(f"• {risk.name}({risk.symbol}): Z-Score={risk.zscore:+.2f} (高位滞涨/泡沫破裂风险)")

print("\n👀 【跟踪观察池】")
for w in radar.watches:
    print(f"• {w.name}({w.symbol}): Z-Score={w.zscore:+.2f} | 美股突破={w.is_us_breakout}")
```

---

### 8.5 双核共振策略回测与绩效寻优 (`run_overseas_premium_strategy`)

对特定标的或全池进行事件驱动历史回测，检验趋势共振与溢价风控的综合实战收益：

```python
from tradingpatterns import (
    OverseasSignalType,
    OverseasTrade,
    OverseasBacktestResult,
    run_overseas_premium_strategy,
    compute_us_macro_series,
)

# 1. 计算美股大盘宏观状态 (以 SPY 为基准)
macro_df = compute_us_macro_series(spy_df)

# 2. 运行单标的跨境 ETF 溢价双核共振策略回测
result: OverseasBacktestResult = run_overseas_premium_strategy(
    cn_df=cn_df,                        # 国内 ETF 日线行情 (如 513100)
    us_df=qqq_df,                       # 对应底层海外日线行情 (如 QQQ)
    symbol="513100",
    underlying_symbol="QQQ",
    macro_series=macro_df,
    initial_capital=100000.0,
    max_buy_zscore=1.0,                 # 买入溢价上限 (Z-Score < 1.0)
    bubble_sell_zscore=2.5,             # 溢价泡沫防范卖出阈值 (Z-Score > 2.5)
    discount_buy_zscore=-2.5,           # 极端折价错杀套利买入阈值 (Z-Score < -2.5)
    require_weekly_bull=True            # 启用底层周线强趋势过滤
)

print(f"累计收益: {result.total_return_pct:+.2f}% | 年化CAGR: {result.cagr:+.2f}%")
print(f"夏普比率: {result.sharpe_ratio:.2f} | 最大回撤: {result.max_drawdown_pct:.2f}%")
print(f"胜率: {result.win_rate:.1f}% | 盈亏比: {result.profit_factor:.2f}")
print(f"成功阻断高溢价接盘次数: {result.blocked_high_premium_buys} 次")

# 3. 遍历交易明细
for trade in result.trades:
    print(f"买入: {trade.entry_date} ({trade.entry_price:.3f}, Z={trade.entry_zscore:+.2f}) -> "
          f"卖出: {trade.exit_date} ({trade.exit_price:.3f}, Z={trade.exit_zscore:+.2f}) | "
          f"收益: {trade.return_pct:+.2f}% | 原因: {trade.exit_reason}")
```

---

## 9. 实盘撮合与信号全生命周期追踪 (`execution`)

**实盘撮合与执行模块遵循“策略信号触发 (Alpha Firing)”与“交易所物理执行约束 (Execution Constraints)”严格解耦的设计原则。**

策略引擎只根据量化形态与技术面输出纯粹的买卖信号，撮合层则负责在 T+1 开盘时判定信号的物理可行性（一字涨停/跌停拦截、停牌检测、滑点/费率损耗仿真、已有持仓去重），并精确记录所有未成交信号及其物理归因。

```
                          ┌────────────────────────┐
                          │   策略引擎输出纯买卖信号   │
                          │ (StrategySignalEvent)  │
                          └───────────┬────────────┘
                                      │
                                      ▼
                      【ExecutionMatcher 撮合仿真器】
             (次日开盘物理约束校验：一字涨跌停 / 停牌 / 滑点手续费)
                                      │
                 ┌────────────────────┴────────────────────┐
                 ▼                                         ▼
         【✅ 成功撮合成交】                        【❌ 物理阻断 / 未成交归档】
       (成交价 = 开盘价 ± 滑点)                  (LIMIT_UP_LOCKED, SUSPENDED...)
                 │                                         │
                 └────────────────────┬────────────────────┘
                                      │
                                      ▼
                        【compute_execution_summary】
                    (全生命周期执行汇总与成交率统计报表)
```

---

### 9.1 交易所物理约束与涨跌停比例 (`get_a_share_price_limit_ratio` / `ExecutionStatus`)

系统内置了各板块交易规则的涨跌停比例自适应解析函数 `get_a_share_price_limit_ratio`：

```python
from tradingpatterns import get_a_share_price_limit_ratio, ExecutionStatus

# 板块涨跌幅上限自动识别
limit_main = get_a_share_price_limit_ratio("600519")      # 主板 10% (0.10)
limit_cyb = get_a_share_price_limit_ratio("300750")       # 创业板 20% (0.20)
limit_kcb = get_a_share_price_limit_ratio("688981")       # 科创板 20% (0.20)
limit_bj = get_a_share_price_limit_ratio("832000")        # 北交所 30% (0.30)
limit_st = get_a_share_price_limit_ratio("600000", "ST浦发") # ST 股票 5% (0.05)
limit_us = get_a_share_price_limit_ratio("AAPL")          # 美股无涨跌停限制 (1.00)
```

#### 执行状态枚举 (`ExecutionStatus`)：
- **`FILLED`**: 正常撮合成交（按次日开盘价 + 滑点成交）。
- **`LIMIT_UP_LOCKED`**: 次日开盘一字涨停封死，买入挂单无法撮合。
- **`LIMIT_DOWN_LOCKED`**: 次日开盘一字跌停封死，卖出挂单无法撮合。
- **`SUSPENDED`**: 标的次日停牌或无成交量。
- **`SKIPPED_ALREADY_IN_POSITION`**: 已处于持仓状态，跳过重复开仓买点。
- **`INSUFFICIENT_LIQUIDITY`**: 流动性不足。
- **`EXPIRED`**: 信号超时失效。

---

### 9.2 次日开盘撮合可行性仿真 (`ExecutionMatcher`)

```python
from tradingpatterns import ExecutionMatcher, UnfilledSignal

matcher = ExecutionMatcher(
    slippage_rate=0.0005,      # 单边滑点率 (默认万 5)
    fee_rate=0.0002,           # 佣金/经手费费率 (默认万 2)
    strict_limit_check=True    # 启用严格涨跌停与停牌物理拦截
)

# 1. 评估次日买入信号撮合可行性
can_buy, buy_price, unfilled_buy = matcher.check_buy_feasibility(
    symbol="510050",
    signal_date="2026-08-20",
    engine="ENGINE2_REVERSAL",
    signal_close_price=2.850,
    next_open=2.855,
    next_high=2.870,
    next_low=2.845,
    next_close=2.860,
    next_volume=1500000.0,
    name="上证50ETF"
)

if can_buy:
    print(f"买入成功撮合，实际成交价 (含滑点): {buy_price:.3f}")
else:
    print(f"买入未能成交: [{unfilled_buy.status.value}] {unfilled_buy.reason}")

# 2. 评估次日卖出信号撮合可行性
can_sell, sell_price, unfilled_sell = matcher.check_sell_feasibility(
    symbol="510050",
    signal_date="2026-08-25",
    engine="ENGINE2_REVERSAL",
    signal_close_price=2.950,
    next_open=2.945,
    next_high=2.960,
    next_low=2.940,
    next_close=2.955,
    next_volume=1200000.0,
    name="上证50ETF"
)
```

---

### 9.3 未成交信号追踪与生命周期汇总 (`UnfilledSignal` / `compute_execution_summary`)

```python
from tradingpatterns import compute_execution_summary

# 模拟成交历史与未成交拦截记录
executed_trades = [
    {"entry_date": "2026-08-01", "exit_date": "2026-08-15", "symbol": "510050", "return_pct": 5.2}
]
unfilled_records = [
    unfilled_buy.to_dict() if unfilled_buy else {}
]

# 生成信号全生命周期统计分析报告
summary = compute_execution_summary(
    trades=executed_trades,
    unfilled_signals=unfilled_records
)

print(f"总触发信号数: {summary['total_signals']}")
print(f"实际成交笔数: {summary['filled_trades']}")
print(f"综合撮合成交率: {summary['fill_rate_pct']}%")
print(f"未成交物理归因分布: {summary['reason_stats']}")
```



