news 2026/10/8 7:46:57

结构突破 BOS 与性质转变 ChoCH:Smart Money Concepts 趋势识别信号引擎实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
结构突破 BOS 与性质转变 ChoCH:Smart Money Concepts 趋势识别信号引擎实战指南
  • 金融科技
  • 示例工程

【免费下载链接】ai_quant_trade

Stock AI Trader: 1-stop platform for learning, sim & live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C++ deploy & JoinQuant code. 股票AI操盘手:一站式学习、模拟、实盘平台。涵盖:股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C++部署及聚宽代码。

项目地址:https://gitcode.com/gh_mirrors/ai/ai_quant_trade
点击查看免费下载

导读

本文围绕 AI 量化交易仓库ai_quant_trade中 Smart Money Concepts(SMC / ICT 机构交易学派)技能包的核心概念——结构突破(BOS)与性质转变(ChoCH)——展开,结合 smc/SKILL.md 的引擎设计与 example_signal_engine.py 的源码实现,讲解如何用 BOS 确认趋势延续、用 ChoCH 捕捉趋势反转,并以 FVG(公允价值缺口)过滤假信号,最终构建可运行的"做多 / 做空 / 观望"三态信号引擎。读完本文,你将掌握 SMC 结构分析的完整概念体系、信号权重逻辑,以及基于smartmoneyconcepts库落地多标的信号引擎的具体方法。

一、SMC 的核心思想:追踪机构资金的足迹

Smart Money Concepts(ICT,即 Inner Circle Trader 机构交易学派)的核心逻辑是追踪"聪明钱"(机构资金)在 K 线上的行为痕迹。机构大额订单无法一次性成交,必然在价格图表上留下可识别的结构特征。在 smc/SKILL.md 中,这套体系被归纳为五个关键概念:

概念英文含义
结构突破BOS(Break of Structure)趋势延续信号
性质转变ChoCH(Change of Character)趋势反转信号
公允价值缺口FVG(Fair Value Gap)价格回补目标
订单块Order Blocks机构订单集中区
流动性Liquidity止损猎取目标区

本文的结构突破.md聚焦前两个概念(BOS 与 ChoCH),并说明它们与 FVG 过滤如何组合成信号;订单块的详细定义见同目录下的订单块与缺口.md。

二、BOS(Break of Structure):结构突破确认趋势延续

结构突破是市场趋势延续的信号,其判定基于 swing 高点与 swing 低点(结构点)的突破:

  • 看涨 BOS:价格突破前一个 swing 高点,确认上涨趋势延续。这意味着买盘力量延续,前一个上涨结构被确认有效,价格大概率继续向上。
  • 看跌 BOS:价格跌破前一个 swing 低点,确认下跌趋势延续。这意味着卖盘力量延续,前一个下跌结构被确认有效,价格大概率继续向下。

BOS 表明当前趋势方向仍然有效,机构资金仍在同一方向运作。它不是反转信号,而是"趋势没坏、可以继续顺势"的确认。在实战中,BOS 常被用来在趋势中加仓或作为顺势交易的入场确认,而非抄底摸顶的依据。

三、ChoCH(Change of Character):性质转变预警趋势反转

性质转变是趋势可能反转的信号,其判定同样基于 swing 结构点的突破,但方向与当前趋势相反:

  • 看涨 ChoCH:在下跌趋势中,价格突破前一个 swing 高点。下跌趋势中出现向上的结构突破,说明卖压衰竭、买盘开始接管,行情性质可能由空转多。
  • 看跌 ChoCH:在上涨趋势中,价格跌破前一个 swing 低点。上涨趋势中出现向下的结构突破,说明买盘衰竭、卖盘开始接管,行情性质可能由多转空。

ChoCH 是比 BOS 更强的信号,因为它表示市场结构发生了根本性变化——不是趋势的延续,而是趋势可能反转。SMC 交易者通常把 ChoCH 视为"方向盘改变"的第一确认,后续再结合价格行为、订单块回测等进一步确认反转成立。

四、信号权重:ChoCH 定方向,BOS 做确认,FVG 做过滤

在本项目的信号引擎中,三种信号的权重与分工非常明确(见结构突破.md):

  • ChoCH 信号权重最高:它是趋势反转的方向触发器,直接决定当前偏向做多还是做空;
  • BOS 信号用于确认:作为趋势延续信号,补充和确认 ChoCH 给出的方向,让信号在无反转迹象时也能顺势推进;
  • 两者结合 FVG 过滤,减少假信号:FVG(公允价值缺口)代表买卖力量的极度不平衡,作为过滤器使用时,要求结构信号与 FVG 方向一致,从而滤掉缺乏力量支撑的突破。

