Agent Skills › Veblin/invest-skills › invest-a-gap-scan

invest-a-gap-scan

GitHub

扫描沪深300等成分股,筛选近60日出现向上跳空缺口、未跌破MA60且未回补的标的。输出观察清单而非交易信号,用于量化形态研究与进一步分析。

skills/invest-a-gap-scan/SKILL.md Veblin/invest-skills

Trigger Scenarios

用户要求扫描跳空缺口 用户提及缺口或跳空扫描

Install

npx skills add Veblin/invest-skills --skill invest-a-gap-scan -g -y
More Options

Use without installing

npx skills use Veblin/invest-skills@invest-a-gap-scan

指定 Agent (Claude Code)

npx skills add Veblin/invest-skills --skill invest-a-gap-scan -a claude-code -g -y

安装 repo 全部 skill

npx skills add Veblin/invest-skills --all -g -y

预览 repo 内 skill

npx skills add Veblin/invest-skills --list

SKILL.md

Frontmatter
{
    "name": "invest-a-gap-scan",
    "version": "0.3.2",
    "metadata": {
        "requires": {
            "bins": [
                "uv",
                "python3"
            ]
        },
        "optionalEnv": [
            "TUSHARE_TOKEN"
        ]
    },
    "whenToUse": "缺口\/跳空扫描:向上跳空缺口 + MA60 未被跌破 + 未回补的成分股筛选(观察清单,非交易信号)",
    "description": "跳空缺口扫描 — 向上缺口 + 收盘未跌破 MA60 + 未回补,指数成分股池(沪深300+中证A500+科创50)触发词:缺口\/跳空扫描",
    "allowed-tools": "Bash, Read, Write, WebSearch, WebFetch",
    "argument-hint": "\/invest-a-gap-scan [--gap-min-pct 1.5] [--gap-min-vol-ratio 1.5]",
    "user-invocable": true
}

invest-a-gap-scan 跳空缺口扫描

工具约束说明:frontmatter 的 allowed-tools 是 Claude Code 约定;在 DSH 等不读取该字段的 harness 下不生效,实际可用工具由平台自身沙箱控制。本技能主体操作为本地数据采集与计算(Bash/Python 引擎);部分维度经 WebSearch/WebFetch 补充检索

概述

扫描沪深300 + 中证A500 + 科创50 成分股并集(去重后约 450~500 只,随指数调仓变动),找出同时满足:

  1. 近 60 个交易日内有向上跳空缺口(low[i] > high[i-1],幅度 >= 1%)
  2. 自缺口日起,在可计算 MA60 的 bar 上收盘未跌破 MA60(close[t] >= MA60[t];含 epsilon 容差与有效值门槛,见「MA60 计算」)
  3. 缺口形成后最低价从未回补至上沿及以下(min(low[gap_idx+1:]) > gap_high)

产出性质:观察清单。 命中 = 「这几只标的存在未回补的向上缺口且未跌破 MA60」这一规则化形态检出结果, 不是交易信号、不是预测、不是推荐排序,也不含任何方向性判断或基本面/事件核验。 形态可在任何时点被回补;请把它当作进一步研究的入口,而不是结论。禁买卖/仓位建议。

缺口定义

  gap_high  ─────── low[i]         (缺口上沿 = 跳空日最低价)
                      |
                   gap_pct = low[i] / high[i-1] - 1
                      |
  gap_low   ─────── high[i-1]      (缺口下沿 = 前日最高价)
  • 未回补: 缺口形成后所有交易日的最低价均 > 缺口上沿
  • 跨停牌: 缺口前一交易日为停牌日 -> 单独列出,不参与常规排序

筛选漏斗

池规模与分布随指数调仓与市况变动,不是固定值(历史文档曾写死「478 只」与一组固定桶值,与实测不符)。2026-09-21 实测(出处 reports/gap-scan/2026-09-21-06-40-36.md)呈现如下分布,且闭合:

