Skip to content

一个基于 Rust 的实时金融风险监控系统,自动监控美国国债收益率、外汇、加密货币和股票市场波动。

Notifications You must be signed in to change notification settings

amazingchow/risk_management_sentinel

Repository files navigation

一个基于 Rust 的实时金融风险监控系统,自动监控美国国债收益率、外汇、加密货币和股票市场波动。

功能特性

  • 🔍 实时监控: 每5分钟自动检查市场数据
  • 📊 多维度监控:
    • 国债监控: 美国10年期国债收益率超过4.5%时告警
    • 外汇监控: 监控日元等外汇指数的价格波动
    • 加密货币监控: 监控 BTC、ETH、BNB、SOL 等主流币种价格波动
    • 股票和指数监控: 监控纳斯达克、标普500、英伟达、特斯拉、拼多多等股票和指数
  • 📧 智能告警: 触发阈值时自动发送邮件通知,1小时内不重复发送
  • 高性能: 基于 Tokio 异步运行时,所有监控任务并发执行,高效稳定
  • 🏗️ 模块化设计: 使用 trait-based 架构,易于扩展新的监控类型

监控项目

1. 美国10年期国债收益率监控

  • 监控指标: ^TNX (美国10年期国债收益率)
  • 告警阈值: 收益率 > 4.5%
  • 检查频率: 每5分钟
  • 数据来源: Yahoo Finance API

2. 外汇监控

名称 代码 监控周期 告警阈值
日元指数 JPY=X 1天 涨幅 > 4%
  • 检查频率: 每5分钟
  • 数据来源: Yahoo Finance API
  • 独立告警: 每个外汇独立计时,互不影响
  • 说明: 支持双向监控(涨跌幅)

3. 加密货币价格监控

币种 代码 监控周期 告警阈值
比特币 BTC-USD 1天 跌幅 > 8%
以太坊 ETH-USD 1天 跌幅 > 10%
币安币 BNB-USD 1天 跌幅 > 12%
索拉纳 SOL-USD 1天 跌幅 > 15%
  • 检查频率: 每5分钟
  • 数据来源: Yahoo Finance API
  • 独立告警: 每个币种独立计时,互不影响
  • 说明: 支持双向监控(涨跌幅)

4. 股票和指数监控

名称 代码 监控周期 告警阈值
纳斯达克指数 ^IXIC 1天 跌幅 > 5%
标普500指数 ^GSPC 1天 跌幅 > 5%
英伟达 NVDA 1天 跌幅 > 8%
特斯拉 TSLA 1天 跌幅 > 10%
拼多多 PDD 1天 跌幅 > 10%
  • 检查频率: 每5分钟
  • 数据来源: Yahoo Finance API
  • 独立告警: 每个股票/指数独立计时,互不影响
  • 说明: 支持双向监控(涨跌幅)

快速开始

环境配置

  1. 创建环境变量文件:
# 创建 .env 文件并配置以下变量
RUST_LOG=info
# Resend 邮件服务配置
[email protected]
[email protected]  
RESEND_API_KEY=your-resend-api-key

本地开发

# 本地运行
make local_run

生产环境

# 构建 Docker 镜像
make image
# 运行容器
make run_container

告警机制

  • 频率控制: 每个监控项1小时内最多发送1次告警邮件
  • 独立计时: 不同监控项的告警时间独立计算
  • 详细信息: 邮件包含具体数值、变化率、阈值等详细信息
  • 并发执行: 所有监控任务并发执行,互不阻塞

自定义配置

修改监控频率

编辑 src/main.rs 中的定时器间隔:

// 修改为300秒 = 5分钟
let mut interval = tokio::time::interval(tokio::time::Duration::from_secs(300));

调整告警阈值

修改 src/main.rs 中对应监控器的阈值参数:

  • 国债收益率: 修改 TreasuryYieldMonitor 配置中的阈值参数
  • 外汇: 修改 ForexMonitor 配置中的阈值参数
  • 加密货币: 修改 CryptoMonitor 配置中的阈值参数
  • 股票和指数: 修改 StockMonitor 配置中的阈值参数

