核心思想

回撤控制是一套根据投资组合当前最大回撤动态缩减仓位/停止开新仓的风险管理规则。核心理念:当账户处于亏损状态时,减少风险暴露而非继续加码。

Drawdownt=max0itViVtmax0itVi\text{Drawdown}_t = \frac{\max_{0\le i\le t} V_i - V_t}{\max_{0\le i\le t} V_i}

动态仓位缩减规则

阶梯式回撤控制

当前回撤仓位调整
DD < 5%正常仓位 (100%)
5% ≤ DD < 10%缩减至 50%
10% ≤ DD < 15%缩减至 20%
DD ≥ 15%暂停开新仓,清仓保护

Python 实现

class DrawdownControl:
    def __init__(self, threshold_pct=0.10, min_position=0.2):
        self.threshold = threshold_pct  # 触发减仓的回撤阈值
        self.min_position = min_position
        self.peak_equity = 0
        self.current_equity = 0
        
    def update(self, equity):
        """更新状态并返回当前仓位倍数"""
        self.current_equity = equity
        if equity > self.peak_equity:
            self.peak_equity = equity
            
        drawdown = (self.peak_equity - equity) / self.peak_equity
        
        # 阶梯式仓位缩减
        if drawdown < 0.05:
            return 1.0
        elif drawdown < self.threshold:
            return 0.5
        elif drawdown < 0.15:
            return 0.2
        else:
            return 0  # 清仓
    
    def should_halt(self, equity):
        """回撤超过阈值时暂停交易"""
        self.update(equity)
        return self._current_multiplier == 0

# Volatility-targeted position sizing
def volatility_position_size(target_vol, portfolio_vol, max_position=1.0):
    """波动率目标仓位"""
    if portfolio_vol == 0:
        return max_position
    ratio = target_vol / portfolio_vol
    return min(ratio, max_position)

局限

参考文献

  1. Swensen, D., 2009. Pioneering Portfolio Management.
  2. Lopez de Prado, M., 2018. Advances in Financial Machine Learning (Ch. 6: Fractional Differentiation).