Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
13 KiB
AI ICT Sweep 识别规格书 v1
1. 文档目标
本文档定义 AI ICT 项目第一阶段 MVP 的 sweep identification 规则,用于指导:
sweep_events识别模块开发- liquidity pool 与 sweep 的交互判定
- wick / close 行为判断
- displacement、MSS、signal 等下游模块引用
- 本地验证、抽样复盘与后续回测
本文档只覆盖 sweep 的识别与状态维护,不覆盖 displacement、MSS、FVG 的完整规则实现。
关联文档:
AI_ICT_MVP_规则规格书_v1.mdAI_ICT_PostgreSQL_Schema_v1.mdAI_ICT_开发路线图_v1.mdAI_ICT_执行检查清单_v1.mdAI_ICT_Dealing_Range_Spec_v1.md
2. 设计目标
sweep 模块需要满足以下目标:
- 只围绕结构化 liquidity pool 识别,不做自由解释
- 能区分 wick-only 刺穿与 close-back-inside 的行为差异
- 能对 sweep 做分层验证,而不是一刀切二元判断
- 能与后续 displacement 事件建立明确链接
- 能维护 sweep 的状态流转,避免同一 pool 被重复误判
- 输出结构化、可回测、可审计
3. 核心定义
3.1 Liquidity Pool
sweep 的前提是存在已识别的 liquidity pool。
第一版 pool 来源:
prior_highprior_lowequal_highsequal_lowssession_highsession_low
每个 pool 至少有:
sideprice_lowprice_highstatustimeframe
3.2 Sweep
sweep 是价格对某一侧 liquidity pool 的刺穿与清理行为。
第一版中,sweep 必须满足:
- 有明确目标 pool
- 价格对 pool 发生有效交互
- 交互后能够输出结构化结果
3.3 Side Swept
sweep.side_swept 表示被清理的是哪一侧流动性:
buy_side:上方流动性被清理,通常对应扫高sell_side:下方流动性被清理,通常对应扫低
3.4 Wick Sweep
价格仅用 wick 刺穿 pool 区间,但收盘没有稳定站在区间外,可记为 wick sweep 候选。
3.5 Close Back Inside
价格刺穿 pool 后,最终收盘重新回到 pool 内侧或原结构区间内,记为 close_back_inside = true。
这通常是第一版更优先关注的 sweep 形态。
4. pool 交互规则
4.1 sweep 必须依赖 pool
第一版不允许没有 pool 就直接定义 sweep。
即:
- 先有
liquidity_pools - 再判断 candles 是否与 pool 发生 sweep 交互
4.2 交互方向
扫 buy-side liquidity
若目标 pool 的 side = buy_side,则价格必须向上刺穿 pool:
high触及或突破pool.price_low- 并进一步进入或突破
pool.price_high
扫 sell-side liquidity
若目标 pool 的 side = sell_side,则价格必须向下刺穿 pool:
low触及或跌破pool.price_high- 并进一步进入或跌破
pool.price_low
4.3 第一版触发判定
为了兼容区间型 pool,第一版将“发生交互”定义为:
对 buy_side pool
候选 candle 满足:
high >= pool.price_low- 且至少有一部分价格行为进入或突破
pool.price_high
对 sell_side pool
候选 candle 满足:
low <= pool.price_high- 且至少有一部分价格行为进入或突破
pool.price_low
更简化地说:
- 上方池要被“扫进去/扫过去”
- 下方池要被“打进去/打过去”
4.4 pool 优先级
若同一 candle 同时与多个 pool 交互,第一版建议按如下优先级选择主 sweep 对象:
- 时间更近的 pool
- timeframe 更接近当前规则处理周期的 pool
equal_highs / equal_lows优先于普通prior_high / prior_low- session pool 在 session 相关策略中可优先
- 若仍冲突,取离当前价格更近者
MVP 最小实现建议:
- 一根 candle 只认一个主 pool
- 其余命中记录到
meta.candidate_pool_ids
5. wick / close 行为规则
5.1 wick 刺穿
候选 candle 只要 wick 进入或越过目标 pool,即可形成 sweep 候选。
例如:
- 扫 buy-side:
high突破 pool 上沿 - 扫 sell-side:
low跌破 pool 下沿
5.2 close_back_inside
第一版更强的 sweep 条件是 close_back_inside = true。
对 buy_side pool
候选 candle 扫高后,收盘重新回到 pool 下方或回到结构内部,记为 close back inside。
对 sell_side pool
候选 candle 扫低后,收盘重新回到 pool 上方或回到结构内部,记为 close back inside。
5.3 close-outside 的处理
若价格刺穿 pool 后收盘仍留在外部:
- 可视为已发生 liquidity interaction
- 但第一版不优先定义为高质量 sweep
- 更可能属于延续突破,而不是清扫后回收
因此:
- wick sweep + close outside = 弱候选
- wick sweep + close back inside = 更强候选
5.4 多根 K 线确认
第一版 sweep 的发生时点以首根有效交互 candle 为准,不要求等待多根 K 线才能记录 sweep event。
但后续验证等级可以引用后续 1~N 根 candle 的行为。
6. 验证分层
6.1 设计原则
第一版不把所有 sweep 都视为同质量信号,而是分层:
- L1:弱 sweep
- L2:有效 sweep
- L3:强 sweep
6.2 L1 弱 sweep
满足:
- 与 pool 有明确 wick 交互
- 但未出现 close back inside
- 或缺少后续 displacement 支持
用途:
- 可记录
- 默认不直接作为入场依据
6.3 L2 有效 sweep
满足:
- 与 pool 发生明确刺穿
close_back_inside = true- pool 原始状态为
untouched - 没有明显数据缺口或结构冲突
用途:
- 可进入后续 displacement / MSS 观察链路
6.4 L3 强 sweep
满足:
- 已满足 L2
- 在限定窗口内出现有效 displacement
- displacement 方向与 sweep 后预期反应一致
- 可形成后续 MSS / FVG 链路候选
用途:
- 可作为
SWEEP_MSS_FVG模型的高质量前置条件
6.5 第一版最小实现建议
若系统复杂度有限,可先实现:
weakvalid
两层,然后把强 sweep 通过 displacement_after = true 额外标记。
7. displacement linkage 规则
7.1 sweep 与 displacement 的关系
sweep 本身只表示流动性被清理;是否具有更高质量,要看后续是否出现 displacement。
7.2 方向一致性
扫 buy-side 之后
若 sweep 清理的是上方 buy-side liquidity,则高质量后续反应通常是向下 displacement。
扫 sell-side 之后
若 sweep 清理的是下方 sell-side liquidity,则高质量后续反应通常是向上 displacement。
7.3 displacement 窗口
第一版建议在 sweep 之后的有限窗口内寻找 displacement:
- M1 / M5:后续 3~5 根 candle
- M15 / H1:后续 2~4 根 candle
- H4 及以上:后续 1~3 根 candle
若窗口内没有有效 displacement:
- sweep 仍可保留
- 但验证等级不升为强 sweep
7.4 链接方式
若 sweep 已匹配 displacement,则建议记录:
displacement_after = truemeta.displacement_event_idmeta.displacement_delay_bars
若未来正式建 sweep_events 表,也建议保留显式 displacement_event_id 字段。
8. 状态流转规则
8.1 pool 状态
pool 原始状态:
untouchedsweptconsumed
8.2 sweep 对 pool 的影响
第一版建议:
- 识别到有效 sweep 后,目标 pool 更新为
swept - 若后续结构继续完全消耗该区域,可进一步更新为
consumed
8.3 sweep 自身状态建议
若使用独立 sweep_events 存储,建议状态:
candidateweakvalidconfirmedinvalidatedarchived
含义
candidate:仅发生初步 pool interactionweak:发生 wick sweep,但不够强valid:close back inside 成立confirmed:已获得 displacement 或后续链路确认invalidated:后续价格行为证明该 sweep 不再有参考意义archived:历史保留
8.4 最小状态机
MVP 第一版若要降复杂度,至少支持:
weakvalidconfirmed
并允许:
weak -> valid -> confirmed
weak -> invalidated
valid -> invalidated
confirmed -> archived
8.5 防重规则
同一 pool 在未重置前,不应被重复生成多条同向主 sweep 事件。
第一版建议:
- 同一
pool_id + direction_window只保留一条主 sweep - 若后续出现更高质量版本,可更新状态或新增更高版本并归档旧记录
9. 边界与异常情况
9.1 只触及不刺穿
若价格只触碰 pool 边缘但没有进入区间,不记 sweep。
9.2 同时扫上下两侧
极端大波动 candle 可能同时扫到上下两侧 pool。
第一版处理:
- 不在同一根 candle 上同时生成两个主 sweep
- 标记为冲突场景
meta.conflict = 'dual_side_sweep'- 默认不作为高质量 sweep
9.3 已被 swept 的 pool
若 pool 已是 swept 状态,第一版默认不重复生成新的主 sweep。
除非:
- 明确发生新一轮结构重置
- 或 pool 被重新生成了新 id
9.4 数据缺口
若 sweep 发生窗口存在明显缺失 candle:
- 可记录 candidate
- 但不升级为高质量 sweep
meta.data_gap = true
9.5 假突破与延续突破
若刺穿后持续单边离开 pool,且没有 close back inside:
- 更偏向 breakout / continuation
- 仍可记为弱 interaction
- 默认不视为有效 sweep
9.6 多个 timeframe 冲突
若低周期识别 sweep,但高周期叙事不支持:
- sweep 事件本身仍可记录
- 是否进入 signal 链路交给 bias / structure 层过滤
10. 存储模型
10.1 MVP 第一版建议
虽然当前 schema 文档未正式定义 sweep_events 表,但 sweep 属于核心信号层,建议新增独立存储模型,而不是只塞进 JSON。
建议新增 sweep_events 表,至少包含:
instrument_idtimeframepool_idside_sweptsweep_highsweep_lowclose_back_insidevalidation_tierstatustsmetacreated_atupdated_at
10.2 字段语义
pool_id:被扫 liquidity poolside_swept:buy_side / sell_sidesweep_high:本次 sweep 涉及的最高价格sweep_low:本次 sweep 涉及的最低价格close_back_inside:是否收回结构内部validation_tier:weak / valid / strongstatus:事件当前状态ts:首个成立 sweep 的 candle 时间
10.3 meta 建议内容
适合放入 meta:
candidate_pool_idspool_typeclose_outsidedisplacement_event_iddisplacement_delay_barsdata_gapconflictselection_reasonrecalc_batch_id
不应只放在 meta:
pool_idside_sweptclose_back_insidevalidation_tierstatusts
10.4 若暂不建独立表
若第一版暂时不能新增 sweep_events 表,可临时把 sweep 结果写入:
trade_signals.evidence- 或规则引擎中间结果存储
但这只应作为过渡方案,不应作为长期主方案。
11. 处理流程建议
11.1 基础识别流程
- 读取当前 timeframe 的 active liquidity pools
- 检查新 candle 是否与某个 pool 发生交互
- 判断是否进入/突破 pool 区间
- 记录 wick 行为与 close 行为
- 生成 candidate / weak / valid sweep
- 在后续窗口中检查 displacement
- 更新 validation tier 与 status
- 同步更新目标 pool 状态
11.2 最小 MVP 实现
建议先做:
- pool interaction 判定
- wick 与 close back inside 判定
- weak / valid 两层验证
- displacement_after 标记
- pool 状态从 untouched 到 swept 的更新
再增强:
- 独立
sweep_events表 - 更完整状态机
- 多 pool 冲突管理
- 与 MSS / FVG 的强绑定引用
12. 验证检查点
12.1 功能验证
- 能从已有 liquidity pool 中识别 sweep
- 同一批输入重复运行结果一致
- wick 行为与 close 行为能正确区分
- displacement linkage 可正确标记
12.2 规则验证
- 没有 pool 不会生成正式 sweep
- 只触碰不进入 pool 区间不会误判为 sweep
- close back inside 成立时会升级验证等级
- close outside 默认不会误判为高质量 sweep
- pool 已 swept 时不会重复生成主 sweep
12.3 状态验证
- sweep 生成后 pool 状态可更新为
swept - 高质量 sweep 可升级为 confirmed
- 无效后续行为可把 sweep 标记为 invalidated
- 历史 sweep 可归档但不丢失
12.4 存储验证
pool_id能正确关联 liquidity poolside_swept与 pool.side 逻辑一致validation_tier与status可正确查询meta能记录 displacement 和异常信息
12.5 人工抽样验证
每个核心 timeframe 至少抽查:
- 1 个扫 buy-side 的有效样例
- 1 个扫 sell-side 的有效样例
- 1 个 wick-only 弱 sweep 样例
- 1 个 close back inside 的有效 sweep 样例
- 1 个后续带 displacement 的强样例
- 1 个假突破但非有效 sweep 的反例
12.6 与路线图对齐的完成标准
满足以下条件才算完成:
- 能识别流动性刺穿
- 能识别 close back inside
- 能区分弱 sweep 与有效 sweep
- 可作为 displacement / MSS / signal 的上游输入
13. MVP 范围内不做的事
第一版暂不包含:
- 基于订单流或逐笔成交的微观 sweep 识别
- AI 自由叙事判定 sweep
- 多市场 SMT 联动 sweep 作为核心条件
- 同一事件跨多个 timeframe 自动合并
- 复杂置信度模型打分
14. 推荐的最小实现顺序
- 先实现 pool interaction
- 再实现 wick / close back inside 判定
- 再实现 weak / valid 分层
- 再实现 displacement_after 标记
- 最后补 sweep 独立存储与完整状态机
这样可以先满足阶段 3 的最小可用目标,再逐步增强。