- 金融科技
- 示例工程
【免费下载链接】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++部署及聚宽代码。
导读
本文围绕 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_length | 10 | Swing 高低点检测窗口,值越大检测到的结构越少但越可靠 |
close_break | True | BOS/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 requests7.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++部署及聚宽代码。
相关推荐
ai_quant_trade 艾略特波浪理论信号引擎实战指南:基于 Zigzag 与 Fibonacci 的 5-3 浪结构识别
ai_quant_trade 艾略特波浪理论信号引擎实战指南:基于 Zigzag 与 Fibonacci 的 5 3 浪结构识别 导读 本文围绕 ai_quan
金融科技示例工程ESLint规则趋势分析:识别团队代码质量的变化趋势
ESLint规则趋势分析:识别团队代码质量的变化趋势 引言:为什么需要关注ESLint规则趋势? 在当今快节奏的软件开发环境中,代码质量监控已成为团队成功的关键
开发工具Lint静态分析代码质量缠论一买一卖实战指南:背驰识别、czsc 信号函数与缠论信号引擎落地
缠论一买一卖实战指南:背驰识别、czsc 信号函数与缠论信号引擎落地 导读 :本文基于本仓库缠论(chanlun)Skill 包中的 一买一卖信号文档 http
金融科技示例工程
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考