跳转至

组合风控

本篇导览

项目 说明
目标 使用 PortfolioRiskMonitor 监测组合风险
前置 运行回测

1. 组合风控

PortfolioRiskMonitor 提供实时的组合风险监测,包括集中度、波动率和最大回撤预警。

1.1 基本用法

from eqlib import PortfolioRiskMonitor

# 创建监测器
monitor = PortfolioRiskMonitor(
    max_single_position_pct=0.20,  # 单只股票最大仓位 20%
    max_sector_pct=0.40,            # 单行业最大仓位 40%
    max_drawdown_alert=0.10,        # 回撤超过 10% 预警
    volatility_window=20,           # 波动率计算窗口
)

# 在策略中更新监测器
def market_open(context):
    # 更新持仓数据
    positions = context.portfolio.positions
    total_value = context.portfolio.total_value

    monitor.update(positions, total_value, context.current_dt)

    # 检查风险预警
    alerts = monitor.check_alerts()
    for alert in alerts:
        log.warn("风险预警: %s" % alert)

1.2 集中度检查

# 检查持仓集中度
concentration = monitor.get_concentration()
print("前三大持仓占比: %.2f%%" % (concentration['top3_pct'] * 100))
print("赫芬达尔指数: %.4f" % concentration['hhi'])

1.3 波动率监测

# 获取组合波动率
vol = monitor.get_portfolio_volatility()
print("组合年化波动率: %.2f%%" % (vol['annual_volatility'] * 100))

1.4 回撤预警

# 设置回撤预警回调
def on_drawdown_alert(level, current_dd):
    log.warn("回撤预警! 当前回撤: %.2f%%, 阈值: %.2f%%" % (
        current_dd * 100, level * 100))

monitor.set_drawdown_callback(on_drawdown_alert)

1.5 与选股框架联动

from eqlib import TopNSelector

def initialize(context):
    g.selector = TopNSelector(universe=['600519', '601390', '000858'])
    g.risk_monitor = PortfolioRiskMonitor(max_single_position_pct=0.15)

def market_open(context):
    # 选股
    candidates = g.selector.select(context)

    # 风控检查
    if g.risk_monitor.check_position_limit(candidates):
        for sec in candidates:
            order_value(sec, context.portfolio.available_cash / len(candidates))
    else:
        log.info("风控限制,本日不调仓")

完整 API 参数说明见 组合风控 API 参考