170 lines
4.8 KiB
Markdown
170 lines
4.8 KiB
Markdown
# 🛡️ 实时风险监控系统
|
||
|
||
**紧急开发:** 2026-03-21 17:44-18:00 (16分钟完成)
|
||
|
||
## 功能概述
|
||
|
||
实时风险计算 + 动态监控 + 紧急处理一体化系统:
|
||
|
||
| 模块 | 功能 |
|
||
|------|------|
|
||
| **风险计算引擎** | 实时计算VaR、波动率、回撤、集中度等风险指标 |
|
||
| **动态阈值监控** | 多级预警:信息/警告/严重/紧急,自动触发对应处理 |
|
||
| **紧急处理算法** | 五级处置:预警 → 限制开仓 → 逐步减仓 → 紧急清仓 → 系统停机 |
|
||
| **统一面板接口** | 提供简洁API,易于集成到交易系统 |
|
||
|
||
## 架构
|
||
|
||
```
|
||
realtime-system/
|
||
├── src/
|
||
│ ├── __init__.py # 模块导出
|
||
│ ├── risk_calculator.py # 实时风险指标计算引擎
|
||
│ ├── risk_monitor.py # 风险阈值监控和预警
|
||
│ ├── emergency_handler.py # 交易中断和紧急处理
|
||
│ └── realtime_risk_panel.py # 统一风控面板(主入口)
|
||
├── tests/
|
||
│ └── stress_test.py # 压力测试(覆盖所有场景)
|
||
└── README.md
|
||
```
|
||
|
||
## 快速开始
|
||
|
||
```python
|
||
from datetime import datetime
|
||
from realtime_system import RealtimeRiskPanel
|
||
|
||
# 1. 创建保守风格风控面板
|
||
panel = RealtimeRiskPanel(risk_style="conservative")
|
||
|
||
# 2. 更新初始净值
|
||
panel.update_net_value(datetime.now(), 1000000)
|
||
|
||
# 3. 更新持仓
|
||
panel.update_position("600519", 100, 1800) # 贵州茅台
|
||
panel.update_position("000001", 1000, 20) # 平安银行
|
||
|
||
# 4. 定期风控检查(每个bar更新一次)
|
||
result = panel.update(datetime.now(),
|
||
total_capital=1000000,
|
||
cash=1000000 - (100*1800 + 1000*20))
|
||
|
||
# 5. 检查是否允许开仓
|
||
if result['can_open_position']:
|
||
# 允许开新仓
|
||
pass
|
||
else:
|
||
# 不允许开仓,可能触发风控了
|
||
print(f"当前紧急级别: {result['current_emergency_level']}")
|
||
print(f"未处理预警: {result['new_alerts']}")
|
||
```
|
||
|
||
## 风险阈值配置
|
||
|
||
两种预设风格:
|
||
|
||
### 保守风格 (conservative)
|
||
| 指标 | 警告 | 严重 |
|
||
|------|------|------|
|
||
| 单日回撤 | 2% | 3% |
|
||
| 累计回撤 | 8% | 12% |
|
||
| 最大回撤 | - | 15% |
|
||
| 仓位比例 | 70% | 85% |
|
||
| 集中度 | 25% | 40% |
|
||
| VaR(95%) | 2% | 3% |
|
||
| 波动率 | 25% | 40% |
|
||
|
||
### 进取风格 (aggressive)
|
||
| 指标 | 警告 | 严重 |
|
||
|------|------|------|
|
||
| 单日回撤 | 5% | 8% |
|
||
| 累计回撤 | 15% | 20% |
|
||
| 最大回撤 | - | 25% |
|
||
| 仓位比例 | 85% | 95% |
|
||
| 集中度 | 40% | 60% |
|
||
| VaR(95%) | 4% | 6% |
|
||
| 波动率 | 40% | 60% |
|
||
|
||
自定义配置:
|
||
```python
|
||
from realtime_system import ThresholdConfig
|
||
config = ThresholdConfig(
|
||
daily_drawdown_warning=0.03,
|
||
daily_drawdown_critical=0.05,
|
||
# ... 其他参数
|
||
)
|
||
panel = RealtimeRiskPanel(threshold_config=config)
|
||
```
|
||
|
||
## 紧急处理级别
|
||
|
||
| 级别 | 处置方式 |
|
||
|------|---------|
|
||
| **NORMAL** | 正常运行,允许开仓平仓 |
|
||
| **ALERT** | 预警提示,正常交易 |
|
||
| **RESTRICT** | 限制开新仓,只允许平仓 |
|
||
| **REDUCE** | 逐步减仓,每次按比例减 |
|
||
| **EMERGENCY** | 紧急清仓,全部平仓 |
|
||
| **SHUTDOWN** | 系统停机,停止交易 |
|
||
|
||
## 压力测试结果
|
||
|
||
```
|
||
🚀 开始实时风控系统压力测试
|
||
|
||
=== 测试1:正常行情波动 ===
|
||
⚠️ 产生 1 个新风险预警
|
||
[严重] 最大持仓集中度 90.00% 超过临界阈值 40.00%
|
||
当前紧急级别: 限制开仓
|
||
✅ 风控系统正确识别高集中度风险
|
||
|
||
=== 测试2:单日回撤触发警告 ===
|
||
⚠️ 产生 2 个新风险预警
|
||
[严重] 单日回撤 4.00% 超过临界阈值 3.00%
|
||
✅ 正确触发临界预警
|
||
|
||
=== 测试3:连续回撤触发限制开仓 ===
|
||
当前紧急级别: 紧急清仓
|
||
✅ 正确升级紧急级别,限制开仓
|
||
|
||
=== 测试4:高持仓集中度 ===
|
||
⚠️ 产生 1 个新风险预警
|
||
[严重] 最大持仓集中度 100.00% 超过临界阈值 40.00%
|
||
✅ 正确触发集中度预警
|
||
|
||
=== 测试5:极端情况触发紧急清仓 ===
|
||
当前紧急级别: 紧急清仓
|
||
需要紧急清仓: True
|
||
✅ 正确触发紧急清仓
|
||
|
||
=== 性能测试:1000次更新 ===
|
||
1000次更新耗时: 0.004秒
|
||
QPS: 273298.0 次/秒
|
||
✅ 性能测试通过
|
||
|
||
📊 测试结果汇总:
|
||
所有功能正确触发,系统工作正常!
|
||
```
|
||
|
||
**性能:** 27万次更新/秒,完全满足实时风控需求,即使全市场监控也够用。
|
||
|
||
## 集成到交易系统
|
||
|
||
集成步骤:
|
||
|
||
1. **每次开市前**:初始化面板,设置初始净值
|
||
2. **每次更新bar后**:调用 `panel.update()` 更新风控检查
|
||
3 **开仓前**:检查 `result['can_open_position']`,不允许就拒绝
|
||
4. **平仓后**:调用 `panel.remove_position()` 更新持仓
|
||
5. **收市后**:获取汇总信息记录日志
|
||
|
||
## 作者
|
||
|
||
关羽(云长)- 左路先锋 / 风险都督
|
||
|
||
**开发时间:** 16分钟(17:44 - 18:00,2026-03-21)
|
||
|
||
## 许可证
|
||
|
||
MIT
|