Skip to content

weblazy/notify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

加密货币价格监控服务

一个基于 Go 的加密货币价格监控服务,支持多个交易所数据源和自定义告警规则。

功能特性

  • 🔄 多数据源容错:
    • 实时价格:Binance、Bybit、Coinbase、Kraken(自动切换)
    • 历史价格:Binance、Bybit K线API(自动切换)
  • 📊 双重告警机制:
    • 💰 价格告警:价格高于/低于阈值时触发
    • 📈 涨跌幅告警:涨跌幅超过指定百分比时触发(当日/15分钟)
  • 📱 推送通知:通过 ntfy 发送告警消息
  • ⚙️ TOML 配置:所有配置项可通过配置文件管理
  • 🚀 基于 easy 框架:使用 github.com/weblazy/easy 的 HTTP 客户端和配置管理
  • 🛡️ 高可用设计:无需本地存储,所有数据从API实时获取

快速开始

1. 编译

go build -o notify main.go

2. 配置

编辑 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%

3. 启动

使用启动脚本:

./start.sh

或手动设置环境变量:

export EasyConfigType=file
export EasyConfigFile=./config.toml
./notify

配置说明

API 端点配置

[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 = "<"

涨跌幅告警规则

支持两种时间周期的涨跌幅监控:

当日涨跌幅(daily)

从当天第一次记录的价格(开盘价)开始计算涨跌幅:

[[ChangeAlertRules]]
Symbol = "BTC"           # 币种符号
ChangePercent = 10.0     # 涨跌幅阈值(百分比)
Period = "daily"         # 当日涨跌幅

[[ChangeAlertRules]]
Symbol = "ETH"
ChangePercent = 20.0
Period = "daily"

15分钟涨跌幅(15m)

从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  │ ──失败──> ...
                          └────────────┘

历史价格获取(K线数据)

数据源优先级: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分钟滚动更新

依赖

许可证

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published