这一逻辑在 example_signal_engine.py 的信号约定中表述为:

  • Long:看涨 ChoCH/BOS + 存在看涨 FVG;
  • Short:看跌 ChoCH/BOS + 存在看跌 FVG;
  • Stand aside:没有结构信号或方向互相冲突。

五、信号引擎源码解析:从 swing 检测到三态信号

example_signal_engine.py 给出了完整的可运行实现,其核心是SignalEngine类。整个信号生成流程分为三个步骤,分别对应smartmoneyconcepts库的三个底层函数:

# 1) Swing 高低点检测 swing_hl = smc.swing_highs_lows(ohlc, swing_length=self.swing_length) # 2) BOS / ChoCH 结构突破检测 bos_choch = smc.bos_choch( ohlc, swing_highs_lows=swing_hl, close_break=self.close_break ) # 3) FVG 公允价值缺口检测 fvg = smc.fvg(ohlc)

5.1 第一步:Swing 高低点检测

smc.swing_highs_lows(ohlc, swing_length)以swing_length为窗口,识别局部 swing 高点和 swing 低点——这些结构点就是判定 BOS / ChoCH 的"前一个高点 / 前一个低点"来源。窗口越大,检测出的结构点越少但越可靠;窗口越小,结构点越多、信号越频繁。

5.2 第二步:BOS / ChoCH 检测

smc.bos_choch(ohlc, swing_highs_lows, close_break)基于 swing 结构点计算结构突破:

  • BOS列:+1 为看涨结构突破,-1 为看跌结构突破;
  • CHOCH列:+1 为看涨性质转变,-1 为看跌性质转变。

close_break参数决定判定方式:为True时要求收盘价突破结构点才算有效(更严格、假信号更少);为False时盘中价格突破即算有效(更灵敏、但更易被插针骗线)。

5.3 第三步:FVG 检测与信号合成

smc.fvg(ohlc)返回 FVG 列,+1 为看涨缺口(第三根 K 线低点 > 第一根 K 线高点),-1 为看跌缺口(第三根 K 线高点 < 第一根 K 线低点)。随后在_compute_signal中完成信号合成:

# 结构信号:ChoCH 优先,BOS 补充 structure = choch_val.where(choch_val != 0, bos_val) # FVG 过滤:只在 FVG 同向或中性时出信号 buy = (structure == 1) & (fvg_val >= 0) sell = (structure == -1) & (fvg_val <= 0) raw_signal = buy.astype(int) - sell.astype(int)

这里的关键实现细节是:

  • ChoCH 优先:choch_val.where(choch_val != 0, bos_val)表示有 ChoCH 的位置用 ChoCH 方向,没有 ChoCH 的位置才用 BOS 方向,与"ChoCH 权重最高"的设计一致;
  • FVG 同向过滤:做多要求结构为 +1 且 FVG 不为 -1(fvg_val >= 0),做空要求结构为 -1 且 FVG 不为 +1(fvg_val <= 0),即 FVG 反向时直接放弃信号;
  • 三态输出:最终信号 Series 中1= 做多,-1= 做空,0= 观望(见 smc/SKILL.md 的信号约定)。

5.4 数据校验与异常保护

SignalEngine.generate对每个标的执行了防御性处理:要求 K 线数量不少于swing_length * 2,否则跳过该标的并保留全 0 信号;单个标的计算抛异常时不会中断整个数据地图的遍历(源码 example_signal_engine.py)。这意味着该引擎可以直接用于批量多标的扫描场景。

六、引擎参数速查

SignalEngine的参数定义与默认值如下(与 smc/SKILL.md 的参数表一致):

参数默认值说明
swing_length10Swing 高低点检测窗口,值越大检测到的结构越少但越可靠
close_breakTrueBOS/ChoCH 是否要求收盘价突破确认

使用示例(源码 Docstring 中的用法):

>>> engine = SignalEngine(swing_length=50) >>> signals = engine.generate({"BTC-USDT": df}) >>> print(signals["BTC-USDT"].value_counts())

调大swing_length会减少结构点数量,适合过滤震荡市噪音、只捕捉大级别结构变化;在短周期或小级别交易中可适当调小。