池 480 只  ─ 排除(扫描前剔除)
 |--  ~5 (1.0%)   低流动性        -- 当前尾部 20 日均额 < 1 亿
 |--   0          上市不足 / 数据缺失 / ST / 退市 / 获取失败
 |
 |  进入缺口判定 475 只  ─ 未命中(扫描后无合格缺口)
 |-- 266 (55.4%)  无缺口          -- 60 日内无 low[i] > high[i-1]
 |-- 110 (22.9%)  低于阈值        -- 有缺口但幅度 < 1%
 |--  78 (16.2%)  MA60破          -- 缺口后收盘跌破 MA60,或 MA60 覆盖度不足
 |--  11 (2.3%)   缺口回补        -- 最低价回补至上沿
 |--   1 (0.2%)   最新bar待收盘确认 -- 最新 bar 尚未完成,两边结论都不下
 |--   0          量比低          -- 仅在设置量比门槛时可能出现
 |
 |  命中  9 (1.9%)                 -- 观察清单条目(非交易信号)
 |--   0          跨停牌          -- 缺口前一交易日为停牌日,单列不参与排序

闭合恒等式(可用于自查报告是否漏桶;零值桶不显示,须由该式推得):

池规模 = 排除(扫描前) + 未命中(扫描后) + 命中 + 跨停牌
480    = 5              + 466(266+110+78+11+1) + 9    + 0

运行

基本用法

cd "${INVEST_SKILLS_ROOT:-.}" && uv run python skills/invest-a-gap-scan/scripts/scan.py

参数表

参数 默认 说明
--universe csi300,a500,star50 指数池,逗号分隔,支持空格
--gap-min-pct 1.0 缺口幅度阈值 %。low[i]/high[i-1]-1,<1% 归为"低于阈值"淘汰。须为有限值且 ≥0
--gap-lookback 60 缺口回溯交易日数。只搜索最近 N 根 K 线中的缺口。须 ≥1
--gap-min-vol-ratio 1.0 缺口日成交额 / 缺口日前至多 20 根 bar 日均额(min(20, gap_idx))的下限。默认 1.0 = 不过滤;任何非 1.0 的值都会启用该门槛(含 0.5 等 <1.0 的取值)。须为有限值且 >0:nan/inf 会让引擎静默过滤全部标的而报告无从复现,故在参数入口直接报错
--min-avg-amount 100000000 当前尾部 20 个交易日平均成交额门槛(元),与量比分母是不同窗口;<1 亿归为"低流动性"排除。须 ≥0
--min-list-days 60 最少 K 线根数。不足的标的归为"上市不足"排除。须 ≥0
--top 30 stdout 命中表格行数(md 报告始终全量)。须 ≥0
--source auto 数据源:auto(优先 Tushare)/tushare/baostock
--no-cache off 强制刷新 K 线缓存 + 成分股缓存
--universe-limit N 无 只扫前 N 只(开发调试用)
--no-save-report off 不写入 reports/gap-scan/ 目录
--json off stdout 输出 JSON 格式(顶层带 nature/disclaimer;hits 为观察清单)
--record off 命中追加到 reports/gap-backtest/hits.jsonl(前瞻回测状态,按 (scan_date, ts_code) 幂等)

示例

# 提高缺口阈值
cd "${INVEST_SKILLS_ROOT:-.}" && uv run python skills/invest-a-gap-scan/scripts/scan.py --gap-min-pct 2.0

# 要求放量缺口(门槛同样适用于 <1.0 的取值)
cd "${INVEST_SKILLS_ROOT:-.}" && uv run python skills/invest-a-gap-scan/scripts/scan.py --gap-min-vol-ratio 1.5

# 强制 baostock(无 Tushare token;与停牌检测是否跳过无关,后者取决于交易日历是否可得)
cd "${INVEST_SKILLS_ROOT:-.}" && uv run python skills/invest-a-gap-scan/scripts/scan.py --source baostock

# 调试: 只扫前 30 只
cd "${INVEST_SKILLS_ROOT:-.}" && uv run python skills/invest-a-gap-scan/scripts/scan.py --universe-limit 30

