第四章:仓位管理优化
仓位管理,说白了就是「你该押多大赌注」。我见过太多人策略做得很漂亮,最后却栽在仓位管理上。你想想看,一个年化30%的策略,如果仓位管理不当,可能三个月就爆仓了。今天咱们就聊聊怎么把仓位管好。
核心观点:仓位管理不是让你赚更多,而是让你活得久。在套利交易中,这一点尤其重要。
4.1 凯利公式在套利中的应用
凯利公式,很多人听说过但不敢用。其实没那么玄乎。它的核心思想就一句话:根据胜率和赔率,算出最优下注比例。
公式长这样:
f* = (bp - q) / b
其中:
f* = 最优仓位比例
b = 赔率(盈亏比)
p = 胜率
q = 败率(1-p)
我在做跨期套利时,习惯把凯利公式稍微改一下。因为套利交易的胜率通常很高,但赔率不高。举个例子:
# 跨期套利的凯利仓位计算
def kelly_position(win_rate, avg_win, avg_loss):
"""
win_rate: 胜率(比如0.85)
avg_win: 平均盈利(比如0.5%)
avg_loss: 平均亏损(比如0.3%)
"""
b = avg_win / avg_loss # 赔率
q = 1 - win_rate
f = (b * win_rate - q) / b
# 我一般会打个折扣,用半凯利
return max(0, f * 0.5)
# 实际案例
pos = kelly_position(0.85, 0.005, 0.003)
print(f"建议仓位:{pos:.2%}") # 输出约 42%
我的经验:凯利公式算出来的仓位往往偏激进。我建议用半凯利(即计算结果的一半),这样既能吃到收益,又不会因为一次黑天鹅就伤筋动骨。
为什么会这样?因为凯利公式假设你每次交易都是独立事件。但套利交易中,有时候会出现连续亏损。我记得有一次,螺纹钢的跨期套利连续止损了5次,如果用全凯利,仓位早就爆了。
4.2 基于波动率的动态仓位调整
市场波动率是会变的。你想想看,行情平静时和剧烈波动时,能用一个仓位吗?显然不能。
我常用的方法是:用ATR(平均真实波幅)来调整仓位。波动率越大,仓位越小;波动率越小,仓位越大。
import numpy as np
def dynamic_position(atr, base_position, target_risk):
"""
atr: 当前ATR值
base_position: 基准仓位(比如100手)
target_risk: 目标风险(比如账户的1%)
"""
# 计算波动率调整因子
vol_factor = target_risk / (atr * base_position)
# 限制调整范围,别太极端
vol_factor = np.clip(vol_factor, 0.3, 2.0)
return base_position * vol_factor
# 举个例子
current_atr = 15 # 当前ATR
base = 100 # 基准仓位
risk = 0.01 # 目标风险1%
final_pos = dynamic_position(current_atr, base, risk)
print(f"动态仓位:{final_pos:.0f}手")
注意:波动率调整不能太灵敏。我曾经用5日ATR做调整,结果频繁调仓,手续费都亏了不少。后来改成20日ATR,效果就好多了。
这里有个小技巧:把波动率分成三个区间——低波动、正常波动、高波动。每个区间用不同的仓位系数。这样既简单又有效。
| 波动率区间 | ATR/价格 | 仓位系数 |
|---|---|---|
| 低波动 | < 0.5% | 1.5倍 |
| 正常波动 | 0.5% - 1.5% | 1.0倍 |
| 高波动 | > 1.5% | 0.5倍 |
4.3 最大回撤控制与止损策略
回撤控制,是仓位管理的最后一道防线。我见过太多人,策略赚了半年,一周就亏回去了。为什么?因为没有回撤控制。
我的做法是:设置三层止损。
- 单笔止损:每笔交易亏损不超过账户的0.5%
- 日止损:单日亏损不超过账户的2%
- 总回撤止损:账户总回撤达到10%时,暂停交易
class RiskManager:
def __init__(self, account_value):
self.account = account_value
self.peak_value = account_value
self.daily_pnl = 0
def check_stop(self, trade_loss):
# 单笔止损
if trade_loss > self.account * 0.005:
return "单笔止损"
# 日止损
self.daily_pnl -= trade_loss
if self.daily_pnl < -self.account * 0.02:
return "日止损"
# 总回撤止损
current_drawdown = (self.peak_value - self.account) / self.peak_value
if current_drawdown > 0.10:
return "总回撤止损"
return None
避坑指南:我曾经把总回撤止损设成15%,结果遇到一次极端行情,回撤到了18%才停住。后来改成10%,虽然触发次数多了,但账户安全多了。记住:止损不是用来赚钱的,是用来保命的。
4.4 资金曲线平滑技术
资金曲线平滑,说白了就是让收益更稳定。谁都不想看到账户像过山车一样。我常用的方法有几种:
- 分批建仓:不一次性满仓,分3-5次入场
- 盈利加仓:有浮盈后再加仓,而不是亏损加仓
- 时间分散:不同品种、不同周期的套利组合在一起
这里我画了一张图,展示仓位管理的整体逻辑:
最后说一个我自己的习惯:每周五收盘后,我会重新评估一次仓位。看看这周的波动率变了没有,回撤到没到警戒线,需不需要调整。这个习惯帮我躲过了好几次大跌。
总结一下:仓位管理不是数学题,是艺术。凯利公式给你方向,波动率调整给你灵活性,止损给你安全感,平滑技术给你好心情。四者结合,才能做出稳健的套利策略。