七、环境依赖与端到端运行

7.1 安装依赖

该技能包基于smartmoneyconcepts库实现(见 smc/SKILL.md 的 Dependencies 一节):

pip install smartmoneyconcepts pandas numpy requests

7.2 数据来源:OKX 公共行情接口

example_signal_engine.py中的_fetch_okx函数从 OKX 公共 API 拉取日线 K 线:

resp = requests.get( "https://www.okx.com/api/v5/market/candles", params={"instId": inst_id, "bar": bar, "limit": str(limit)}, )

返回的 DataFrame 被标准化为包含open/high/low/close/volume列、以datetime为索引的格式,这也是smc.swing_highs_lows/smc.bos_choch/smc.fvg所要求的输入结构。注意该函数返回的 K 线为reversed(candles)时间正序排列。

7.3 直接运行端到端测试

以脚本方式运行即可完成一次多标的(BTC-USDT、ETH-USDT、SOL-USDT)的端到端信号统计:

python example_signal_engine.py

脚本会依次输出:每个标的拉取到的 K 线数量、做多信号个数、做空信号个数、最近一次做多/做空的日期(源码 example_signal_engine.py)。另外,脚本在 Windows 上会强制设置 UTF-8 输出编码,因为smartmoneyconcepts导入时会打印 emoji,避免中文环境控制台乱码。

八、使用前提与限制

  • 本引擎的信号建立在"结构点 + 收盘价突破"之上,属于事后确认型信号:BOS/ChoCH 确认时价格已越过前高/前低,天然存在一定的滞后性,实际入场需要配合价格行为(如订单块回测、流动性猎取)进一步择时;
  • close_break=True时信号更少但更可靠,close_break=False时更灵敏但插针行情下假信号增多,需结合品种波动特性选择;
  • 引擎本身只输出信号方向(1 / -1 / 0),不包含仓位管理、止损止盈与风控,落地到实盘前需在其上层叠加资金管理和风险控制模块;
  • FVG 过滤的保守实现(反向 FVG 直接放弃信号)会降低交易频率,属于"少做、做对"型设计,高频场景下可按需放宽。

九、相关资源导航

  • 概念文档:结构突破.md(BOS / ChoCH 定义与信号权重)、订单块与缺口.md(FVG 与订单块定义)
  • 引擎说明与参数:smc/SKILL.md
  • 可运行实现:example_signal_engine.py
  • 同体系其他技能包:同目录下的vibe_trading_skills还包含 ichimoku、okx-market、tushare 等交易分析技能,可在仓库中按需参考。
  • 金融科技
  • 示例工程

【免费下载链接】ai_quant_trade

Stock AI Trader: 1-stop platform for learning, sim & live trading. Covers: stock basics, strategies, LLMs, factor mining, ML/DL/RL, graph nets, HFT, C++ deploy & JoinQuant code. 股票AI操盘手:一站式学习、模拟、实盘平台。涵盖:股票基础、策略、大模型、因子挖掘、机器学习/深度学习/强化学习、图网络、高频交易、C++部署及聚宽代码。

项目地址:https://gitcode.com/gh_mirrors/ai/ai_quant_trade
点击查看免费下载

相关推荐

上一篇:River完整配置指南:从基础键绑定到高级定制
下一篇:解决MetaMask登录难题:login-with-metamask常见问题与解决方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 7:46:34

Meson Qt4 模块实战指南:moc/uic/rcc 工具链集成与 Qt4 项目构建配置

构建工具 【免费下载链接】meson The Meson Build System 项目地址&#xff1a; https://gitcode.com/gh_mirrors/me/meson 点击查看 免费下载 本文面向仍在维护 Qt4 遗留代码库、或需要理解 Meson Qt 模块统一抽象机制的开发者&#xff0c;系统讲解 Meson 中 qt4 模块的加载方…

作者头像 李华
网站建设 2026/10/8 7:45:34

题解:洛谷 P1075 [NOIP 2012 普及组] 质因数分解

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

作者头像 李华
网站建设 2026/10/8 7:45:28

题解:洛谷 P1116 车厢重组

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

作者头像 李华
网站建设 2026/10/8 7:45:07

三国杀更新版本

#include<iostream> #include<cstdlib> #include<stdio.h> #include<time.h> using namespace std; int main(){srand(time(NULL));string b[8]{"杀","杀","杀","杀","杀","闪","闪…

作者头像 李华