# JSON 输出 (供脚本消费)
cd "${INVEST_SKILLS_ROOT:-.}" && uv run python skills/invest-a-gap-scan/scripts/scan.py --json

# 全量刷新
cd "${INVEST_SKILLS_ROOT:-.}" && uv run python skills/invest-a-gap-scan/scripts/scan.py --no-cache

算法详解

容忍规则 (Tolerance Rule)

缺口按从新到旧排序,遇到第一个满足全部条件的即命中。判定顺序与各分支的桶归属由下表固定(顺序会影响未命中桶的归属,不得改动复现步骤):

for gap in qualified_gaps (newest first):
    if MA60 覆盖度不足 或 在可计算 MA60 的 bar 上收盘跌破 MA60:
        -> 继续检查更老的缺口          # 不置位;全部失败则归「MA60破」
    if 该 bar 是数据中最新的一根 bar 且尚未完成(未收盘):
        -> 标「最新bar待收盘确认」并继续更老的缺口
           (既不下「未回补」也不下「已回补」结论)
    if gap 已被回补:
        -> 继续检查更老的缺口
    if 量比 < 门槛 (门槛生效时):
        -> 继续检查更老的缺口
    -> 命中(此外不区分跨停牌与否,跨停牌在命中后单列)

不回退到已回补的缺口。这意味着:如果最新缺口已回补但更老的缺口未回补且 MA60 完好,会命中老缺口。

未命中桶的归属优先级(决定报告里落在哪个桶):

  1. 没有任何合格缺口满足 MA60 → MA60破
  2. 没有任何缺口被确认为未回补,且存在「最新bar待收盘确认」→ 最新bar待收盘确认(终结桶:一旦有任何缺口命中,本条不成立)
  3. 没有任何缺口被确认为未回补 → 缺口回补
  4. 有未回补缺口但量比不达标 → 量比低
  5. 其余 → 缺口回补

扫描时点与数据截止(after_close)

最新一根 bar 的缺口没有后续数据,能否判定未回补取决于该 bar 是否已完成,而不是运行时的墙钟:

情形 判定 说明
最新 bar 日期 < 今日 已完成,可判未回补 盘前、周末、节假日、停牌股均属此类
最新 bar 日期 == 今日 且 上海时间 ≥15:00 已完成,可判未回补 当日日线已发布
最新 bar 日期 == 今日 且 未到 15:00 未完成 盘中 bar 仍在变动,归「最新bar待收盘确认」
日期不可解析 未完成(保守) 不猜成已完成

按墙钟(旧实现 hour >= 15)判定会丢掉可判定的命中:实测同一份数据(最新 bar = 周五,已完成), 周六 23:46 扫描得 10 命中,周一 06:40 扫描只得 9 命中 + 1 条「最新bar待收盘确认」。 判定为逐股进行(停牌股的最新 bar 更早,同样视为已完成);强制覆盖只存在于库接口 (scan_all(after_close=...),供测试重放),CLI 不提供该开关。

数据截止与「最新收盘」:报告首部给出数据截止日(全池最新 bar 日期),命中表与逐股简析 逐行给出「数据日」(停牌、数据落后或部分缓存命中的标的更早)。价格一律是该行数据日的收盘价, 不是实时价;K 线缓存 TTL 为 3 天,命中缓存时数据可能滞后,报告同时披露缓存命中数、实际新拉数、 拉取失败数与未定稿重拉数、缓存条目年龄(见「缓存」)。

缓存复用前提:只有当缓存里最后一根 bar 已定稿(缓存写入时刻晚于该 bar 自身交易日的收盘)时才复用; 盘中写入的快照会隔日失效并重拉——否则会拿未走完的低点去断言「缺口未回补」(见「缓存」的定稿判据)。

跨停牌缺口

停牌检测基于交易日历 + 日线数据对比:某个交易日在 trade_cal 中存在但该标的不在 daily_by_date 中 -> 标记为停牌。缺口前一交易日为停牌日 -> 归入 across_suspension_hits,不参与常规排序。

