101 lines
3.0 KiB
Markdown
101 lines
3.0 KiB
Markdown
# 量化策略风控模块
|
||
|
||
## 功能说明
|
||
|
||
本模块实现了四层风控体系,是量化策略的生命线:
|
||
|
||
### 1. 单票止损(SingleStockRiskControl)
|
||
- 默认规则:亏损达到 **15%** 强制止损
|
||
- 可配置:支持自定义止损比例
|
||
- 接口:`check_stop_loss(stock)` 检查是否触发止损
|
||
|
||
### 2. 组合回撤分级风控(PortfolioDrawdownRiskControl)
|
||
分级降仓规则:
|
||
|
||
| 总回撤 | 目标仓位 | 说明 |
|
||
|--------|----------|------|
|
||
| <10% | 100% | 正常运行,满仓操作 |
|
||
| ≥10% | 50% | 降仓一半,控制风险 |
|
||
| ≥20% | 25% | 保留四分之一仓位 |
|
||
| ≥25% | 0% | 全部清仓,停止交易休息 |
|
||
|
||
- 可配置:支持自定义回撤阈值和降仓比例
|
||
- 接口:`need_rebalance(portfolio)` 返回是否需要调整仓位
|
||
|
||
### 3. 黑天鹅过滤(BlackSwanFilter)
|
||
开仓前直接排除以下风险票:
|
||
- ✅ **ST股票**:排除退市风险
|
||
- ✅ **跌停股票**:流动性风险+继续下跌风险
|
||
- ✅ **财务造假问题股**:提前排除暴雷风险
|
||
- ✅ **低流动性**:默认日成交额 < 5000万 排除
|
||
|
||
- 可配置:支持自定义最小成交额阈值
|
||
- 接口:`filter_stock(stock)` 返回是否通过 + 原因
|
||
|
||
### 4. 总风控控制器(RiskController)
|
||
整合所有规则,提供两个核心入口:
|
||
- `pre_trade_check(stock, portfolio)`:开仓前检查,黑天鹅过滤+仓位检查
|
||
- `post_trade_check(stocks, portfolio)`:收盘后检查,止损+降仓检查
|
||
- `get_risk_report(stocks, portfolio)`:生成每日风控报告
|
||
|
||
## 使用示例
|
||
|
||
```python
|
||
from risk_control import RiskController, StockInfo, PortfolioInfo
|
||
|
||
# 初始化风控
|
||
rc = RiskController()
|
||
|
||
# 开仓前检查
|
||
stock = StockInfo(
|
||
code="000001",
|
||
name="平安银行",
|
||
cost_price=10.0,
|
||
current_price=10.0,
|
||
is_st=False,
|
||
is_limit_down=False,
|
||
is_fraud=False,
|
||
volume=20.0 # 日成交额20亿
|
||
)
|
||
portfolio = PortfolioInfo(
|
||
total_capital=1000000,
|
||
current_capital=950000,
|
||
positions={"000002": 200000}
|
||
)
|
||
ok, reason = rc.pre_trade_check(stock, portfolio)
|
||
if ok:
|
||
# 允许开仓
|
||
pass
|
||
else:
|
||
# 拒绝开仓
|
||
print(reason)
|
||
|
||
# 收盘后检查
|
||
result = rc.post_trade_check(all_stocks, portfolio)
|
||
if result['stop_loss_required']:
|
||
# 对这些股票执行止损
|
||
for s in result['stop_loss_stocks']:
|
||
print(f"止损: {s['code']} {s['name']}")
|
||
|
||
if result['rebalance_required']:
|
||
# 执行降仓
|
||
target_ratio = result['target_position_ratio']
|
||
print(f"需要降仓到目标仓位: {target_ratio:.1%}")
|
||
|
||
# 生成风控日报
|
||
print(rc.get_risk_report(all_stocks, portfolio))
|
||
```
|
||
|
||
## 设计原则
|
||
|
||
1. **单一职责**:每个类只负责一件事,清晰好维护
|
||
2. **可配置**:默认参数是经验值,支持自定义
|
||
3. **层层设防**:事前过滤 → 事中监控 → 事后止损 → 整体降仓,每一步都有防护
|
||
4. **易集成**:用 dataclass 定义数据结构,和任意回测框架都能对接
|
||
|
||
## 作者
|
||
|
||
关羽(云长)
|
||
风险都督
|
||
2026-03-27
|