量化面试绿皮书:53. 组合优化

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

53. 组合优化

你正在用两只股票A和B构建一个简单投资组合。
两只股票的预期收益率均为12%,A的收益率标准差为20%,B的收益率标准差为30%,二者收益率的相关系数为50%。

Q: 为最小化投资组合风险,应如何配置这两只股票的投资比例?

A: 为了最小化投资组合的风险(即投资组合的标准差),需要找到股票A和B的最优投资比例。给定数据如下:

  • 股票A的预期收益率:12%,标准差:20%(即0.20)
  • 股票B的预期收益率:12%,标准差:30%(即0.30)
  • 二者收益率的相关系数:50%(即0.50)

由于两只股票的预期收益率相同(均为12%),最小化风险的投资组合仅取决于风险特性,而不需考虑收益差异。投资组合的方差(风险)公式为:

σp2=wA2σA2+wB2σB2+2wAwBρABσAσB \sigma_p^2 = w_A^2 \sigma_A^2 + w_B^2 \sigma_B^2 + 2 w_A w_B \rho_{AB} \sigma_A \sigma_B σp2=wA2σA2+wB2σB2+2wAwBρABσAσB

其中:

  • wAw_AwAwBw_BwB 分别是投资于A和B的比例,且 wA+wB=1w_A + w_B = 1wA+wB=1(即 wB=1−wAw_B = 1 - w_AwB=1wA)
  • σA=0.20\sigma_A = 0.20σA=0.20σA2=(0.20)2=0.04\sigma_A^2 = (0.20)^2 = 0.04σA2=(0.20)2=0.04
  • σB=0.30\sigma_B = 0.30σB=0.30σB2=(0.30)2=0.09\sigma_B^2 = (0.30)^2 = 0.09σB2=(0.30)2=0.09
  • ρAB=0.50\rho_{AB} = 0.50ρAB=0.50,协方差 σAB=ρABσAσB=0.50×0.20×0.30=0.03\sigma_{AB} = \rho_{AB} \sigma_A \sigma_B = 0.50 \times 0.20 \times 0.30 = 0.03σAB=ρABσAσB=0.50×0.20×0.30=0.03

代入公式,投资组合方差为:

σp2=wA2⋅0.04+(1−wA)2⋅0.09+2wA(1−wA)⋅0.03 \sigma_p^2 = w_A^2 \cdot 0.04 + (1 - w_A)^2 \cdot 0.09 + 2 w_A (1 - w_A) \cdot 0.03 σp2=wA20.04+(1wA)20.09+2wA(1wA)0.03

简化后得到:

σp2=0.07wA2−0.12wA+0.09 \sigma_p^2 = 0.07 w_A^2 - 0.12 w_A + 0.09 σp2=0.07wA20.12wA+0.09

这是一个关于 wAw_AwA 的二次函数,且二次项系数(0.07)大于0,因此存在最小值。最小值发生在顶点处:

wA=−b2a=−−0.122×0.07=0.120.14=67 w_A = -\frac{b}{2a} = -\frac{-0.12}{2 \times 0.07} = \frac{0.12}{0.14} = \frac{6}{7} wA=2ab=2×0.070.12=0.140.12=76

因此:

  • wA=67≈85.71%w_A = \frac{6}{7} \approx 85.71\%wA=7685.71%
  • wB=1−wA=17≈14.29%w_B = 1 - w_A = \frac{1}{7} \approx 14.29\%wB=1wA=7114.29%

配置方案
为最小化投资组合风险,应将总投资的 67\frac{6}{7}76(约85.71%)配置于股票A,17\frac{1}{7}71(约14.29%)配置于股票B。

此配置利用了相关系数小于1(0.50)的分散化效果,能有效降低组合的整体风险。最小化后的投资组合标准差可进一步计算,但问题仅要求配置比例,故不展开。

Python 实现

以下是使用Python计算最小方差投资组合权重的代码实现,严格遵循Google强类型风格和注释规范:

def calculate_min_variance_weights(
    std_dev_a: float, std_dev_b: float, correlation: float
) -> tuple[float, float]:
    """计算最小方差投资组合中两只股票的权重配置

    根据现代投资组合理论,通过方差-协方差分析确定最优权重配置,
    使投资组合的整体风险最小化。

    Args:
        std_dev_a (float): 股票A收益率的标准差(小数形式)
        std_dev_b (float): 股票B收益率的标准差(小数形式)
        correlation (float): 两只股票收益率的相关系数(-1.0到1.0之间)

    Raises:
        ValueError: 如果输入参数超出合理范围

    Returns:
        tuple[float, float]:
            包含两个浮点数的元组 (weight_a, weight_b),分别表示
            股票A和股票B的最优投资比例(总和为1.0)
    """
    # 验证输入参数的有效性
    if not (0 <= std_dev_a <= 1):
        raise ValueError("股票A的标准差必须在[0, 1]范围内")
    if not (0 <= std_dev_b <= 1):
        raise ValueError("股票B的标准差必须在[0, 1]范围内")
    if not (-1.0 <= correlation <= 1.0):
        raise ValueError("相关系数必须在[-1.0, 1.0]范围内")

    # 计算方差和协方差
    var_a = std_dev_a**2  # 股票A的方差
    var_b = std_dev_b**2  # 股票B的方差
    cov_ab = correlation * std_dev_a * std_dev_b  # 两只股票的协方差

    # 使用最小方差组合权重公式计算最优权重
    # 公式: w_a = [σ_b² - cov_ab] / [σ_a² + σ_b² - 2*cov_ab]
    numerator = var_b - cov_ab
    denominator = var_a + var_b - 2 * cov_ab

    # 处理分母为零的特殊情况(完全正相关且标准差相等)
    if abs(denominator) < 1e-10:
        # 当两资产完全替代时,配置风险更低的资产
        return (1.0, 0.0) if std_dev_a <= std_dev_b else (0.0, 1.0)

    weight_a = numerator / denominator
    weight_b = 1.0 - weight_a

    return (weight_a, weight_b)


