回撤控制是一套根据投资组合当前最大回撤动态缩减仓位/停止开新仓的风险管理规则。核心理念:当账户处于亏损状态时,减少风险暴露而非继续加码。
| 当前回撤 | 仓位调整 |
|---|---|
| DD < 5% | 正常仓位 (100%) |
| 5% ≤ DD < 10% | 缩减至 50% |
| 10% ≤ DD < 15% | 缩减至 20% |
| DD ≥ 15% | 暂停开新仓,清仓保护 |
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)