预算约束:全投资约束、杠杆限制、现金头寸管理

预算约束,说白了就是「你有多少钱,能怎么花」。在量化投资里,这可不是简单的记账问题。我见过太多策略在回测里跑得漂亮,一上实盘就崩盘——十有八九是预算约束没处理好。

今天咱们就掰开揉碎,聊聊三个核心问题:全投资约束、杠杆限制、现金头寸管理。嗯,这三兄弟是投资组合的「紧箍咒」,戴好了能保平安,戴歪了就要出大事。

一、全投资约束:钱要花光,但不能超

全投资约束,英文叫 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,意味着你最多可以借一倍的钱来投资。

我曾经犯过一个错误:只设了硬杠杆限制,没考虑软杠杆。结果市场波动一上来,杠杆虽然没超限,但保证金不够了,被强制平仓。嗯,那滋味不好受。

避坑指南: 杠杆限制不是越高越好。我建议把硬杠杆设在监管允许的 80%,留 20% 的缓冲。比如监管允许 3 倍,你就设 2.4 倍。这样市场波动时还有回旋余地。

还有一个细节:杠杆计算要用市值,不是本金。比如你有 100 万,买了 150 万的股票,那杠杆就是 1.5 倍。别用本金去算,那是自欺欺人。

三、现金头寸管理:流动性的命门

现金头寸管理,可能是最容易被忽视的约束。很多人觉得现金就是「闲着没事干」,恨不得全买成资产。但现实是,现金是流动性的最后一道防线。

我一般把现金头寸分成三块:

类型 比例 用途
交易现金 1%-3% 日常调仓、手续费、滑点
缓冲现金 5%-10% 应对赎回、追加保证金
战略现金 0%-20% 等待机会、防御性配置

你看,现金不是「没投资」,而是「战略性持有」。我在做多资产组合时,通常会保持 5% 左右的缓冲现金。别小看这 5%,有一次市场暴跌,就是靠这 5% 的现金扛过了流动性危机。

小技巧: 现金头寸可以跟杠杆限制联动。比如杠杆上限是 2 倍,那现金比例就不能低于 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, "约束通过"

这段代码虽然简单,但实盘里很管用。我每次调仓前都会跑一遍,确保不会踩红线。

四、三者联动:一个完整的预算约束框架

全投资约束、杠杆限制、现金头寸管理,这三者不是孤立的。它们共同构成了一个完整的预算约束体系。

我画了一张图,帮你理清它们的关系:

预算约束框架 全投资约束 ∑ w_i = 1 杠杆限制 ∑ |w_i| ≤ L 现金头寸管理 现金比例 ≥ 5% 联动关系:全投资约束决定资金去向,杠杆限制控制风险敞口,现金头寸保障流动性 三者缺一不可,共同构成预算约束的「铁三角」 常见错误 ❌ 只设全投资约束,忽略杠杆限制 → 可能过度集中 ❌ 只设杠杆限制,忽略现金管理 → 流动性危机 ❌ 三者独立设置,不考虑联动 → 约束失效

你看,这三者就像三角形的三条边。全投资约束决定了「投什么」,杠杆限制决定了「投多少」,现金头寸管理决定了「留多少」。少了一条边,这个三角形就不稳定。

我在实际项目中,会把这三个约束打包成一个函数。每次优化权重时,先跑约束检查,再跑优化器。这样能避免很多坑。

总结一下:
  • 全投资约束是等式,别写成不等式
  • 杠杆限制要留缓冲,别卡在监管上限
  • 现金头寸是流动性的命门,至少留 5%
  • 三者联动,缺一不可

好了,预算约束这块就聊到这儿。记住,约束不是限制你的收益,而是保护你的本金。我见过太多人因为忽视约束而爆仓,希望你不是下一个。

专注资料整理