# 输入参数
STD_DEV_A = 0.20  # 股票A标准差20%
STD_DEV_B = 0.30  # 股票B标准差30%
CORRELATION = 0.50  # 相关系数50%

# 计算最优权重
try:
    w_a, w_b = calculate_min_variance_weights(
        std_dev_a=STD_DEV_A, std_dev_b=STD_DEV_B, correlation=CORRELATION
    )

    # 格式化输出结果
    print(f"最优配置比例:")
    print(f"股票A: {w_a:.2%} ({w_a:.4f})")
    print(f"股票B: {w_b:.2%} ({w_b:.4f})")

    # 验证权重总和
    assert abs(w_a + w_b - 1.0) < 1e-6, "权重总和必须等于1"

except ValueError as e:
    print(f"参数错误: {str(e)}")

代码说明

  1. 核心算法

    • 基于最小方差组合公式:wA=σB2−σABσA2+σB2−2σABw_A = \frac{\sigma_B^2 - \sigma_{AB}}{\sigma_A^2 + \sigma_B^2 - 2\sigma_{AB}}wA=σA2+σB22σABσB2σAB
    • 自动处理分母接近零的特殊情况
    • 协方差计算:σAB=ρ⋅σA⋅σB\sigma_{AB} = \rho \cdot \sigma_A \cdot \sigma_BσAB=ρσAσB
  2. 安全特性

    • 输入参数范围验证
    • 浮点数计算容差处理(1e-10)
    • 权重总和验证断言

输出:

最优配置比例:
股票A: 85.71% (0.8571)
股票B: 14.29% (0.1429)

与数学推导结果一致(wA=67≈0.8571w_A = \frac{6}{7} \approx 0.8571wA=760.8571


这道面试题的本质是考察候选人将金融理论转化为数学模型的能力在约束条件下应用优化技术的实践技能,这些能力直接对应量化投资、资产配置和风险管理中的核心工作需求。

🔑 核心知识点

  1. 现代投资组合理论(MPT)
    • Markowitz均值-方差模型的核心应用
    • 理解组合风险(方差)由资产波动性、相关性共同决定
  2. 统计基础
    • 标准差衡量个体风险
    • 相关系数量化资产联动性
    • 协方差计算(σAB=ρ⋅σA⋅σB\sigma_{AB} = \rho \cdot \sigma_A \cdot \sigma_BσAB=ρσAσB
  3. 优化技术
    • 二次函数最小值解析解(w∗=−b2aw^* = -\frac{b}{2a}w=2ab
    • 约束优化(权重和为1)
  4. 分散化原理
    • 相关系数<1时,组合风险低于个股风险加权平均
    • 通过配置抵消非系统性风险

📊 面试评估维度

考察维度具体表现要求本题对应点
理论知识掌握对MPT核心公式的理解深度正确写出组合方差公式并识别其二次函数特征
数学建模能力将金融问题转化为数学优化问题的能力建立方差最小化目标函数并关联约束条件(权重和为1)
计算准确性处理代数表达式和数值计算的精确性正确完成从相关系数到协方差的转换,并推导最优权重公式
边界情况处理考虑极端参数场景的稳健性当相关系数=1或-1时能否正确处理(本题未涉及但高阶讨论需考虑)
编程实现潜力将数学逻辑转化为代码的能力后续Python实现要求验证了从理论到实践的衔接能力

🧩 典型回答框架

  1. 明确目标函数
    • 声明最小化组合方差:min⁡σp2=wA2σA2+wB2σB2+2wAwBρσAσB\min \sigma_p^2 = w_A^2\sigma_A^2 + w_B^2\sigma_B^2 + 2w_A w_B \rho \sigma_A \sigma_Bminσp2=wA2σA2+wB2σB2+2wAwBρσAσB
  2. 处理约束条件
    • 引入wB=1−wAw_B=1-w_AwB=1wA代入目标函数
  3. 求解优化问题
    • 展开二次函数:σp2=awA2+bwA+c\sigma_p^2 = a w_A^2 + b w_A + cσp2=awA2+bwA+c
    • 求顶点:wA∗=−b/(2a)w_A^* = -b/(2a)wA=b/(2a)
  4. 数值计算
    • 分步计算:方差项→协方差→系数a,b→最优权重
  5. 经济解释
    • 说明为何配置更多低风险资产(A),但非100%(因分散化收益)

💡 核心洞察

本题的深层价值在于考察候选人是否理解风险的本质是资产间的联动性而非个体波动。关键洞察点:

  • ρ=1\rho=1ρ=1时,最优解是100%配置低风险资产(A)
  • 但本题ρ=0.5<1\rho=0.5<1ρ=0.5<1,通过牺牲部分低风险敞口(配置14.29%高风险B)
    换取协方差项的风险抵消效应,实现组合整体风险低于任一单个资产
  • 这揭示了量化金融的核心哲学:风险不是加法而是乘法艺术,最优配置取决于资产间的"化学反应"而非个体优劣

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

船长Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值