Loading...
Loading...
Check a US stock watchlist for price alerts - price above/below, % daily move, gaps, 52-week highs/lows, moving-average crosses, RSI, ATM IV, volume spikes, intraday range, stop/target hits, and upcoming earnings - with dedupe, cooldowns, NYSE market hours, optional ntfy/Slack/webhook delivery, pre/after-market, holidays and US/Eastern time. Use when the user asks "any alerts?", "check my watchlist", "alert me if AAPL drops below 200", "send alerts to ntfy", or when running a scheduled/heartbeat check.
npx skill4agent add eli-alvarado/us-watchlist-alerts price-alertswatchlist-managerscripts/npx skills addscripts/python3 scripts/watchlist.py init # copy examples/watchlist.json if missing
python3 scripts/quickstart.py # offline fixture demo (labeled, not live)
python3 scripts/alerts.py --watchlist watchlist.json --state .alert_state.json # text output
python3 scripts/alerts.py --format json # machine-readable
python3 scripts/alerts.py --force-session # evaluate on weekends / holidays too
python3 scripts/alerts.py --dry-run # don't update cooldown state
python3 scripts/alerts.py --notify # also deliver via WATCHLIST_NOTIFY sinks
python3 scripts/market_calendar.py # current ET sessionALERT <message>no new alertsmarket closed, showing last regular close--force-sessionmarket closed (weekend|holiday). Next session YYYY-MM-DD--force-sessionWARNearnings_erroriv_errorNOTIFY <sink>WARN notify …| type | value | fires when | kind |
|---|---|---|---|
| price | last >= / <= value | level |
| price (default: ticker | long: last <= stop; short: last >= stop | level (implicit if |
| - | last crosses any | level (implicit if |
| % | last vs prior close (after hours: last regular close). A recovered session low does not fire | daily |
| % (default 2) | open vs prior close | daily |
| - | last beyond prior 252-session range | daily |
| % (default settings.near_52w_pct) | within value% of 52w extreme | daily-ish (level latch) |
| | SMA fast crosses slow on latest bar | daily |
| MA length (default 50) | last close crosses its SMA | daily |
| RSI level; optional | Wilder RSI on daily closes | level |
| IV percent | unofficial Yahoo ATM IV (nearest expiry); skip if missing/0 | level |
| multiple (default 2.0) | today's volume >= value x 20-day avg | daily |
| days (default 3) | next earnings date within N days | daily |
| % | | daily |
| % | opt-in session low/high vs prior close. Catches a −3% low that recovered into the close | daily |
| % | alias: expands to both | daily |
cooldown_minutessettings.cooldown_minutespct_change_*pct_moveintraday_low_pctintraday_extreme_pctscripts/alerts.py.alert_state.jsonrearm_pctiv_*cooldown_minutesmax_alerts_per_runtargets[]target_hitscripts/market_calendar.pydata/holidays_overrides.jsonNYSE_EXTRA_CLOSURESsettings.extra_closuressettings.sessions["regular"]last_close--force-session"pre""after"scripts/quotes.py--fixtureALPACA_API_KEY_IDALPACA_API_SECRET_KEYyfinancepip install yfinancequery1.finance.yahoo.comquery2prev_closepreviousCloseclose: NoneFINNHUB_API_KEYALPHAVANTAGE_API_KEY--providerWATCHLIST_PROVIDERQuoteErrorcalendarEventsearnings-dateearnings_sourceearnings_error--stale-afterWATCHLIST_STALE_AFTERsettings.stale_after_secondsas_of0iv_aboveiv_belowiv_errorpython3 scripts/quotes.py AAPL --ivWATCHLIST_NOTIFY=ntfy,slack,webhook,desktop,file--notifydata/holidays_overrides.jsondocs/LIMITATIONS.mdalpacatradingview.alert_state.json🔔 3 new alerts (10:05 ET, regular session, data: yahoo, ~15m delayed)
- AAPL $241.50 is above $240.00 (thesis: services margin; stop $210, T1 $250)
- TSLA down -6.0% today, gapped down -5.0%, volume 3.0x avg
- TSLA reports earnings in 1 day (2026-10-16)HEARTBEAT.mdpython scripts/watchlist.py update AAPL --alert price_below:200 --append