mcpField
P
price-alerts

price-alerts

github.com/eli-alvarado其他310 次安装6 天前更新
代码仓库

关于 price-alerts

这项 Skill 根据最新报价评估美国市场自选列表规则,并仅报告新触发的价格提醒。它处理冷却和防重复状态、检查市场时段,并可选发送通知;不会下单或修改订单。

主要功能

  1. 01评估价格与指标规则
  2. 02仅报告新提醒
  3. 03应用锁存与冷却机制
  4. 04检查市场时段和报价陈旧情况
  5. 05支持文本与 JSON 输出
  6. 06支持可选通知渠道

适用场景

  1. 01监控自选列表的价位、止损和目标价
  2. 02检查日内变动、指标和财报日期
  3. 03发送配置的提醒通知
  4. 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_crossfast、slow(50/200)最新柱上的快速 SMA 与慢速 SMA 交叉每日
cross_above_ma / cross_below_maMA 长度(默认 50)收盘价与其 SMA 交叉每日
rsi_above / rsi_belowRSI 水平;可选 period(14)根据日收盘价计算的 Wilder RSI水平
iv_above / iv_belowIV 百分比非官方 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,按以下顺序自动回退)

  1. --fixture 路径(如果提供;仅用于测试/演示)。
  2. 如果设置了 ALPACA_API_KEY_ID 和 ALPACA_API_SECRET_KEY,则使用 Alpaca 快照和日线数据(美国官方数据源)。
  3. 如果已安装 yfinance,则使用它(pip install yfinance)。
  4. Yahoo 公共 Chart API(使用标准库,非官方,尽力获取):先查询 query1.finance.yahoo.com,再查询 query2。
  5. 如果设置了 FINNHUB_API_KEY,则使用 Finnhub 报价和 K 线。
  6. 如果设置了 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(如果列表中尚无该股票代码,请先添加)。用通俗语言复述并确认规则。

评论

支持 Markdown