一个基于 Go 的加密货币价格监控服务,支持多个交易所数据源和自定义告警规则。
- 🔄 多数据源容错:
- 实时价格:Binance、Bybit、Coinbase、Kraken(自动切换)
- 历史价格:Binance、Bybit K线API(自动切换)
- 📊 双重告警机制:
- 💰 价格告警:价格高于/低于阈值时触发
- 📈 涨跌幅告警:涨跌幅超过指定百分比时触发(当日/15分钟)
- 📱 推送通知:通过 ntfy 发送告警消息
- ⚙️ TOML 配置:所有配置项可通过配置文件管理
- 🚀 基于 easy 框架:使用 github.com/weblazy/easy 的 HTTP 客户端和配置管理
- 🛡️ 高可用设计:无需本地存储,所有数据从API实时获取
go build -o notify main.go编辑 config.toml 文件,修改以下配置:
# 推送通知配置
[Notify]
NtfyTopic = "your-topic-name" # 修改为你自己的 topic
NtfyUrl = "https://ntfy.sh/your-topic-name"
# 价格告警规则
[[PriceAlertRules]]
Symbol = "BTC"
Threshold = 60000.0
Comparison = "<" # "<" (低于) 或 ">" (高于)
# 涨跌幅告警规则
[[ChangeAlertRules]]
Symbol = "BTC"
ChangePercent = 10.0 # 涨跌幅超过 10%使用启动脚本:
./start.sh或手动设置环境变量:
export EasyConfigType=file
export EasyConfigFile=./config.toml
./notify[Api]
BinanceUrl = "https://api.binance.com/api/v3/ticker/price"
BinanceKlineUrl = "https://api.binance.com/api/v3/klines" # K线数据(历史价格)
BybitUrl = "https://api.bybit.com/v5/market/tickers?category=spot"
BybitKlineUrl = "https://api.bybit.com/v5/market/kline" # K线数据(历史价格)
CoinbaseUrlTemplate = "https://api.coinbase.com/v2/prices/%s-USD/spot"
KrakenUrlTemplate = "https://api.kraken.com/0/public/Ticker?pair=%s"[Monitor]
CheckIntervalSeconds = 10 # 检查间隔(秒)
AlertCooldownMinutes = 5 # 告警冷却时间(分钟)当价格达到指定阈值时触发告警:
[[PriceAlertRules]]
Symbol = "BTC" # 币种符号
Threshold = 60000.0 # 阈值价格
Comparison = "<" # 比较类型:"<"(低于)或 ">"(高于)
[[PriceAlertRules]]
Symbol = "ETH"
Threshold = 2000.0
Comparison = "<"支持两种时间周期的涨跌幅监控:
从当天第一次记录的价格(开盘价)开始计算涨跌幅:
[[ChangeAlertRules]]
Symbol = "BTC" # 币种符号
ChangePercent = 10.0 # 涨跌幅阈值(百分比)
Period = "daily" # 当日涨跌幅
[[ChangeAlertRules]]
Symbol = "ETH"
ChangePercent = 20.0
Period = "daily"从15分钟前的价格开始计算涨跌幅:
[[ChangeAlertRules]]
Symbol = "BTC" # 币种符号
ChangePercent = 5.0 # 涨跌幅阈值(百分比)
Period = "15m" # 15分钟涨跌幅
[[ChangeAlertRules]]
Symbol = "ETH"
ChangePercent = 10.0
Period = "15m"说明:
- 当日涨跌幅:
- 基准价格:通过K线API 获取当日开盘价(1d K线)
- 无需本地存储,每次实时从API获取
- 适合监控全天趋势
- 15分钟涨跌幅:
- 基准价格:通过K线API 获取15分钟前的价格
- 使用最近两根15分钟K线数据计算
- 适合监控短期剧烈波动
- 无论上涨还是下跌,只要绝对值超过阈值就会告警
- 每个币种+周期组合有独立的冷却时间
- 日志会同时显示当日涨跌幅和15分钟涨跌幅
- 优势:
- 无需本地存储历史价格,直接使用交易所提供的K线数据
- 多数据源容错:历史价格获取支持自动切换(Binance → Bybit),确保服务稳定性
-
EasyConfigType: 配置类型,可选值:file: 从文件加载配置local: 从字符串加载配置nacos: 从 Nacos 配置中心加载
-
EasyConfigFile: 配置文件路径(当EasyConfigType=file时使用)
系统实现了完整的多数据源容错机制,确保服务高可用:
数据源优先级:Binance → Bybit → Coinbase → Kraken
请求流程:
┌─────────────┐
│ Binance API │ ──失败──> ┌────────────┐
└─────────────┘ │ Bybit API │ ──失败──> ...
└────────────┘
数据源优先级:Binance K线 → Bybit K线
当日开盘价(daily):
- Binance:
/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=1 - Bybit:
/v5/market/kline?category=spot&symbol=BTCUSDT&interval=D&limit=1
15分钟前价格(15m):
- Binance:
/api/v3/klines?symbol=BTCUSDT&interval=15m&limit=2 - Bybit:
/v5/market/kline?category=spot&symbol=BTCUSDT&interval=15&limit=2
| 数据类型 | Binance | Bybit | Coinbase | Kraken |
|---|---|---|---|---|
| 实时价格 | ✅ | ✅ | ✅ | ✅ |
| 日K线(1d) | ✅ | ✅ | ❌ | ❌ |
| 15分钟K线 | ✅ | ✅ | ❌ | ❌ |
✅ 静默切换:当主数据源失败时,自动静默切换到备用数据源,不中断服务 ✅ 独立容错:实时价格和历史价格使用独立的容错机制 ✅ 零配置:用户无需关心使用哪个数据源,系统自动选择可用源 ✅ 高可用性:只要有一个数据源可用,服务就能正常运行 ✅ 无状态设计:无需本地存储历史价格,所有数据从API实时获取
当日涨跌幅:
涨跌幅 = (当前价格 - 当日开盘价) / 当日开盘价 × 100%
- 基准价格:通过K线API获取当日第一根K线的开盘价
- 每天自动更新,无需手动重置
15分钟涨跌幅:
涨跌幅 = (当前价格 - 15分钟前价格) / 15分钟前价格 × 100%
- 基准价格:通过K线API获取15分钟前一根K线的收盘价
- 每15分钟滚动更新
- github.com/weblazy/easy - HTTP 客户端和配置管理
- ntfy - 推送通知服务
MIT