注意: 无 Tushare token 时使用自然日估算交易日历(Mon-Fri),此时跳过停牌检测以避免假期误判(报告的「交易日历」行会标注停牌检测已跳过)。

MA60 计算

使用 invest-a-stock 的 lib.technical.sma(60 日简单移动平均)。前 59 个位置 MA60 为 None。判定规则:

  • 只对可计算 MA60 的 bar 判定:ma60[t] is None 的位置跳过;有效值门槛要求缺口日起至少有 max(25% × bar 数, 3) 根 bar 有 MA60 值,否则不判 MA60,直接归入「MA60破」
  • epsilon 容差:math.isclose(close, ma60, rel_tol=1e-5, abs_tol=0.01),用于吸收前复权换算的浮点尾差(绝对带 0.01 元,低价股上近似 0.2%);真实跌破幅度远大于此,不会被容差掩盖
  • NaN close 触发 MA60 失败(利用 not (NaN >= MA60) 恒为 True 的特性)

覆盖度会随报告输出(逐股简析的「MA60 判定覆盖: valid/total」)——短历史标的的有效 bar 少,命中的强度含义弱于长历史标的。复算示例:

n=74 根、缺口 idx=14:total=60,valid=15(MA60 自 bar 59 起有效),need=max(ceil(60×0.25),3)=15 → 通过
n=64 根、缺口 idx=10:total=54,valid=5,need=max(ceil(54×0.25),3)=14 → 5 < 14 → 归入「MA60破」

即 K 线少于约 74 根的标的几乎不可能通过 MA60 判定;这类标的不会静默消失,而是明确落在「MA60破」桶。

前复权 (QFQ)

  • Tushare 路径: 原始价格 x adj_factor / latest_adj_factor -> 以最新日为基准的前复权价格
  • Baostock 路径: adjustflag="2" 直接返回前复权价格,无需额外计算

两种路径的 QFQ 算法存在细微差异,因此缓存按数据源隔离({kline}/{source}/{ts_code}.pkl)。

数据流

1. build_universe()        指数成分股并集 -> 去重 + ST/退市过滤 -> 约 480 只(随调仓变动)
       |
2. create_source("auto")   有 Token 且可用 -> TushareBulkSource (按日批量)
                          否则 -> BaostockSource  (逐股查询)
                          (实际使用源与尝试源写入报告;降级会显式标注)
       |
3. _fetch_trade_cal()      Tushare trade_cal API -> 真实交易日历
                           失败 -> 自然日估算 (Mon-Fri, 跳过停牌检测)
       |
4. kline_cache.load()      命中 -> 跳过拉取(TTL 3 天,报告披露命中数与条目年龄)
                          未命中 -> fetch_daily_batch + build_stock_kline + cache.save
       |
5. detect_suspensions()    对比 trade_cal vs daily_by_date -> 停牌日期列表
       |
6. scan_all()              逐股: 流动性排除 -> 找缺口 -> 容忍规则 -> 命中/排除/未命中
                          逐股按数据日期判定最新 bar 是否已完成(见「扫描时点」)
       |
7. format_brief()          命中表 (缺口幅度降序) + 排除/未命中统计
   format_markdown_report() 详文档 -> reports/gap-scan/{YYYY-MM-DD-HH-MM-SS}.md

详文档路径带时分秒:同日二次运行不覆盖历史(目录固定为 gap-scan,因为汇总扫描无单一标的)。

数据量

项目 数量
交易日范围 ~180 自然日 (~120 交易日,gap_lookback + 59 bar 确保 MA60 全覆盖)
成分股 约 480 只(去重后,随指数调仓变动)
K 线行数 约 5~6 万行
缓存磁盘 按数据源隔离,规模随池与 TTL 变动(不复述固定数字;实测目录见下)

性能

