用途
price-alert 是一个事件驱动的价格告警技能,专为"实时信号"场景设计。定时摘要类任务(digest、token-movers 等)在固定时间运行,无法在价格刚创出新高或一小时内剧烈波动时即时告知运营者。本技能填补这一时间窗口:三类价格事件值得当日即时提醒,其余噪音不予打扰。
监控的三类事件
- 历史新高(ATH):被跟踪代币创出新的历史最高价。无论涨幅大小,均视为重要时间线事件。
- 1小时剧烈波动(±20%):可能是买盘涌入或清算级联,均会改变运营者的后续动作。
- 运营者设定的目标跨越:当价格突破 $X(通常是个人目标或与某条推文/发布相关的价位)时提醒。每个目标每个方向仅告警一次。
状态与配置
读取:
memory/MEMORY.md中 "Tracked Token" 段落——被跟踪代币的合约地址与链。若缺失则静默退出。memory/topics/price-alert-state.json——记录最新 ATH、各事件类型的最后告警时间戳、目标跨越历史。首次运行时以默认值创建。
写入:
memory/topics/price-alert-state.json——每次运行更新状态。memory/logs/${today}.md——每次运行写入一个日志块,即使成功(OK)也记录。- 通过
./notify发送通知——仅在有事件触发时。
无需新增密钥。使用无需密钥的 DexScreener 接口;当公开 curl GET 不稳定时回退到 WebFetch。
状态 schema 关键不变量
ath.price_usd只单调递增。若某次运行看到的价格低于已存 ATH,不改动 ATH。last_alerts.*驱动 4 小时去重窗口,每个事件有独立时钟。targets.${price}.side在目标首次被观察时若当前价低于目标则为above(运营者等价格爬升到该位),否则为below。设定后不再翻转。targets.${price}.hit_at在跨越发生的那次运行设定;announced_at在通知发出的那次运行设定。目标告警不会重复触发,实践中二者相等。
使用方式
参数(var):
- 可选。传入一个或多个目标价位(以逗号分隔的 USD 数字,允许科学计数法),当价格跨越任一目标时触发一次性告警。留空则仅运行 ATH 与剧烈波动两个门。
- 传入
dry-run可跳过 notify(状态仍更新)。 - 传入
set-target:<price>(Telegram 强制回复的格式)可注册一个目标并获得一行确认。
运行步骤:
- 解析 var(识别 set-target、dry-run、目标列表)。
- 解析被跟踪代币(从 MEMORY.md 读取合约与链)。
- 获取当前价格(DexScreener 为主,WebFetch 回退;选取配置链上流动性最深的交易对)。
- 评估 ATH 门。
- 评估 1 小时剧烈波动门。
- 评估目标跨越门。
- 合并判定并发送通知。
- 原子持久化状态。
- 写入日志。
告警模板: 分别为 ATH、SHARP_MOVE、TARGET_HIT 三类,包含价格、前高、24小时/1小时涨跌、图表链接。剧烈波动的方向措辞按符号硬编码(正=买盘,负=卖压),不加主观解读。
set-target 强制回复: 在一次真正的 ATH 告警后(基线之后、非去重重复),且当前没有未命中的运营者目标高于现价时,发送强制回复提示运营者回复一个价位;回复路由回 var=set-target:<price>,注册目标后回一行确认。
退出与状态码
PRICE_ALERT_OK:运行完成,无事件触发(不通知)。PRICE_ALERT_ATH:新的严格历史新高(基线之后)(通知)。PRICE_ALERT_SHARP_MOVE:1小时 ±20%,在去重窗口外(通知)。PRICE_ALERT_TARGET_HIT:首次跨越运营者目标(通知)。PRICE_ALERT_DRY_RUN:dry-run 模式(不通知,状态更新)。PRICE_ALERT_NO_TOKEN:MEMORY.md 中未配置被跟踪代币(不通知)。PRICE_ALERT_TOKEN_CHANGED:合约自上次运行变更,状态重置(不通知)。PRICE_ALERT_FETCH_FAIL:curl 与 WebFetch 均失败(不通知)。PRICE_ALERT_BAD_PRICE:API 返回异常或零价格(不通知)。PRICE_ALERT_BAD_VAR:var 非空且非 dry-run,但未产生有效目标(不通知)。PRICE_ALERT_STATE_CORRUPT:写入后 jq 校验失败,已从 .bak 恢复。
适用场景与限制
适用: 需要按当日实时信号跟踪某代币的 ATH、剧烈波动与目标跨越的场景,尤其适合希望避开定时摘要延迟的运营者。
限制与约束:
- 每个事件每 4 小时窗口最多一次告警,
last_alerts.*为唯一去重依据。 - 目标告警每方向仅一次,一旦
hit_at设定便不再重触发,即便价格回落再穿越也不重发;运营者需新增目标以获得持续信号。 - 无基线告警:全新状态文件或代币变更后的首次运行不得发送 ATH 通知,所存价格仅为基线。
- 不做主观解读,剧烈波动方向措辞按符号硬编码。
- 仅选用流动性最深的交易对作为规范价格,不混合池均价。
- 状态写入为原子操作并经 jq 校验,损坏时从 .bak 恢复。
- 仅追加当日日志,不修改历史日志。
- 目标为绝对 USD 而非百分比。
- 同一分钟重跑具幂等性,相同价格输入产生相同状态与零新通知。