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 | 对应文档章节 |
|---|---|---|---|
| 🌐 全雷达体系 (Opportunity Radar) |
全市场/全池选品与异动扫描 将标的分类为 5 态(机会/异动/风险/降温/观察),计算动态防守线与双距离 |
analyze_opportunity_radar()evaluate_opportunity_radar_item() |
第 1 章 (1.2, 1.3) |
| 🧭 核心 1:右侧趋势突破 (Engine 1 / Trend Breakout) |
交易执行:右侧主升浪做多 抓放量结构突破 + EMA20 回踩确认 + EMA53 移动跟踪 |
get_strategy_signal(StrategyEngine.ENGINE1_TREND, df) |
第 1 章 (1.1, 1.2) |
| ⚡ 核心 2:左侧均值回归 (Engine 2 / Mean Reversion) |
交易执行:左侧大波段抄底 抓周线布林超跌 + K线底部反转 + 3阶段跟踪止盈 (Stage 1/2/3) + 熊市冷却 |
get_mean_reversion_signal()或 get_strategy_signal(StrategyEngine.ENGINE2_REVERSAL, df) |
第 6 章 (6.1) |
| 🌟 双核综合引擎 (Combined Engine) |
双核同时运行 / 实盘仿真回测 左侧 + 右侧信号一起抓,用于全历史实战回测与多策略综合调度 |
get_strategy_signal(StrategyEngine.COMBINED, df)run_strategy_engine_simulation() |
第 1 章 (1.1, 1.4) |
| 📊 截面板块轮动 (Sector Rotation) |
多标的资产配置与强弱轮动 以沪深300为基准,计算 RS 相对强弱与 4 象限分布 (领涨/复苏/衰退/滞后) |
SectorRotationEnginerun_sector_rotation_backtest() |
第 6 章 (6.4~6.7) |
| 🗽 美股专属量化双核 (US Quantitative System) |
美股自适应超级趋势与截面双动量 宏观 SPY SMA200/10月动量体制判别、KAMA 吊灯超级趋势、截面行业轮动、0-10 分 5 大态机会雷达(支持统一门面 timeframe="D"/"W") |
run_us_strategy()compute_us_rotation()analyze_us_radar() |
第 7 章 (7.1~7.5) |
| 🌏 跨境溢价共振 (Overseas Premium) |
跨境 QDII ETF 溢价风控与套利 盘后时差对齐 (国内T日锚定美股T-1日),60日比价偏离度 Z-Score 门禁 + 美股周线强趋势共振 + 全池机会雷达 |
evaluate_overseas_opportunity_item()analyze_overseas_radar()run_overseas_premium_strategy() |
第 8 章 (8.1~8.5) |
| 🛡️ 交易撮合与执行生命周期 (Execution Matcher) |
A 股实盘仿真与未成交追踪 开盘一字涨跌停拦截、停牌检测、滑点佣金仿真、未成交信号生命周期归档与成交率统计 |
ExecutionMatchercompute_execution_summary()get_a_share_price_limit_ratio() |
第 9 章 (9.1~9.3) |
目录索引 (Table of Contents)
- 全域机会雷达综合引擎 (Combined Opportunity Radar)
- 网格交易与组合资产顾问 (
grid&grid_advisor) - 技术形态扫描与预筛选管道 (
pre_screen_and_scan) - 市场状态机与多周期趋势评估
- 市场环境与辅助分析工具
- 均值回归与板块轮动引擎 (
mean_reversion§or_rotation)- 6.1 A 股周线均值回归与三阶段跟踪 (
get_mean_reversion_signal/MeanReversionSignal) - 6.2 TA-Lib 底部反转形态扫描与权重 (
scan_talib_patterns) - 6.3 均值回归事件驱动回测 (
run_mean_reversion_simulation) - 6.4 全池截面轮动评估与纯趋势研判 (
evaluate_universe) - 6.5 四象限坐标体系与动能研判逻辑
- 6.6 截面状态指标 (
SectorMetric/RotationQuadrant) - 6.7 截面组合历史回测 (
run_sector_rotation_backtest)
- 6.1 A 股周线均值回归与三阶段跟踪 (
- 美股专属量化系统与机会雷达 (
us_macro/us_strategy/us_opportunity_radar) - 跨境 QDII ETF 溢价套利与趋势共振引擎 (
overseas_premium)- 8.1 底层资产映射与盘后时差对齐 (
OVERSEAS_UNDERLYING_MAP/align_cn_us_series) - 8.2 60日相对比价偏离度计算 (
calculate_premium_zscore) - 8.3 单标的实时机会与信号评估 (
evaluate_overseas_opportunity_item/get_overseas_premium_signal) - 8.4 跨境全池机会雷达批量扫描 (
analyze_overseas_radar/OverseasRadarSummary) - 8.5 双核共振策略回测与绩效寻优 (
run_overseas_premium_strategy)
- 8.1 底层资产映射与盘后时差对齐 (
- 实盘撮合与信号全生命周期追踪 (
execution)
1. 全域机会雷达综合引擎 (Combined Opportunity Radar)
全域机会雷达综合引擎 (Combined Radar) 采用“交易执行双核 (Dual Cores) + 选品形态雷达 (Pattern Radar) + 截面板块轮动 (Sector Rotation)”分层架构。
它将复杂的形态发现、宏观截面与严谨的量化执行解耦:
- 📊 经典形态雷达层 (Pattern Radar):负责 10+ 经典几何形态(头肩底、双底、杯柄、三角形突破)识别、0-10 综合技术评分与自媒体图文可视化;
- ⚡ 左侧均值回归核 (Left-Side Core - Engine 2 / Mean Reversion):周线布林超跌 + TA-Lib K 线底部形态 + 三阶段跟踪止盈 (Stage 1/2/3) + 熊市止损冷却与假摔快速重入保护;
- 🧭 右侧趋势突破核 (Right-Side Core - Engine 1 / Trend Breakout):右侧放量突破结构 + EMA20 回踩确认 + EMA53 防守跟踪主升浪;
- 🌐 截面板块轮动与全天候自适应:四象限相对强度软打分赋能雷达;同时独立提供 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 统一策略枚举与事件契约
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 日收盘后的执行决策:
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)
一站式计算形态扫描、状态机、多引擎信号、截面板块轮动属性与防追高过滤:
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) 以及多栏目去重归类,可直接作为自媒体每日内容生产工具与选品大漏斗:
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 标准调用接口:
# 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
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
一站式评估标的是否符合开启网格的严苛风控标准(包含趋势形态过滤、区间位置与收益率下限):
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
基于“收盘确认、次日开盘成交”原则的轻量事件驱动回测引擎:
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)下的组合网格交易与资金统筹调度:
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。
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 上下文数据包全字段解析
{
"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
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)合并为全局唯一的单一主状态,并输出标准化的筑底观察阶段、右侧交易计划与风控防守线:
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
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
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 分),不参与日线预筛选总分合成:
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 表格与报告:
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 大温区操作总方针:
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 |
🌋 极度过热区 | 最高级别风控预警:中线面临均值回归压力,严禁追高,右侧破位坚决止盈! |
核心机制与量化解读要点:
- 高温度与极度过热($\ge 85.0$)是“逆向风控预警”,绝非追高做多信号:
- 情绪温度计衡量的是全市场的拥挤度与透支程度。实证显示,处于
OVERHEAT时未来一季度的平均收益极低(+1.22%)、胜率不足 46%,面临强烈的均值回归回撤压力。
- 情绪温度计衡量的是全市场的拥挤度与透支程度。实证显示,处于
- 大盘缩量时温度为何依然可能走高(量价背离与虚热机制):
- 量能因子如实归零:缩量时,
turnover(量能因子,权重 20%)单项分会跌至接近 0 分,如实反映增量资金枯竭; - 价格因子绝对主导:若全市场普涨(广度 F1 占 35%)、动量向上(动量 F2 占 25%)且持仓均处于近期高位无套牢盘(位置 F5 占 20%),合占 80% 权重的价格因子会合力拉高初始加权分;
- 二次分位数拉伸:在历史 1 年参照系下,加权分排在前 5% 以内,直接触发 90+ 度的
OVERHEAT警报; - 实战意义:缩量上涨反映的是“筹码锁仓、下方无买盘承接”的脆弱形态(空中楼阁)。系统打出极高温度,正是精确量化出这种“量价背离的极端脆弱性”,提示必须启动防守减仓。
- 量能因子如实归零:缩量时,
- 温度方向(
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
from tradingpatterns import calculate_support_resistance
sr_df = calculate_support_resistance(df, window=3)
current_support = sr_df["support"].dropna().iloc[-1]
5.3 组合风险平权与相关性去重
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 核心)。采用“周线定大方向环境,日线形态/动量抓精准买点,三阶段移动止盈让利润奔跑”的设计:
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}")
核心机制与三阶段动态跟踪止盈:
- 周线超跌门禁:周线触及布林下轨 (BBANDS 20, 2.0)、周线 RSI(14) $\le 38$、周线 CCI(14) $\le -90$ 多重共振。
- 日线精准触发:
- 组合 A: TA-Lib 底部 K 线反转形态加权分 $\ge 0.8$ 且日 RSI $< 48$;
- 组合 B: 日 RSI $< 35$ 拐头回升且 KD 低位金叉;
- 组合 C: 资金流向 MFI $< 25$ 回升且收实体真阳线;
- 周线 MACD 底背离(额外提供强信号加权)。
- 三阶段跟踪止盈 (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 动态跟踪止盈,全程护航大牛浪。
- 风控保护机制:
- 单边熊市止损冷却 (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 底部反转形态的向量化扫描与置信度权重评分:
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)
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 日动能斜率。
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 斜率向下 (资金持续抽离 / 走弱)
纯趋势研判实操准则:
- 🚀 寻找主线主升浪 (LEADING):处于领跑区,相对大盘走强且动能加速,代表当前全市场最确定的强势主线。
- 🌱 捕捉低位反转潜伏 (RECOVERING):处于超跌复苏区,虽然过去 60 天表现弱于大盘,但 10 日回归斜率已向上拐头,通常对应主力左侧建仓的超跌修复期。
- 🍂 识别高位出货风险 (WEAKENING):虽然过去强势(RS 高位),但动能斜率已掉头向下,表明资金开始分歧流出,警惕补跌风险。
- ❄️ 规避弱势下行深坑 (LAGGING):低位且动能继续下行,资金持续抽离,坚决规避。
6.6 截面状态指标 (SectorMetric / RotationQuadrant / QUADRANT_META)
evaluate_universe 返回的 List[SectorMetric] 包含完整的量化截面指标与标准化象限元数据:
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)
将上述横截面评估能力放入时间轴,自动撮合多标的换仓,生成宏观资产组合的回测报告。
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)
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)
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)
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' 周线):
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 对美股全池或自定义标的进行批量回测与最新雷达扫描:
# 全池或多标的批量策略回测
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 常见的两大核心痛点:
- 防范高位溢价泡沫接盘:美股走牛或国内情绪过热时,国内 QDII ETF 溢价率经常飙升至 10%~20%。引擎通过**“盘后相对比价偏离度 (Z-Score)”**进行硬性阻断,并在溢价泡沫破裂时提前止盈;
- 美股超级趋势与周线强共振:仅在美股底层资产(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 底层资产映射与盘后时差对齐
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)}$$
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 进行实时机会发现与风控决策(例如次日是否开仓、是否被高溢价阻断、是否需要止盈止损):
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 进行批量扫描与分类归档,可直接作为每日跨境机会复盘看板与自动化监控工具:
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)
对特定标的或全池进行事件驱动历史回测,检验趋势共振与溢价风控的综合实战收益:
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:
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)
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)
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']}")
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tp_quant-1.2.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl.
File metadata
- Download URL: tp_quant-1.2.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl
- Upload date:
- Size: 21.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
018959e6c0b339b4b16612fcd959e04b2c457d0674ec5a555cee81ee710d0604
|
|
| MD5 |
84ab8bdff740d02421477bf8f2ae808c
|
|
| BLAKE2b-256 |
e5c819a635fd50b9395a6feb848c94e55bf91347b69d24c6b2e2059c652aa11c
|
File details
Details for the file tp_quant-1.2.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl.
File metadata
- Download URL: tp_quant-1.2.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl
- Upload date:
- Size: 20.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2db3a30a95c7a9cfbd88068605108f28c6587dde40c7babcb76b0972bbb1c450
|
|
| MD5 |
93ee9981d49e2ec4f82e52ba3268f98f
|
|
| BLAKE2b-256 |
5543847622bccb2e0687607a482e0dbebe5190bb6df9ede1d3e5a775828e1401
|
File details
Details for the file tp_quant-1.2.5-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: tp_quant-1.2.5-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 3.0 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c9db83b7fad4b4e3be3c9a730ed21967e13c69d47267b2556134b5de95e3e63
|
|
| MD5 |
8e896bb4dd71f5c7918118bd25de46fb
|
|
| BLAKE2b-256 |
44167aea84375cafdf45dd15832558bf733551fdac08ebc362554b580fbb52a9
|