场景 耗时 说明
首次扫描 (Tushare) ~4 min 按日批量 API(~120 日),受限于 Tushare 限速
首次扫描 (Baostock) ~5 min 逐股查询,每只 ~0.6s,~120 日数据
同日二次扫描 ~7s 全部缓存命中,仅做缺口算法
部分缓存命中 ~7s + 缺失部分拉取 只拉取未命中标的

输出

stdout 摘要

========================================================================
  invest-a-gap-scan vX.Y.Z -- 跳空缺口扫描
========================================================================

  **风险声明(非投资建议)**:本报告由规则化扫描自动生成 ...(首尾各一条,节选)

池构成: 沪深300(300) + 中证A500(500) + 科创50(50) -> 去重 480 只(随指数调仓变动)
数据截止: 20260918(全池最新 bar,不含今日;逐股数据日见「数据日」列)
数据源: Tushare Pro (前复权自算) | 尝试源: tushare
K线缓存: 缓存命中 480 / 新拉 0(TTL 3.0 天,缓存条目年龄 0.4~2.9h)
覆盖率: 100.0% (480/480 有K线) | 命中: 10 只 | 跨停牌: 0 只
参数: 缺口≥1.0% | 回溯60日 | MA60(含容差与有效值门槛) | 日均额≥1.00亿(当前20日均额)

排除(扫描前): 低流动性 5
未命中(扫描后): 无缺口 266 | 低于阈值 110 | MA60破 78 | 缺口回补 11

命中(观察清单,非交易信号、非预测、非推荐排序):
| 代码 | 名称 | 指数 | 板块 | 缺口日 | 缺口% | 缺口区间 | 数据日 | 最新收盘 | MA60 | MA60% | 距上沿% | 量比 | 量比分母 | 当前20日均额 |
|-----|------|-----|-----|--------|------|---------|--------|-----|------|------|--------|-----|---------|---------|
| 300628.SZ | 亿联网络 | 300 | 创业板 | 20260715 | +4.62% | 33.960~35.530 | 20260918 | 41.460 | 38.663 | +7.24% | +16.69% | 2.52 | 3.74亿 | 4.12亿 |

(vX.Y.Z 为占位:正文示例版本串不随 sync_version.py 自动更新,以运行时实际输出为准。 上表数值取自 2026-09-19 实测缓存数据:该行 量比分母 3.74亿 与 当前20日均额 4.12亿 是两个不同窗口, 复算 9.45亿(缺口日成交额)÷ 3.74亿 = 2.52(量比)。

「新拉」是实际成功数,不是计划拉取数:待拉标的可能拉取失败(未进入 K 线映射)。 启用缓存时缓存行写成 缓存命中 X / 新拉 Y / 拉取失败 Z(计入「获取失败/数据缺失」排除桶); --no-cache 时写成 已禁用(--no-cache)| 计划重拉 N / 新拉 Y / 拉取失败 Z——禁用缓存同样是 「先计划后执行」,不得只写「全部重新拉取」。若全部拉取失败,引擎直接以退出码 1 结束且不产出报告。)

命中表列说明

列 含义
代码/名称 标的
指数 所属指数 (300=沪深300, 500=A500, 50=科创50)
缺口日 缺口形成日期
缺口% 跳空幅度
缺口区间 缺口下沿~上沿 (即回补位参考区间)
数据日 该标的 K 线最后一根 bar 的交易日。逐股给出:停牌、数据落后或部分缓存命中的标的会早于全池数据截止日;不给出该列会让人误以为全表价格取自同一时点
最新收盘 该行「数据日」的收盘价,非实时价
MA60% (最新收盘 - MA60) / MA60,正值=MA60 上方
距上沿% (最新收盘 - 缺口上沿) / 缺口上沿。命中表内非负(≥ 0)——候选条件已要求缺口未回补,故负值不可达;= 0 出现在收盘正好落在上沿时
量比 缺口日成交额 / 量比分母(缺口日前至多 20 根 bar 日均额),>1=放量
量比分母 缺口日前至多 20 根 bar 的日均成交额(min(20, gap_idx))。只有它与量比同时给出才能复算 缺口日成交额 = 量比 × 分母
当前20日均额 当前尾部 20 个交易日平均成交额(低流动性门槛所用窗口),与量比分母不是同一窗口,不可互算

