
trader-scanner
Chart Scanner. Scans thousands of charts for setups: opening-range breakouts, flags, oversold bounces. Builds the list of US-listed common stocks, ordinary shares and ADRs from Nasdaq Trader's symbol directories, runs a pre-market scan of daily closes (20-day closing-high breakout, bull flag, reclaimed the 20-day average, oversold, oversold bounce) and an intraday opening-range breakout scan on 5-minute bars, then writes trader/watchlist.json for trader-news and trader-entry. Free Yahoo data, bar by bar. Use when the user says "scan the market", "find me setups", "what is breaking out", "opening range breakouts", "scan for bull flags", "oversold stocks", "pre-market scan", "build my watchlist", "what should I look at today", or at the start of a trading day before /trader-news.
- Installs
- 92
- Last 24h
- +16
- Trending rank
- #6889
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/jakeschincariol/day-trader-skill --skill trader-scanner- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads trader-scanner automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
trader-scanner
The Chart Scanner is the first step of a day trade. It reads thousands of free charts and lists the ones that match a rule. That is all it does. A scan is a list of charts that match a rule, not a list of stocks to buy, and a setup on a chart is not a prediction. Most people who day trade lose money; the scanner does not change that. It only saves you from flipping through 5,000 charts by hand.
${CLAUDE_SKILL_DIR} below is this skill's folder (where this SKILL.md lives).
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
Flags: --min-price 5 and --min-volume (daily 1,000,000, orb 0),
--or-minutes 15, --max-confirm 200 (orb stage 2),
--now "2026-10-19 10:15" (New York time) to pin the clock, --offline PATH
to read saved Yahoo files, --no-write, --show N, --json. Exit code 0
when the scan found something, 1 when it found nothing or could not run (the
reason is one plain line).
What it reads and writes
| file | what |
|---|---|
trader/universe.txt | written by universe: one SYMBOL|Name a line, read by daily and orb |
trader/watchlist.json | written by daily and orb: mode, as_of, universe, scanned, failed, hits[]. trader-news and trader-entry read hits[].symbol |
trader/config.json | read by orb: no_entries_after (default 15:30) |
The universe
universe downloads nasdaqlisted.txt and otherlisted.txt from
nasdaqtrader.com/dynamic/SymDir and keeps a row when, in this order:
- It is not a test issue, not an ETF, not NextShares.
- It is a plain ticker: 1 to 5 letters, or 1 to 4 letters plus one class
letter after a dot (BRK.B). A
$preferred (ABR$D) is out, and so is a.U,.Wor.Rsuffix (units, warrants, rights). - Out, whatever else the name says: warrants; SPAC units and rights ("Units, each consisting of", "Rights to receive"); notes, ETNs, debentures; a % coupon; "Depositary Shares" that are not American or Global (those carry a preferred).
- In: the name calls it common stock, common shares or units, ordinary shares, shares of beneficial interest, ADS / ADR / American or Global depositary shares, or partnership or trust units.
- Out: the name still says unit, right, bond, preferred or preference.
- In: everything else (plain names like "AMETEK, Inc.").
On the Oct 19 2026 files this keeps 5,943. The reel said 5,259: that count came from an ad hoc filter (names that say common or ordinary, no ADRs). All 5,259 of those are in this list; the 684 extra are mostly ADRs, closed-end funds and partnership units. The Oct 20 files gave 5,942.
The daily scan (before the open)
Yahoo's spark endpoint returns closes for 20 symbols a request, so 5,942
symbols take 298 requests. On Oct 20 2026 that took 145 seconds with the
polite pause (0.3 s). Liquidity comes from the spark meta: last price at
least --min-price and last session's volume at least --min-volume. Run it
before the open or after the close: during the session the volume is the
day's so far, and today's daily bar is left out until 4:00 PM.
The setups are computed from daily closes only (spark has no highs or lows),
so they are close cousins of the reel's refs/scan.py, which used highs and
lows:
| setup | the rule on closes |
|---|---|
breakout_20d | the last close is above every close of the 20 sessions before it |
bull_flag | up more than 10 % over the 10 sessions before the last 5, then the last 5 closes inside a 5 % range |
reclaim_ma20 | the close before was under its 20-day average, the last close is above it |
oversold | RSI 14 (Wilder) under 30 |
oversold_bounce | RSI 14 was under 30 yesterday and today closed up |
A closing-high breakout fires more often than an intraday-high one (KO on Oct 16 broke its 20-day closing high, not its 20-day intraday high). Hits are listed most traded first (price times volume).
The opening-range breakout scan (during the session)
The opening range is the first --or-minutes (15) of the session: the 9:30,
9:35 and 9:40 five-minute bars. A hit is the first completed 5-minute bar
to CLOSE above the range high, at that bar's close time.
- Stage 1, every symbol: spark closes of today's 5-minute bars, 20 a request. A chart goes on only if a completed bar after the range closed at or above the highest close of the range. That is a necessary condition (the range high is at least every range close), so no breakout is lost.
- Stage 2, each candidate: the v8 chart with real highs and lows, one
request each. Range high = the highest high of the range bars, range low =
the lowest low. On a strong morning most charts are candidates, so stage 2
checks at most
--max-confirm(200) of them, the most traded first (price times volume so far), and prints PARTIAL with the count it skipped.--max-confirm 0checks them all.
Timing, live on Tue Oct 20 2026 (a strong morning): 100 liquid names at
10:01 AM took 35 seconds (5 spark requests, 70 v8 charts, 51 of 91 usable
charts broke out). The whole universe at 10:03 AM took about 4 minutes (298
spark requests, then 200 v8 charts): 2,448 usable charts, 1,782 candidates,
the 200 most traded checked, 119 of those broke out. For a fast answer, scan
the daily watchlist or a list of names you trade (--watchlist, --symbols).
A chart is usable only when every 5-minute bar from 9:30 to the cutoff is
there; a missing bar means a halt or a thin stock. Null closes are dropped,
a bar off the 5-minute grid (the live tick, like 10:58:07) is dropped, and a
bar counts only once it is complete (start + 5 minutes). Before 9:50 AM, on a
weekend or holiday, after the close, or after no_entries_after (an expired
setup) it prints one plain line and writes nothing. The 1:00 PM early closes
are in the calendar.
Data and limits
- Yahoo's chart and spark endpoints are free, unofficial and can lag. Bars are 5-minute bars, bar by bar, never tick by tick. query2 first, query1 on a 429 or 5xx, one retry after a 5-second wait on a 429.
- Partial results are said as partial: "Fetched 4,980 of 5,259 charts (279 failed or had no data)". Never round a partial scan up to "the whole market".
- NYSE holidays and early closes for 2026 and 2027 (nyse.com, read 2026-10-13).
Steps
- Once a week or so:
scan.py universe. - Before the open:
scan.py daily. Tell the user the counts (fetched, liquid, scanned, hits) and the top few by setup. - After 9:50 AM ET (10:15 is the classic):
scan.py orb. Tell the user how many usable charts broke their range and when, and that a later hit is closer to the price now. - The user picks one chart. Hand it on:
/trader-news TICKER(what is moving it), then/trader-entry TICKER(the entry bar by bar). Never pick for them.
Example: the reel
Monday Oct 19 2026, scan at 10:15 AM over the reel's 234-ticker wall
(tests/fixtures/trader-scanner/wall5m-2026-10-19.json.gz, real Yahoo charts):
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
The reel's wall had no price floor (AMC at $2.97 is one of the 42), hence
--min-price 0; with the default $5 floor it is 41. TSLA's range is the 9:30
to 9:40 bars, high 362.18, low 354.47; the 10:10 bar closed at 364.18, 0.55 %
over the high, at 10:15 AM. The user picks TSLA and Claude hands it to
/trader-news TSLA, then /trader-entry TSLA. In the reel the universe was
5,259 US stocks; this tool's rule gives 5,943 on the same files.
The pre-market scan that morning (closes through Fri Oct 16, the reel's daily charts) tags BLK, CI, XOM and HD a 20-day breakout, CCL a bull flag, F, JPM and GE a reclaim of the 20-day average, and BAC, MS, RIVN and PLUG oversold, as the reel did. On closes it also tags KO (breakout), RCL (flag) and PNC (an oversold bounce).
Rules
- Say what was scanned: how many symbols, how many charts came back, how many were usable, and the time of the data.
- Say "matched a rule", never "a buy", "a winner" or "a good trade".
- Never print a P&L, a return or a profit figure.
- A hit is stale once the price has moved on. Re-run before acting on it.
What it never does
It never places, sizes or checks an order, never says which stock to buy, never calls data real time, and never promises that a setup works.
Safety
- Education and tooling, not financial advice. A PASS is a rules check, not a recommendation.
- Paper trading by default (
"paper": true). Going live is the user's own decision, in their own config. - Nothing in this pack places an order except trader-broker, and only when all three hold: trader-risk passed that exact order today, the user typed an explicit yes for that one order in the chat, and the user clicked Allow once on Claude's own card because the order tool is set to "Needs approval" (Customize > Connectors > tool permissions). Never set an order tool to "Always allow".
- No options, margin, short selling or leverage unless the config allows it and the user confirms.
- Broker keys live in environment variables or the Claude Desktop config, never in the chat.
FAQ
What does the trader-scanner skill do?
Chart Scanner. Scans thousands of charts for setups: opening-range breakouts, flags, oversold bounces. Builds the list of US-listed common stocks, ordinary shares and ADRs from Nasdaq Trader's symbol directories, runs a pre-market scan of daily closes (20-day closing-high breakout, bull flag, reclaimed the 20-day average, oversold, oversold bounce) and an intraday opening-range breakout scan on 5-minute bars, then writes trader/watchlist.json for trader-news and trader-entry. Free Yahoo data, bar by bar. Use when the user says "scan the market", "find me setups", "what is breaking out", "opening range breakouts", "scan for bull flags", "oversold stocks", "pre-market scan", "build my watchlist", "what should I look at today", or at the start of a trading day before /trader-news.
How do I install trader-scanner?
Run npx skills add https://github.com/jakeschincariol/day-trader-skill --skill trader-scanner in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/trader-scanner/ (personal) or .claude/skills/trader-scanner/ (project).
Which AI agents can use trader-scanner?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is trader-scanner safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains trader-scanner?
It is published by jakeschincariol in jakeschincariol/day-trader-skill. It has 92 recorded installs.
More from jakeschincariol/day-trader-skill
trader-timemachine
jakeschincariol/day-trader-skill
Open the skill to read its SKILL.md instructions.
trader-entry
jakeschincariol/day-trader-skill
Open the skill to read its SKILL.md instructions.
trader-risk
jakeschincariol/day-trader-skill
Open the skill to read its SKILL.md instructions.
trader-exit
jakeschincariol/day-trader-skill
Open the skill to read its SKILL.md instructions.
trader-news
jakeschincariol/day-trader-skill
Open the skill to read its SKILL.md instructions.
trader-budget
jakeschincariol/day-trader-skill
Open the skill to read its SKILL.md instructions.
Popular business & finance skills
sales-enablement
coreyhaines31/marketingskills
When the user wants to create sales collateral, pitch decks, one-pagers, objection handling docs, or demo scripts. Also use when the user mentions 'sales deck,' 'pitch deck,' 'one-pager,' 'leave-behind,' 'objection handling,' 'deal-specific ROI analysis,' 'demo script,' 'talk track,' 'sales playbook,' 'proposal template,' 'buyer persona card,' 'battle card,' 'battlecard,' 'competitive one-pager,' 'win-loss analysis,' 'why are we losing deals,' 'loss reasons,' 'how do I respond to this objection,' 'prospect just said,' 'help my sales team,' 'sales materials,' or 'what should I give my sales reps,' 'cold call script,' or 'voicemail script.' Use this for any document or asset that helps a sales team close deals. For public competitor comparison pages, see competitors. For running buyer interviews or churn research, see customer-research. For marketing website copy, see copywriting. For cold outreach emails, see cold-email. For the offer being sold (bonuses, guarantees, pricing structure),
revops
coreyhaines31/marketingskills
When the user wants help with revenue operations, lead lifecycle management, or marketing-to-sales handoff processes. Also use when the user mentions 'RevOps,' 'revenue operations,' 'lead scoring,' 'outbound pipeline stages,' 'lead routing,' 'MQL,' 'SQL,' 'pipeline stages,' 'deal desk,' 'CRM automation,' 'marketing-to-sales handoff,' 'data hygiene,' 'leads aren't getting to sales,' 'pipeline management,' 'lead qualification,' or 'when should marketing hand off to sales.' Use this for anything involving the systems and processes that connect marketing to revenue. For cold outreach emails, see cold-email. For email drip campaigns, see emails. For pricing decisions, see pricing.
sales-funnel-blueprint
autonnel/autonnel-skills
Turn an offer into a concrete multi-step sales funnel spec - page-by-page structure, price ladder, copy outline and the metrics each step must hit. Use when asked to build a sales funnel, marketing funnel, landing page flow, lead magnet funnel, webinar funnel, tripwire or VSL funnel, when planning a product launch page flow, or when someone asks "what pages do I need" for selling something online.
pricing
coreyhaines31/marketingskills
When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions 'pricing,' 'pricing tiers,' 'freemium,' 'free trial,' 'packaging,' 'price increase,' 'value metric,' 'Van Westendorp,' 'willingness to pay,' 'monetization,' 'how much should I charge,' 'my pricing is wrong,' 'pricing page,' 'annual vs monthly,' 'per seat pricing,' 'should I offer a free plan,' 'pricing page teardown,' 'pricing page audit,' 'is my pricing page AI-readable,' or 'can AI read my pricing.' Use this whenever someone is figuring out what to charge, how to structure their plans, or wants to audit a pricing page (for humans and for the AI agents that shortlist tools). For in-app upgrade screens, see paywalls. For offer construction (bonuses, guarantees, value framing, naming) on services/courses/coaching/high-ticket B2B, see offers.
cross-border-ecommerce
nexscope-ai/ecommerce-skills
Cross-border e-commerce expansion advisor. Scores target markets on 8 weighted dimensions (market size, ecommerce penetration, competition, regulatory complexity, logistics infrastructure, payment ecosystem, cultural distance, IP protection), compares 5 fulfillment models with cost and transit data, provides country-by-country tax/duty compliance guides (EU VAT/IOSS, UK VAT, US sales tax, CA GST, AU GST, JP consumption tax), maps local payment preferences by market, and builds a phased expansion roadmap. No API key required.
pricing-strategy
coreyhaines31/marketingskills
When the user wants help with pricing decisions, packaging, or monetization strategy. Also use when the user mentions 'pricing,' 'pricing tiers,' 'freemium,' 'free trial,' 'packaging,' 'price increase,' 'value metric,' 'Van Westendorp,' 'willingness to pay,' 'monetization,' 'how much should I charge,' 'my pricing is wrong,' 'pricing page,' 'annual vs monthly,' 'per seat pricing,' or 'should I offer a free plan.' Use this whenever someone is figuring out what to charge or how to structure their plans. For in-app upgrade screens, see paywall-upgrade-cro.