关于 trader-scanner
trader-scanner 是日内交易工作流中的行情筛选技能,可按日线规则或开盘区间突破规则扫描股票并生成关注列表。结果表示图表匹配规则,不构成买入建议或预测。
主要功能
- 01生成股票范围列表
- 02按日线收盘价筛选多种形态
- 03扫描开盘区间突破
- 04输出关注列表及命中数据
- 05支持离线行情和部分结果标记
适用场景
- 01开盘前按日线形态筛选股票
- 02盘中查找收盘价突破开盘区间的股票
- 03扫描自选股票或指定范围
- 04将筛选结果交给新闻和入场流程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jakeschincariol/ day-trader-skill --skill trader-scanner安装后在 Claude Code 中输入/trader-scanner确认已加载。
附带文件scan.py
详细介绍
trader-scanner
图表扫描器是日内交易的第一步。它会读取数千张免费图表,并列出符合规则的图表。它只做这些。扫描结果是符合规则的图表列表,不是建议买入的股票列表;图表上的形态也不是预测。大多数日内交易者都会亏钱;扫描器无法改变这一点。它只能帮你省去手动翻看 5,000 张图表的麻烦。
下面的 ${CLAUDE_SKILL_DIR} 是此技能的文件夹(即 SKILL.md 所在的位置)。
python3 "${CLAUDE_SKILL_DIR}/scan.py" universe # -> trader/universe.txt
python3 "${CLAUDE_SKILL_DIR}/scan.py" daily # before the open -> trader/watchlist.json
python3 "${CLAUDE_SKILL_DIR}/scan.py" daily --symbols TSLA,NVDA,AMD # or --watchlist FILE, --limit 200
python3 "${CLAUDE_SKILL_DIR}/scan.py" orb # after 9:50 AM ET -> trader/watchlist.json
python3 "${CLAUDE_SKILL_DIR}/scan.py" orb --at 10:15 # cut the clock at 10:15 AM ET
python3 "${CLAUDE_SKILL_DIR}/scan.py" orb --watchlist trader/watchlist.json --json
标志:--min-price 5 和 --min-volume(daily 为 1,000,000,orb 为 0)、--or-minutes 15、--max-confirm 200(orb 阶段 2)、--now "2026-10-19 10:15"(纽约时间),用于固定时钟;--offline PATH 用于读取已保存的 Yahoo 文件;--no-write、--show N、--json。扫描发现结果时退出码为 0;未发现结果或无法运行时为 1(原因以一行纯文本显示)。
读取和写入的内容
| 文件 | 内容 |
|---|---|
trader/universe.txt | 由 universe 写入:每行一个 SYMBOL|Name,由 daily 和 orb 读取 |
trader/watchlist.json | 由 daily 和 orb 写入:mode、as_of、universe、scanned、failed、hits[]。trader-news 和 trader-entry 会读取 hits[].symbol |
trader/config.json | 由 orb 读取:no_entries_after(默认为 15:30) |
股票范围
universe 会从 nasdaqtrader.com/dynamic/SymDir 下载 nasdaqlisted.txt 和 otherlisted.txt,并按以下顺序保留符合条件的条目:
- 不是测试证券、ETF 或 NextShares。
- 是普通股票代码:1 至 5 个字母,或 1 至 4 个字母后接一个点号和类别字母(BRK.B)。带
$的优先股(ABR$D)不纳入;以.U、.W或.R结尾的代码(单位、权证、认股权)也不纳入。 - 无论名称如何描述,以下均不纳入:权证;SPAC 单位和认股权(“Units, each consisting of”“Rights to receive”);票据、ETN、债券;票面利率以 % 表示的证券;非美国或全球存托凭证的“Depositary Shares”(这类证券附带优先股)。
- 纳入:名称中包含普通股、普通股份或单位、普通股、实益权益股份、ADS / ADR / 美国或全球存托股份,或合伙企业或信托单位。
- 不纳入:名称中仍包含 unit、right、bond、preferred 或 preference。
- 纳入:其他所有条目(如 “AMETEK, Inc.” 这样的普通名称)。
在 2026 年 10 月 19 日的文件中,筛选结果为 5,943 个。视频中的列表有 5,259 个:该数量来自临时筛选(名称中包含 common 或 ordinary,不含 ADR)。这 5,259 个全部包含在此列表中;额外的 684 个主要是 ADR、封闭式基金和合伙企业单位。10 月 20 日的文件筛选出 5,942 个。
每日扫描(开盘前)
Yahoo 的 spark 端点每次请求会返回 20 个代码的收盘价,因此扫描 5,942 个代码需要 298 次请求。2026 年 10 月 20 日,采用礼貌性暂停(0.3 秒)耗时 145 秒。流动性数据来自 spark 元数据:最新价格至少为 --min-price,上一交易日成交量至少为 --min-volume。请在开盘前或收盘后运行:交易时段内的成交量是当天截至当前的成交量,而当天的日线数据会到下午 4:00 才纳入。
形态仅根据日收盘价计算(spark 不提供最高价或最低价),因此与视频中的 refs/scan.py 相近,但后者使用最高价和最低价:
| 形态 | 收盘价规则 |
|---|---|
breakout_20d | 最新收盘价高于此前 20 个交易日的所有收盘价 |
bull_flag | 最新 5 个交易日前的 10 个交易日内涨幅超过 10 %,随后最新 5 个收盘价都处于 5 % 的区间内 |
reclaim_ma20 | 前一日收盘价低于 20 日均线,最新收盘价高于该均线 |
oversold | RSI 14(Wilder)低于 30 |
oversold_bounce | RSI 14 昨日低于 30,且今日收盘上涨 |
收盘价突破通常比盘中最高价突破触发得更频繁(KO 在 10 月 16 日突破了 20 日收盘价高点,但没有突破 20 日盘中最高价)。命中结果按成交额从高到低排列(价格乘以成交量)。
开盘区间突破扫描(交易时段内)
开盘区间是交易时段开始后的前 --or-minutes(15)分钟:9:30、9:35 和 9:40 的五分钟 K 线。命中是第一根收盘价高于区间高点的已完成 5 分钟 K 线,命中时间为该 K 线的收盘时间。
- 阶段 1,对每个标的:每次请求 20 个标的,获取今天 5 分钟 K 线的 spark 收盘价。只有当区间结束后有已完成的 K 线收盘价达到或高于区间内最高收盘价时,才会继续获取图表。这是必要条件(区间高点至少不低于区间内每根 K 线的收盘价),因此不会漏掉任何突破。
- 阶段 2,对每个候选标的:每个标的请求一张包含真实高点和低点的 v8 图表。区间高点 = 区间内各根 K 线的最高价;区间低点 = 区间内各根 K 线的最低价。在行情强劲的早盘,大多数图表都会成为候选项,因此阶段 2 最多检查
--max-confirm(200)个候选项,按迄今成交额(价格乘以成交量)从高到低排列,并显示 PARTIAL 以及跳过的数量。--max-confirm 0会检查所有候选项。
耗时示例:2026 年 10 月 20 日周二的强劲早盘,上午 10:01 扫描 100 个流动性较好的标的耗时 35 秒(5 个 spark 请求、70 张 v8 图表;91 张可用图表中有 51 个发生突破)。上午 10:03 扫描整个标的池耗时约 4 分钟(298 个 spark 请求,然后是 200 张 v8 图表):2,448 张可用图表,1,782 个候选项,检查了成交额最高的 200 个,其中 119 个发生突破。如需快速获得结果,可扫描每日观察列表或你交易的标的列表(--watchlist、--symbols)。
只有从 9:30 到截止时间的每根 5 分钟 K 线都齐全时,图表才可用;缺少 K 线表示停牌或股票流动性较差。空值收盘价会被丢弃,不在 5 分钟网格上的 K 线(例如 10:58:07 的实时 tick)会被丢弃,只有在 K 线完成后(开始时间 + 5 分钟)才会计入。上午 9:50 之前、周末或节假日、收盘后,或者超过 no_entries_after(设置已过期)时,程序只输出一行普通文本,不写入任何内容。日历中包含下午 1:00 提前收盘的日期。
数据与限制
- Yahoo 的 chart 和 spark 端点免费、非官方,数据可能延迟。数据为逐根 5 分钟 K 线,并非逐 tick。优先使用 query2;遇到 429 或 5xx 时改用 query1;遇到 429 时等待 5 秒后重试一次。
- 部分结果会明确标为部分结果:“已获取 4,980 / 5,259 张图表(279 张失败或没有数据)”。绝不要把部分扫描结果四舍五入成“整个市场”。
- 2026 和 2027 年的 NYSE 节假日和提前收盘日期(nyse.com,读取于 2026-10-13)。
步骤
- 大约每周一次:
scan.py universe。 - 开盘前:
scan.py daily。告知用户获取、流动性合格、已扫描和命中的数量,以及按形态排列的前几个结果。 - 美国东部时间上午 9:50 之后(经典时段是 10:15):
scan.py orb。告知用户有多少张可用图表突破了区间及突破时间,并说明越晚出现的命中价格越接近当前价格。 - 用户选一张图表。交由后续流程处理:
/trader-news TICKER(是什么因素推动了它),然后/trader-entry TICKER(逐根 K 线分析入场时机)。绝不要替用户做选择。
示例:录像回放
2026 年 10 月 19 日周一,上午 10:15 扫描录像回放中的 234 个标的墙(tests/fixtures/trader-scanner/wall5m-2026-10-19.json.gz,Yahoo 实际图表):
python3 scan.py orb --offline wall5m-2026-10-19.json.gz --now "2026-10-19 10:15" --min-price 0
Fetched 233 of 234 charts (1 failed or had no data); 231 usable; 95 candidates, 95 confirmed with real highs and lows.
42 of 231 charts closed above their opening-range high by 10:15 AM:
9:50 AM AMC $2.97 range 2.90 to 2.96 +0.50% over
...
10:15 AM TSLA $364.18 range 354.47 to 362.18 +0.55% over
录像回放中的标的墙没有价格下限(42 个标的中包括价格为 $2.97 的 AMC),因此使用 --min-price 0;采用默认的 $5 下限时,结果为 41 个。TSLA 的区间为 9:30 至 9:40 的 K 线,高点 362.18,低点 354.47;10:10 的 K 线收于 364.18,比高点高出 0.55 %,命中时间为上午 10:15。用户选择 TSLA 后,Claude 将其交给 /trader-news TSLA,然后交给 /trader-entry TSLA。录像回放中的标的池包含 5,259 只美国股票;本工具按相同文件应用规则得到 5,943 只。
当天的盘前扫描(收盘价数据截至 10 月 16 日周五,即录像回放中的日线图表)将 BLK、CI、XOM 和 HD 标记为 20 日突破,将 CCL 标记为牛旗,将 F、JPM 和 GE 标记为收复 20 日均线,并将 BAC、MS、RIVN 和 PLUG 标记为超卖,与录像回放一致。根据收盘价,扫描还将 KO 标记为突破、将 RCL 标记为旗形,并将 PNC 标记为超卖反弹。
规则
- 说明扫描了什么:扫描了多少个代码、返回了多少张图表、其中多少张可用,以及数据的时间。
- 说“符合一条规则”,绝不说“买入”“赢家”或“好交易”。
- 绝不输出盈亏、回报或利润数字。
- 命中结果会随着价格变动而过时。采取行动前请重新运行。
它绝不会做什么
它绝不会下单、设定订单规模或检查订单,绝不会指出该买哪只股票,绝不会称数据为实时数据,也绝不会保证某种策略有效。
安全
- 仅用于教育和工具,不构成财务建议。PASS 是规则检查结果,不是投资建议。
- 默认使用模拟交易(
"paper": true)。是否进行实盘交易由用户自行决定,并在自己的配置中设置。 - 除 trader-broker 外,此套件中的任何工具都不会下单;而且只有同时满足以下三项条件时才会下单:trader-risk 当天已通过该笔确切订单的检查;用户在聊天中明确输入“是”来确认该笔订单;用户在 Claude 自带的卡片上点击一次“允许”,因为订单工具已设为“需要审批”(自定义 > 连接器 > 工具权限)。绝不要将订单工具设为“始终允许”。
- 除非配置允许且用户确认,否则不得使用期权、保证金、卖空或杠杆。
- 券商密钥应保存在环境变量或 Claude Desktop 配置中,绝不可放在聊天中。