监控股票持仓价格异动,当涨跌幅、成交量或价格突破阈值时,通过邮件和/或 Sonos 语音播报发出实时提醒。
curl、 jq 已安装SMTP_HOST、 SMTP_PORT、SMTP_USER 、 SMTP_PASS 、 ALERT_EMAIL_TO`sonos CLI 可用在 scripts/config.json 中设定持仓和规则:
json
{
"watchlist": [
{
"symbol": "AAPL",
"name": "Apple Inc.",
"alert_pct": 3.0,
"alert_price_above": null,
"alert_price_below": 170.0
}
],
"poll_interval_sec": 300,
"notify": {
"email": true,
"sonos": true,
"sonos_speaker": "Kitchen"
},
"api": {
"provider": "alphavantage",
"apikey_env": "ALPHAVANTAGE_API_KEY"
}
}
字段说明watchlist[].alert_pct涨跌幅超此值触发(百分比,如 3.0 表示 ±3%)watchlist[].alert_price_above价格上穿此值触发(null 不启用)watchlist[].alert_price_below价格下穿此值触发(null 不启用)poll_interval_sec轮询间隔秒数notify.email是否启用邮件提醒notify.sonos是否启用 Sonos 语音播报notify.sonos_speakerSonos 设备名称
config.json,获取持仓列表和告警规则poll_interval_sec 间隔持续监控bash
# 单次检查
bash scripts/stock_alert.sh --once
# 持续轮询
bash scripts/stock_alert.sh
# 指定自定义配置
bash scripts/stock_alert.sh --config /path/to/config.json
标准输出打印检查结果,告警信息同时发送到配置的通知渠道:
text
[2026-05-12 08:00:01] AAPL $182.50 +4.2% ⚠️ 涨幅超阈值(3.0%)
[2026-05-12 08:00:01] → 邮件已发送至 user@example.com
[2026-05-12 08:00:01] → Sonos 播报: Kitchen
脚本使用 curl 调用 SMTP 发送邮件,需配置环境变量:
变量说明SMTP_HOSTSMTP 服务器地址SMTP_PORTSMTP 端口(如 587)SMTP_USER发件邮箱SMTP_PASS邮箱密码/应用专用密码ALERT_EMAIL_TO收件邮箱
依赖 sonos CLI(参见 sonoscli 技能),播报内容示例:
"AAPL 当前价格 182.50 美元,涨幅 4.2%,超过阈值 3%"
错误处理API 限流 (429)等待后重试,最多 3 次API Key 缺失打印警告并跳过行情拉取SMTP 连接失败降级为仅控制台输出Sonos 设备不可达降级为仅控制台输出,不阻断其他通知
poll_interval_sec 不低于 300api.provider 为其他数据源,只需修改 fetch_quote 函数