资金管理核心原则:凯利公式详解、固定比例法、固定分数法、最大回撤控制原则
做套利交易这些年,我见过太多人把精力全放在找策略、调参数上。结果呢?策略明明回测漂亮,实盘却亏得底掉。问题出在哪?说白了,就是资金管理没做好。你想想看,一个胜率60%的策略,如果每次全仓干,连续三次亏损就出局了。资金管理,才是量化交易的真正护城河。
今天咱们就聊聊四个核心原则:凯利公式、固定比例法、固定分数法,还有最大回撤控制。这些是我在实盘中反复验证过的,希望能帮你少走弯路。
核心观点:资金管理的本质,不是让你赚更多,而是让你活更久。只要还在牌桌上,机会就永远有。
一、凯利公式详解
凯利公式,很多人觉得它高深莫测。其实没那么玄乎。它解决的核心问题就是:在已知胜率和赔率的情况下,每次该押多少比例的本金?
公式长这样:
f* = (bp - q) / b
其中:
f* = 最优投资比例
b = 赔率(盈亏比)
p = 胜率
q = 败率(1 - p)
举个例子你就明白了。假设你的套利策略胜率是60%,盈亏比是2:1。也就是说,每做10次,6次赚钱,4次亏钱。赚的时候赚2份,亏的时候亏1份。
代入公式:
b = 2
p = 0.6
q = 0.4
f* = (2 * 0.6 - 0.4) / 2 = (1.2 - 0.4) / 2 = 0.4
算出来是0.4,也就是每次应该用40%的资金去下注。
个人经验:我在实盘中从来不会直接用满凯利值。为什么?因为凯利公式假设你的胜率和赔率是精确已知的。但现实哪有那么完美?我习惯用「半凯利」——也就是算出来40%,我只用20%。这样既能享受复利增长,又不会因为参数估计偏差而爆仓。
避坑指南:我曾经在回测中看到一个策略胜率70%,赔率3:1,凯利算出来接近60%。我脑子一热就上了50%仓位。结果呢?实盘前三个月连续亏损,回撤超过30%。后来复盘发现,回测数据有幸存者偏差,真实胜率只有55%。从那以后,我给自己定了个规矩:凯利值超过30%的一律打五折。
二、固定比例法
固定比例法,说白了就是「每次亏多少,我说了算」。不管账户资金怎么变,每笔交易承担的风险比例是固定的。
比如你设定每笔交易亏损不超过总资金的2%。账户有100万,那每笔最多亏2万。如果账户亏到50万,每笔最多亏1万。
这样做的好处很明显:
- 自动缩仓——亏损时仓位自动变小,保护本金
- 自动扩仓——盈利时仓位自动变大,加速增长
- 心理压力小——每笔亏损都在可控范围内
具体怎么算?看代码:
def fixed_ratio_position(account_value, risk_percent, stop_loss_pct):
"""
固定比例法计算仓位
:param account_value: 当前账户总值
:param risk_percent: 每笔风险比例(如0.02表示2%)
:param stop_loss_pct: 止损比例(如0.05表示5%)
:return: 开仓数量
"""
risk_amount = account_value * risk_percent
position_size = risk_amount / stop_loss_pct
return position_size
# 示例
account = 1000000 # 100万
risk = 0.02 # 每笔亏2%
stop = 0.05 # 止损5%
position = fixed_ratio_position(account, risk, stop)
print(f"建议开仓金额:{position:.2f}") # 输出:400000.00
嗯,这里要注意:止损比例一定要根据策略的波动特性来设。太窄了容易被震荡出局,太宽了又起不到保护作用。我个人习惯用ATR(平均真实波幅)的1.5倍作为止损参考。
三、固定分数法
固定分数法和固定比例法有点像,但思路完全不同。固定分数法关注的是「每次用多少比例的资金去开仓」,而不是「每次亏多少」。
举个例子:你决定每次用总资金的10%开仓。100万时开10万,赚到200万就开20万,亏到50万就开5万。
两种方法的区别:
| 对比维度 | 固定比例法 | 固定分数法 |
|---|---|---|
| 控制对象 | 亏损金额 | 开仓金额 |
| 风险特征 | 每笔亏损固定比例 | 每笔占用固定比例 |
| 适合场景 | 止损明确的策略 | 仓位管理为主 |
| 复利效果 | 中等 | 较强 |
我个人更偏爱固定比例法。为什么?因为它直接控制了「最大亏损」,这对套利交易来说太重要了。套利策略虽然胜率高,但偶尔也会遇到价差异常放大,这时候固定比例法能帮你把损失锁死。
四、最大回撤控制原则
最大回撤,是所有交易者的噩梦。我见过太多人,策略回撤20%就慌了手脚,开始乱改参数,结果越改越亏。
控制回撤,我有三条铁律:
- 硬止损线——总资金回撤达到15%,强制减仓50%。回撤达到25%,全部清仓,休息两周。
- 动态缩仓——回撤每增加5%,仓位降低20%。比如回撤10%,仓位降到原来的60%。
- 盈利保护——当盈利超过30%时,锁定一半利润。具体做法是把盈利部分转出交易账户。
核心逻辑:回撤控制不是事后补救,而是事前规划。你必须在策略上线之前就想好:如果亏了怎么办?亏多少要停?
这里分享一个我常用的回撤监控函数:
def drawdown_monitor(equity_curve, max_drawdown_limit=0.25):
"""
监控回撤并给出操作建议
:param equity_curve: 权益曲线(list或array)
:param max_drawdown_limit: 最大回撤容忍度
:return: 当前回撤、操作建议
"""
peak = equity_curve[0]
current_dd = 0
for value in equity_curve:
if value > peak:
peak = value
dd = (peak - value) / peak
current_dd = max(current_dd, dd)
if current_dd >= max_drawdown_limit:
action = "⚠️ 触发最大回撤限制!建议立即清仓并暂停交易。"
elif current_dd >= max_drawdown_limit * 0.6:
action = f"⚠️ 当前回撤{current_dd:.1%},接近警戒线,建议减仓50%。"
else:
action = f"✅ 当前回撤{current_dd:.1%},在可控范围内。"
return current_dd, action
# 模拟使用
import numpy as np
np.random.seed(42)
equity = 1000000 * np.cumprod(1 + np.random.normal(0.001, 0.02, 252))
dd, advice = drawdown_monitor(equity)
print(f"最大回撤:{dd:.2%}")
print(f"建议:{advice}")
一个小技巧:我习惯在交易终端上挂一个回撤仪表盘,实时显示当前回撤和警戒线。每次下单前扫一眼,心里就有底了。别小看这个动作,它能帮你避免很多冲动交易。
最后说一句:资金管理没有银弹。凯利公式、固定比例法、固定分数法,各有各的适用场景。我的建议是:先用历史数据回测,找到最适合你策略的那一套。别贪心,别侥幸,稳稳地活下来,比什么都重要。