详文档

reports/gap-scan/{YYYY-MM-DD-HH-MM-SS}.md,含:

  • 首尾各一条完整可见的风险声明(非投资建议、观察清单、非交易信号)
  • 数据与来源:实际使用源 / 实际尝试过的源及其理由(未配置而跳过 ≠ 尝试后失败)/ K 线缓存 (缓存命中数、实际新拉数、拉取失败数、TTL、条目年龄)/ 交易日历是否降级 / 池规模与覆盖率, 以及字段级来源表——其中「成分股池」行按指数给出实际生效的那一级 (index_stock_cons / index_stock_cons_sina / Tushare index_weight); 复用旧缓存且无 sidecar 时写「未记录」,不回落成首选源的名字
  • 全量命中表 + 逐股简析(数据日、缺口区间、量比与分母、MA60 判定覆盖度)+ 排除/未命中统计 + 运行参数
  • 逐股简析中的**「事件/催化」槽位标注为「未采集」**:引擎只做价格形态检出,不做事件归因; 如需补充须另行检索并标注来源与日期,不得把检索摘要直接当事实

缓存

位置

~/.local/share/investment/gap_scan_cache/
|-- universe_20260719.pkl               (成分股列表,按采集日命名)
|-- universe_20260719.provenance.json   (该次成分股各指数的实际来源 sidecar)
|-- kline/                              (固定段键目录, v0.2.5)
|   |-- tushare/                   (按数据源隔离)
|   |   |-- 000001.SZ.pkl
|   |   `-- ...
|   `-- baostock/
|       |-- 000001.SZ.pkl
|       `-- ...

缓存策略

  • TTL: 3 天 (基于文件 mtime;固定段键使跨日命中生效,旧版 {YYYYMMDD} 日期目录随 v0.2.5 一次性清理)
  • Scope: 按数据源隔离,tushare/baostock 缓存互不污染
  • 格式: Python pickle (pandas DataFrame)
  • 强制刷新: --no-cache 跳过加载,重新拉取并覆盖
  • ⚠️ 末根 bar 定稿判据(复用前提): 缓存文件写入时刻必须晚于其末根 bar 自身交易日的收盘(15:00), 否则该缓存视为未命中并重拉。数据源可能在盘中返回当日尚未走完的 bar,这份快照若被留到次日, 仅按日期比较会被当成已完成 bar(「昨日 < 今日」),从而用未走完的低点断言「缺口未回补」—— 实测该情形可凭空产出命中。报告在缓存行注明「其中 N 只为『缓存末根 bar 未定稿』而重拉」
  • 坏条目按未定稿处理,不中止扫描:缓存日期位数为 8 但非合法日历日(如 20260230)、写入时刻 不可得、9 位等位数异常的日期串,一律视为未定稿 → 该股重拉、坏条目被覆盖。缓存校验谓词 不抛异常(调用点在逐股异常隔离之外,抛出会中止整次扫描);位数异常的日期串不做截断猜测
  • ⚠️ 与数据时点的关系: TTL 内命中缓存时,扫描用的是缓存写入时点的 K 线——报告首部的 「数据截止」与逐股「数据日」即反映该时点,缓存命中数与条目年龄也在报告披露。不得把表内价格当作实时价

数据源

来源 需要 用途
Tushare Pro TUSHARE_TOKEN (>=120 积分) K 线 (批量按日) + 复权因子 + 交易日历 + 成分股第三级兜底
baostock 无 (默认兜底) K 线 (逐股, 前复权 adjustflag=2)
akshare 无 指数成分股(index_stock_cons / index_stock_cons_sina)

降级策略

K 线源(auto):
  1. TUSHARE_TOKEN 存在 -> 先用 TushareClient.is_available() 做**有效 token 可用性检验**
  2. 检验通过 -> TushareBulkSource (快速批量)
  3. 无 token -> 直接 BaostockSource(**未尝试 Tushare**,不算降级)
     有 token 但检验失败 -> BaostockSource(**真降级**:已尝试且失败)

成分股(逐指数,对每个指数独立降级):
  1. akshare index_stock_cons
  2. akshare index_stock_cons_sina(仅沪深300)
  3. Tushare index_weight(需 token 可用)
  全失败 -> 该指数不纳入池,并在报告「成分股池」行标注「全部源失败未纳入池」
  来源随缓存落盘为 sidecar(universe_{yyyymmdd}.provenance.json)

交易日历:
  1. Tushare trade_cal API -> 真实日历 + 停牌检测
  2. 失败 -> 自然日估算 (Mon-Fri) + 跳过停牌检测

「有 token」不等于「token 可用」:auto 路径先做可用性检验,检验失败同样降级到 baostock。 报告把实际使用源与尝试过的源分开列出,且**「未配置而跳过」不计入尝试**—— 无 token 时只写 baostock,并注明「未配置 TUSHARE_TOKEN(未尝试 Tushare)」, 不得把「未配置」写成「尝试过但失败」,也不得把降级链写成并列来源。

排除/未命中原因

排除 (扫描前剔除)

原因 含义
获取失败 API 拉取失败或网络错误
低流动性 当前尾部 20 日均额 < --min-avg-amount
上市不足 K 线根数 < --min-list-days
数据缺失 缺少复权因子 (仅 Tushare 路径)
ST ST 标的 (名称含 "ST")
退市 退市标的 (名称含 "退")

未命中 (扫描后无结果)

原因 含义
无缺口 回溯窗口内无 low[i] > high[i-1]
低于阈值 有缺口但幅度 < --gap-min-pct
MA60破 缺口后收盘跌破 MA60,或 MA60 有效值覆盖度不足(含 K 线 <74 根的短历史标的)
缺口回补 缺口后最低价触及或跌破缺口上沿
最新bar待收盘确认 最新 bar 尚未完成(盘中运行),既不能确认未回补也不能确认已回补;终结桶:仅当没有任何已确认未回补的缺口时出现,优先级高于「缺口回补」与「量比低」
量比低 缺口日量比 < --gap-min-vol-ratio(任何非 1.0 的门槛值都生效,含 <1.0 的取值)

零值桶不显示在报告中,可由闭合恒等式推得:

池规模 = 排除(扫描前) + 未命中(扫描后) + 命中 + 跨停牌

联动

对命中的标的,接 /invest-a-stock {symbol} 做深度基本面研究——这是独立的事实研究入口,不是行动步骤: 命中只说明该标的落在上述形态规则内,是否值得继续研究由你判断。

合规

  • 禁止买卖/仓位建议
  • 禁止单一目标价
  • 用「缺口区间 / 上沿回补位」等中性表述
  • 命中 = 观察清单,非交易信号、非预测、非推荐排序;输出末尾标注"仅供研究,不构成投资建议"

Version History

  • b2857b0 Current 2026-10-18 16:25

    更新筛选漏斗数据为2026-09-21实测分布;修正MA60计算逻辑描述;优化参数说明与容差处理。

  • 9fbd24f 2026-09-22 00:00

    v0.3.0 版本发布

  • 52fb4d2 2026-09-08 18:21

Same Skill Collection

.claude/skills/verify/SKILL.md
scripts/wb_bundle/SKILL.md
skills/invest-a-discover-scan/SKILL.md
skills/invest-a-etf/SKILL.md
skills/invest-a-event-calendar/SKILL.md
skills/invest-a-journal/SKILL.md
skills/invest-a-pattern-scan/SKILL.md
skills/invest-a-pulse/SKILL.md
skills/invest-a-stock/SKILL.md
skills/invest-hk-stock/SKILL.md

Metadata

Files
0
Version
b2857b0
Hash
e8b52fe0
Indexed
2026-09-08 18:21

홈 - 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-10-20 00:43
浙ICP备14020137号-1