Files
sanguo_quant_live/risk-management/realtime-system/README.md
T

170 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🛡️ 实时风险监控系统
**紧急开发:** 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:002026-03-21
## 许可证
MIT