mcpField
T
trader-scanner

trader-scanner

github.com/jakeschincariol数据与数据库2.6k112 次安装1 周前更新
代码仓库

关于 trader-scanner

trader-scanner 是日内交易工作流中的行情筛选技能,可按日线规则或开盘区间突破规则扫描股票并生成关注列表。结果表示图表匹配规则,不构成买入建议或预测。

主要功能

  1. 01生成股票范围列表
  2. 02按日线收盘价筛选多种形态
  3. 03扫描开盘区间突破
  4. 04输出关注列表及命中数据
  5. 05支持离线行情和部分结果标记

适用场景

  1. 01开盘前按日线形态筛选股票
  2. 02盘中查找收盘价突破开盘区间的股票
  3. 03扫描自选股票或指定范围
  4. 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,并按以下顺序保留符合条件的条目:

  1. 不是测试证券、ETF 或 NextShares。
  2. 是普通股票代码:1 至 5 个字母,或 1 至 4 个字母后接一个点号和类别字母(BRK.B)。带 $ 的优先股(ABR$D)不纳入;以 .U、.W 或 .R 结尾的代码(单位、权证、认股权)也不纳入。
  3. 无论名称如何描述,以下均不纳入:权证;SPAC 单位和认股权(“Units, each consisting of”“Rights to receive”);票据、ETN、债券;票面利率以 % 表示的证券;非美国或全球存托凭证的“Depositary Shares”(这类证券附带优先股)。
  4. 纳入:名称中包含普通股、普通股份或单位、普通股、实益权益股份、ADS / ADR / 美国或全球存托股份,或合伙企业或信托单位。
  5. 不纳入:名称中仍包含 unit、right、bond、preferred 或 preference。
  6. 纳入:其他所有条目(如 “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 日均线,最新收盘价高于该均线
oversoldRSI 14(Wilder)低于 30
oversold_bounceRSI 14 昨日低于 30,且今日收盘上涨

收盘价突破通常比盘中最高价突破触发得更频繁(KO 在 10 月 16 日突破了 20 日收盘价高点,但没有突破 20 日盘中最高价)。命中结果按成交额从高到低排列(价格乘以成交量)。

开盘区间突破扫描(交易时段内)

开盘区间是交易时段开始后的前 --or-minutes(15)分钟:9:30、9:35 和 9:40 的五分钟 K 线。命中是第一根收盘价高于区间高点的已完成 5 分钟 K 线,命中时间为该 K 线的收盘时间。

  1. 阶段 1,对每个标的:每次请求 20 个标的,获取今天 5 分钟 K 线的 spark 收盘价。只有当区间结束后有已完成的 K 线收盘价达到或高于区间内最高收盘价时,才会继续获取图表。这是必要条件(区间高点至少不低于区间内每根 K 线的收盘价),因此不会漏掉任何突破。
  2. 阶段 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)。

步骤

  1. 大约每周一次:scan.py universe。
  2. 开盘前:scan.py daily。告知用户获取、流动性合格、已扫描和命中的数量,以及按形态排列的前几个结果。
  3. 美国东部时间上午 9:50 之后(经典时段是 10:15):scan.py orb。告知用户有多少张可用图表突破了区间及突破时间,并说明越晚出现的命中价格越接近当前价格。
  4. 用户选一张图表。交由后续流程处理:/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 配置中,绝不可放在聊天中。

评论

支持 Markdown