第三章:回撤控制基础——仓位管理原则与止损策略
大家好,我是老张。今天咱们聊聊回撤控制里最基础、也最要命的两件事:仓位怎么分配,以及什么时候该跑。
说实话,我见过太多人策略做得漂亮,回测曲线跟教科书似的,结果一上实盘,三个月就爆仓。为什么?仓位管理出了问题。你想想看,一个年化30%的策略,如果仓位干到80%,一次20%的回撤就能让你本金亏掉16%。嗯,这还没算复利效应带来的心理冲击。
核心观点:回撤控制不是事后补救,而是事前设计。仓位管理和止损策略,就是你给策略装上的「安全带」和「气囊」。
一、仓位管理原则
仓位管理说白了就一句话:在不确定的市场里,你该押多少筹码。我个人习惯把仓位管理分成两类:一类是数学推导出来的最优解,另一类是工程上常用的经验法则。
1.1 凯利公式——理论上的最优解
凯利公式最早是贝尔实验室研究信号传输的,后来被赌徒和投资者拿来用。它的核心思想是:在已知胜率和赔率的情况下,找到一个让资金增长最快的仓位比例。
公式长这样:
f* = (bp - q) / b
其中:
- f* = 最优仓位比例
- b = 赔率(盈亏比)
- p = 胜率
- q = 1 - p(失败概率)
举个例子。假设你的策略胜率是60%,盈亏比是2:1。那么:
b = 2
p = 0.6
q = 0.4
f* = (2 * 0.6 - 0.4) / 2 = (1.2 - 0.4) / 2 = 0.4
也就是说,凯利公式建议你每次用40%的仓位去赌。
⚠️ 注意:凯利公式有个大坑——它假设你的胜率和赔率是精确已知的。但现实中,这两个参数都是估计值。我曾经在项目中直接用凯利公式算出来的仓位跑实盘,结果胜率估计偏高了5%,回撤直接翻倍。后来我学乖了,永远只用「半凯利」或「四分之一凯利」。
1.2 固定比例法——工程师的务实选择
凯利公式虽然漂亮,但太敏感。我个人更常用的是固定比例法。说白了就是:不管行情好坏,我永远只用总资金的固定比例去开仓。
常见的固定比例有:
| 风险偏好 | 单笔仓位 | 适用场景 |
|---|---|---|
| 保守型 | 1% - 2% | 高波动品种、趋势跟踪 |
| 稳健型 | 3% - 5% | 多策略组合、中低频 |
| 激进型 | 8% - 10% | 高频、高胜率策略 |
为什么固定比例法好用?因为它简单、稳定、不依赖参数估计。你不需要去猜胜率是多少,只需要定一个自己睡得着觉的比例就行。
💡 我的经验:如果你刚开始做量化,建议从2%起步。跑三个月实盘,如果最大回撤没超过10%,再慢慢往上加。别一上来就干5%,我见过太多人死在「我觉得我能扛住」这句话上。
二、止损策略
仓位管理解决的是「开多少」的问题,止损解决的是「什么时候走」的问题。两者缺一不可。
我把止损策略分成三类:时间止损、波动率止损、阈值止损。这三类不是互斥的,我通常会在一个策略里同时用两到三种。
2.1 时间止损
时间止损的逻辑很简单:如果持仓超过一定时间还没盈利,说明你的入场逻辑可能错了。
举个例子。我做日内趋势策略时,通常设定持仓不超过4小时。如果4小时后还没到目标位,不管盈亏,直接平仓。为什么?因为市场已经用时间证明了你的判断不够强。
# 伪代码示例
max_holding_time = 4 * 60 * 60 # 4小时,单位秒
entry_time = get_current_time()
while position_is_open:
if get_current_time() - entry_time > max_holding_time:
close_position()
print("时间止损触发")
break
⚠️ 注意:时间止损不是让你死扛。我见过有人设定「持仓不超过5天」,结果第4天已经亏了15%,还在那等时间止损。嗯,这就不对了。时间止损应该和价格止损配合使用。
2.2 波动率止损
波动率止损是我个人最喜欢的一种。它的核心思想是:根据市场当前的波动程度来设定止损距离。市场波动大,止损就宽一点;波动小,止损就窄一点。
常用的波动率指标是ATR(平均真实波幅)。比如:
# 计算ATR
def calculate_atr(data, period=14):
high_low = data['high'] - data['low']
high_close = abs(data['high'] - data['close'].shift())
low_close = abs(data['low'] - data['close'].shift())
tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1)
atr = tr.rolling(window=period).mean()
return atr
# 设定止损
stop_loss_price = entry_price - 2 * current_atr
这里用2倍ATR作为止损距离。为什么是2倍?不是1.5倍也不是3倍?嗯,这个没有标准答案。我习惯先跑回测,看看不同倍数下的表现。一般来说,1.5倍到3倍ATR是比较常见的区间。
💡 避坑指南:我曾经在某个商品期货上直接用1倍ATR止损,结果频繁被扫。后来发现那个品种的日内毛刺特别多,1倍ATR根本不够。改成2.5倍后,止损次数减少了60%,整体收益反而上去了。所以,波动率止损的倍数一定要根据品种特性来调。
2.3 阈值止损
阈值止损是最简单粗暴的:设定一个固定的亏损比例,到了就走。比如单笔亏损不超过2%,或者总回撤不超过10%。
阈值止损的好处是——它让你在极端行情下也能活下来。我记得2015年股灾的时候,很多策略就是因为没有阈值止损,一天亏掉半年的利润。
常见的阈值设定:
- 单笔止损:1% - 3%(取决于策略胜率和盈亏比)
- 日止损:3% - 5%(当天亏损达到这个数,停止交易)
- 总回撤止损:15% - 25%(策略整体回撤到这个水平,暂停并复盘)
重要提醒:阈值止损不是让你「亏到那个数再跑」,而是让你「提前算好,到了就执行」。我见过太多人设了5%的止损,结果亏到4.8%的时候想「再等等」,最后亏到8%才割肉。嗯,这就是人性。所以,用程序自动执行止损,别给自己犹豫的机会。
三、知识体系总览
说了这么多,我画了一张图,把本章的核心逻辑串起来。你一看就明白了:
这张图把本章的内容结构讲得很清楚了。左边是仓位管理,右边是止损策略。两者共同构成了回撤控制的基础框架。你想想看,如果只做仓位管理不做止损,遇到黑天鹅怎么办?如果只做止损不做仓位管理,那止损次数多了,本金一样会缩水。所以,两者必须配合使用。
💡 最后说一句:我做了这么多年量化,最大的体会就是——活得久比赚得快重要得多。仓位管理和止损策略,就是你在这个市场里「活得久」的保障。别嫌麻烦,别偷懒,把这些基础打牢了,后面的路才能走得远。
公众号:蓝海资料掘金营,微信deep3321