预算约束:全投资约束、杠杆限制、现金头寸管理
预算约束,说白了就是「你有多少钱,能怎么花」。在量化投资里,这可不是简单的记账问题。我见过太多策略在回测里跑得漂亮,一上实盘就崩盘——十有八九是预算约束没处理好。
今天咱们就掰开揉碎,聊聊三个核心问题:全投资约束、杠杆限制、现金头寸管理。嗯,这三兄弟是投资组合的「紧箍咒」,戴好了能保平安,戴歪了就要出大事。
一、全投资约束:钱要花光,但不能超
全投资约束,英文叫 Full Investment Constraint。它的意思很简单:你手里的钱,要么买资产,要么留现金,但总和必须等于初始资金。
数学上长这样:
∑ w_i = 1
其中 w_i 是第 i 个资产的权重。注意,这里 w_i 可以是负数(做空),但总和必须为 1。
我在项目中遇到过一个问题:有些新手会把全投资约束写成 ∑ w_i ≤ 1。这其实不对。为什么?因为如果你允许权重和小于 1,那策略就会自动留现金,这相当于隐含了一个「看空」的判断。你想想看,这跟你的投资目标是不是冲突了?
举个例子。假设你有 100 万,买了 80 万股票,20 万债券。那权重就是 0.8 + 0.2 = 1。如果你只买了 80 万股票,剩下 20 万现金,那权重和就是 0.8,违反了全投资约束。
当然,有些策略会故意留现金。比如「现金+期货」的复制策略,现金比例可能高达 90% 以上。这时候全投资约束依然成立——现金也是资产的一种。
二、杠杆限制:借钱有度,别玩火
杠杆限制,就是你能借多少钱来放大收益。我个人习惯把杠杆分成两类:
- 硬杠杆限制: 监管或合同规定的上限,比如 2 倍、3 倍
- 软杠杆限制: 风控模型算出来的安全边界,比如 VaR 约束
数学表达通常是:
∑ |w_i| ≤ L
其中 L 是最大杠杆倍数。比如 L=2,意味着你最多可以借一倍的钱来投资。
我曾经犯过一个错误:只设了硬杠杆限制,没考虑软杠杆。结果市场波动一上来,杠杆虽然没超限,但保证金不够了,被强制平仓。嗯,那滋味不好受。
还有一个细节:杠杆计算要用市值,不是本金。比如你有 100 万,买了 150 万的股票,那杠杆就是 1.5 倍。别用本金去算,那是自欺欺人。
三、现金头寸管理:流动性的命门
现金头寸管理,可能是最容易被忽视的约束。很多人觉得现金就是「闲着没事干」,恨不得全买成资产。但现实是,现金是流动性的最后一道防线。
我一般把现金头寸分成三块:
| 类型 | 比例 | 用途 |
|---|---|---|
| 交易现金 | 1%-3% | 日常调仓、手续费、滑点 |
| 缓冲现金 | 5%-10% | 应对赎回、追加保证金 |
| 战略现金 | 0%-20% | 等待机会、防御性配置 |
你看,现金不是「没投资」,而是「战略性持有」。我在做多资产组合时,通常会保持 5% 左右的缓冲现金。别小看这 5%,有一次市场暴跌,就是靠这 5% 的现金扛过了流动性危机。
现金管理的代码实现也不复杂。我习惯用 Pandas 做约束检查:
import pandas as pd
def check_cash_constraint(weights, cash_ratio, leverage_limit):
"""
检查现金头寸和杠杆限制
weights: 资产权重数组
cash_ratio: 现金比例
leverage_limit: 最大杠杆
"""
total_leverage = sum(abs(w) for w in weights)
if total_leverage > leverage_limit:
return False, f"杠杆超限: {total_leverage:.2f} > {leverage_limit}"
if cash_ratio < 0.05:
return False, f"现金比例过低: {cash_ratio:.2%}"
return True, "约束通过"
这段代码虽然简单,但实盘里很管用。我每次调仓前都会跑一遍,确保不会踩红线。
四、三者联动:一个完整的预算约束框架
全投资约束、杠杆限制、现金头寸管理,这三者不是孤立的。它们共同构成了一个完整的预算约束体系。
我画了一张图,帮你理清它们的关系:
你看,这三者就像三角形的三条边。全投资约束决定了「投什么」,杠杆限制决定了「投多少」,现金头寸管理决定了「留多少」。少了一条边,这个三角形就不稳定。
我在实际项目中,会把这三个约束打包成一个函数。每次优化权重时,先跑约束检查,再跑优化器。这样能避免很多坑。
- 全投资约束是等式,别写成不等式
- 杠杆限制要留缓冲,别卡在监管上限
- 现金头寸是流动性的命门,至少留 5%
- 三者联动,缺一不可
好了,预算约束这块就聊到这儿。记住,约束不是限制你的收益,而是保护你的本金。我见过太多人因为忽视约束而爆仓,希望你不是下一个。