说明:

  • 正数阈值 = 涨幅监控(如 5.0 表示涨幅超过5%时告警)
  • 负数阈值 = 跌幅监控(如 -10.0 表示跌幅超过10%时告警)

开发指南

项目架构

系统采用 trait-based 架构设计:

src/
├── main.rs                   # 主程序入口,监控器实例化和调度
├── monitors/                 # 监控器模块
│   ├── mod.rs                # 模块导出
│   ├── base.rs               # Monitor trait 定义
│   ├── treasury_yield.rs     # 国债收益率监控器
│   ├── forex.rs              # 外汇监控器
│   ├── crypto.rs             # 加密货币监控器
│   └── stock.rs              # 股票和指数监控器
└── utils/                    # 工具模块
    ├── mod.rs                # 模块导出
    ├── notification.rs       # 邮件通知工具
    ├── rate_limiter.rs       # API 限流工具
    └── yahoo_api.rs          # Yahoo Finance API 客户端

添加新的监控模块

  1. 创建新模块文件

src/monitors/ 目录创建新监控器文件,例如 commodity.rs

use async_trait::async_trait;
use crate::monitors::base::{Monitor, MonitorCheckResult, MonitorConfig};

#[derive(Clone)]
pub struct CommodityMonitor {
    config: MonitorConfig,
}

impl CommodityMonitor {
    pub fn new(config: MonitorConfig) -> Self {
        Self { config }
    }
}

#[async_trait]
impl Monitor for CommodityMonitor {
    // 实现 Monitor trait 的所有方法
    fn get_ticker_symbol(&self) -> &str {
        &self.config.ticker_symbol
    }
    
    fn get_display_name(&self) -> &str {
        &self.config.display_name
    }
    
    fn get_period_days(&self) -> i64 {
        self.config.period_days
    }
    
    fn get_threshold_percent(&self) -> f64 {
        self.config.threshold_percent
    }
    
    fn get_asset_type(&self) -> &str {
        "大宗商品"
    }
    
    async fn check(&self) -> Result<MonitorCheckResult, Box<dyn std::error::Error + Send + Sync>> {
        // 实现具体的监控逻辑
        // ...
    }
}
  1. 导出新模块

src/monitors/mod.rs 中添加:

pub mod commodity;
  1. 在主程序中使用

src/main.rsmonitors 向量中添加新监控器实例,并在克隆逻辑中添加相应的处理。

常见问题

Q: 为什么没有收到告警邮件?

  • 检查 .env 文件中的 Resend API 配置是否正确
  • 确认触发条件已满足
  • 查看日志确认是否因1小时限制而跳过发送

Q: 如何修改检查频率?

  • 修改 main.rs 中的 interval 时间间隔

Q: 能否监控更多资产?

  • 可以,系统支持所有 Yahoo Finance 支持的资产代码
  • main.rsmonitors 向量中添加相应的监控器实例即可
  • 支持的资产类型:股票、指数、加密货币、外汇、ETF等

Q: 如何设置涨幅监控?

  • 将阈值参数设置为正数(如 5.0 表示涨幅超过5%时告警)
  • 适用于外汇、商品等需要监控异常涨幅的场景

Q: 数据源是否可靠?

  • 使用 Yahoo Finance 官方 API,数据质量较高
  • 数据为延迟数据,非交易所实时数据
  • 建议仅作为风险预警参考,不作为实际交易依据

Q: 监控器如何扩展?

  • 系统采用 trait-based 架构,易于扩展
  • 创建新监控器只需实现 Monitor trait
  • 参考 forex.rscrypto.rs 等现有监控器的实现

免责声明: 本系统仅供个人学习和研究使用,不构成任何投资建议。投资有风险,决策需谨慎。

About

一个基于 Rust 的实时金融风险监控系统,自动监控美国国债收益率、外汇、加密货币和股票市场波动。

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published