关于 price-alerts
这项 Skill 根据最新报价评估美国市场自选列表规则,并仅报告新触发的价格提醒。它处理冷却和防重复状态、检查市场时段,并可选发送通知;不会下单或修改订单。
主要功能
- 01评估价格与指标规则
- 02仅报告新提醒
- 03应用锁存与冷却机制
- 04检查市场时段和报价陈旧情况
- 05支持文本与 JSON 输出
- 06支持可选通知渠道
适用场景
- 01监控自选列表的价位、止损和目标价
- 02检查日内变动、指标和财报日期
- 03发送配置的提醒通知
- 04查看触发条件且不更新冷却状态
MCP 相关
可使用已连接的 Alpaca 或 TradingView MCP 服务进行只读报价或指标查询,替代脚本;提醒规则和防重复状态处理保持不变。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ eli-alvarado/ us-watchlist-alerts --skill price-alerts安装后在 Claude Code 中输入/price-alerts确认已加载。
详细介绍
价格提醒(美国市场)
根据最新报价评估自选列表(参见 watchlist-manager)中的提醒规则,并且仅报告新提醒。
不构成财务建议。绝不要下单、修改或取消订单——即使提醒触发,即使已连接经纪商工具,除非用户在本次对话中明确确认了该笔具体订单。
运行
python scripts/alerts.py --watchlist watchlist.json --state .alert_state.json # text output
python scripts/alerts.py --format json # machine-readable
python scripts/alerts.py --force-session # evaluate even when market closed
python scripts/alerts.py --dry-run # don't update cooldown state
python scripts/alerts.py --notify # also deliver via WATCHLIST_NOTIFY sinks
python scripts/market_calendar.py # current ET session
输出:ALERT <message> 行、no new alerts,或“非提醒时段”说明。数据错误输出到 stderr,标记为 WARN。NOTIFY <sink> 用于确认送达;接收端故障会标记为 WARN notify …,不得中止检查。绝不要将通知接收端视为经纪商。
提醒类型
| 类型 | 值 | 触发条件 | 类别 |
|---|---|---|---|
price_above / price_below | 价格 | 最新价 >= / <= 值 | 水平 |
stop_hit | 价格(默认:股票代码的 stop) | 多头:最新价 <= 止损价;空头:最新价 >= 止损价 | 水平(设置 stop 时隐式启用) |
target_hit | - | 最新价突破任意 targets 条目 | 水平(设置 targets 时隐式启用) |
pct_change_up / pct_change_down / pct_move | % | 相较前收盘价的变动 >= 值 | 每日 |
gap_up / gap_down | %(默认 2) | 开盘价相较前收盘价 | 每日 |
new_52w_high / new_52w_low | - | 最新价突破此前 252 个交易日的区间 | 每日 |
near_52w_high / near_52w_low | %(默认 settings.near_52w_pct) | 距 52 周高点或低点在值%以内 | 类每日(水平锁存) |
golden_cross / death_cross | fast、slow(50/200) | 最新柱上的快速 SMA 与慢速 SMA 交叉 | 每日 |
cross_above_ma / cross_below_ma | MA 长度(默认 50) | 收盘价与其 SMA 交叉 | 每日 |
rsi_above / rsi_below | RSI 水平;可选 period(14) | 根据日收盘价计算的 Wilder RSI | 水平 |
iv_above / iv_below | IV 百分比 | 非官方 Yahoo ATM IV(最近到期日);缺失或为 0 时跳过 | 水平 |
volume_spike | 倍数(默认 2.0) | 今日成交量 >= 值 x 20 日均量 | 每日 |
earnings_within | 天数(默认 3) | 下一次财报日期在 N 天内 | 每日 |
intraday_range_pct | % | (day_high-day_low)/prev_close;缺少最高价或最低价时跳过 | 每日 |
任何规则都可以设置 cooldown_minutes,以覆盖 settings.cooldown_minutes。
防刷屏规则(在 scripts/alerts.py 中实现,状态保存在 .alert_state.json)
- 水平提醒会锁存:触发后将保持静默,直到价格反向越过该水平
rearm_pct(默认 0.5%)。股价在 240 美元附近徘徊时,不会反复提醒。iv_*会在 ATM IV 不再超过阈值时重新启用。 - 每日事件提醒:每个交易日、每个股票代码/类型最多触发一次。
- 冷却时间(
cooldown_minutes,默认 240)适用于每次再次触发。 - 每次运行上限为
max_alerts_per_run(默认 20)。超过上限的提醒不会写入状态,因此下次运行时仍可能触发。如果触发很多提醒,请汇总(“7 条提醒,TSLA 占 4 条”),而不要输出大段文字。 - 如果状态文件缺失或损坏,则从头开始,但要提醒用户本次运行可能出现重复提醒。
- 每个
targets[]水平都是独立锁存的target_hit(T1 触发不会屏蔽 T2)。
市场交易时段(America/New_York,由 scripts/market_calendar.py 处理)
- 盘前 04:00-09:30,常规时段 09:30-16:00,盘后 16:00-20:00 ET;提前收盘日(感恩节次日、圣诞前夜、若 7 月 3 日为工作日)于 13:00 收盘,盘后时段延长至 17:00。
- NYSE 假日:元旦(周六时不补休)、马丁·路德·金纪念日、总统日、耶稣受难日、阵亡将士纪念日、六月节、独立日、劳动节、感恩节、圣诞节(周六则周五休市,周日则周一休市)。临时休市:
data/holidays_overrides.json中的条目、NYSE_EXTRA_CLOSURES/settings.extra_closures,以及(配置了 Alpaca 密钥时)官方日历中缺失的工作日。如果报价在日历显示开市的工作日显得过时,请说明这一点。 settings.sessions控制提醒运行的时段;默认值为["regular"]。扩展交易时段请添加"pre"/"after"——请注意,扩展时段的报价流动性较低,免费数据源可能有延迟。- 始终使用 ET 标注时间(如果知道用户的当地时间,也一并注明,例如“10:05 ET / 9:05 CT”)。
数据源(scripts/quotes.py,按以下顺序自动回退)
--fixture路径(如果提供;仅用于测试/演示)。- 如果设置了
ALPACA_API_KEY_ID和ALPACA_API_SECRET_KEY,则使用 Alpaca 快照和日线数据(美国官方数据源)。 - 如果已安装
yfinance,则使用它(pip install yfinance)。 - Yahoo 公共 Chart API(使用标准库,非官方,尽力获取):先查询
query1.finance.yahoo.com,再查询query2。 - 如果设置了
FINNHUB_API_KEY,则使用 Finnhub 报价和 K 线。 - 如果设置了
ALPHAVANTAGE_API_KEY,则使用 Alpha Vantage 日线数据。
使用 --provider 或 WATCHLIST_PROVIDER 强制指定数据源。HTTP 429/5xx 错误会触发重试;失败会标记为 QuoteError(包含数据源、HTTP 状态码和提示)。免费数据可能延迟约 15 分钟;精度很重要时请说明这一点。
财报日期会在获取报价后填充,按以下顺序使用第一个可用来源:已有字段(yfinance/fixture)→ Yahoo calendarEvents(无需密钥)→ Finnhub 财报日历 → Alpha Vantage EARNINGS_CALENDAR。报价中的 earnings_source 会指出最终采用的数据源。
过时报价: --stale-after / WATCHLIST_STALE_AFTER / settings.stale_after_seconds(默认值为 900)。常规交易时段内,如果 as_of 早于该时间,则发出警告。设为 0 可禁用。
平值隐含波动率(ATM IV): 仅对设有 iv_above/iv_below 的股票代码获取。使用非官方 Yahoo 期权链,选择最近到期日,并计算平值看涨/看跌期权的平均值(百分比)。这不是 IV 排名。运行 python scripts/quotes.py AAPL --iv 可查看详情。
通知(可选): 设置 WATCHLIST_NOTIFY=ntfy,slack,webhook,desktop,file 和/或使用 --notify。环境变量见 README。数据为空、跳过或处于 dry-run 模式时不发送通知。发送错误仅作为警告处理。
已知限制: 临时休市信息存储在 data/holidays_overrides.json(内容不完整)中,另有环境变量/设置项,以及可选的 Alpaca 官方日历叠加(按日缓存)。Yahoo 端点并非官方来源。详见 docs/LIMITATIONS.md。
MCP 选项: 如果已连接 alpaca MCP 服务(alpacahq/alpaca-mcp-server)或 tradingview MCP(atilaahmettaner/tradingview-mcp),可以使用它们代替脚本获取报价/指标,然后应用完全相同的规则和防刷逻辑(按相同格式读取/写入 .alert_state.json)。经纪商 MCP 仅可用于只读调用。
报告格式
🔔 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.md)。
从聊天中创建提醒
“如果 AAPL 跌破 200 就提醒我” -> python scripts/watchlist.py update AAPL --alert price_below:200 --append(如果列表中尚无该股票代码,请先添加)。用通俗语言复述并确认规则。