基于二阶锥规划(SOCP)实现投资组合优化

2024-12-11

在量化投研领域,许多业务问题都可以转化为数学问题。例如,在投资组合优化、风险管理和衍生品定价中,我们通常会利用最优化函数,将利润、收益或风险等指标进行最大化或最小化,以求得最佳解。

在求最优解时,线性规划(LP)、二次规划(QP)、二次约束线性规划(QCLP)是常用的优化方法,可以处理线性约束或者较为简单的非线性问题。但当面对更复杂的场景,如杠杆限制、市场约束、资本要求等时,这些方法便力有不逮。

此时,使用二阶锥规划(SOCP)是一个更优选择。

SOCP 问题的锥表述形式

image.png

从它的数学模型可以看出,SOCP 的目标函数是线性的,约束条件则由线性约束和二阶锥约束组成。这使得 SOCP 能够广泛适用于多种凸优化问题,上述的线性规划、二次规划以及二次约束规划问题都可以转化为 SOCP 问题求解。此外,由于内点法是解决 SOCP 问题的主流算法,特别适合处理大规模的优化问题,所以在应对量化领域海量数据时,使用 SOCP 可以高效找到全局最优解。

基于以上优势,DolphinDB 提供了对 socp 这一函数的支持,用户可以通过 socp 将原始的业务问题转化为标准形式进行求解。

接下来,让我们以两个具体的投资组合优化问题为例,看看如何使用 socp 函数实现期望收益率的最大化。

(完整案例可前往此链接查看:

https://zhuanlan.zhihu.com/p/11534247101?utm_medium=social&utm_psn=1849477370429448193&utm_source=ZHShareTargetIDMore)

股票投资组合优化问题

本案例中,我们将优化一个包含多个权重约束条件的线性股票投资组合。

首先,我们将这一问题转化为数学模型:

其目标函数为:image.png(ω 为投资组合中各股票的目标权重,f 为投资组合中各股票的预期收益率);

约束条件为:

企业微信截图_17338808995518.png

它们分别是:个股权重限制、成分股权重限制、成分股偏离限制、市值权重限制、行业权重限制、公司禁投股票限制和目标个股权重限制。

接着,我们按照 socp 函数的语法转换并确定相关参数:

在 DolphinDB 中,socp 函数的使用语法为:socp(f, [G], [h], [l], [q], [A], [b])

  • f 表示目标函数的系数向量
  • G 表示锥约束的系数矩阵
  • h 表示锥约束的右端向量
  • l 表示非负象限约束维度标量
  • q 表示各个二阶锥约束维度大小的向量
  • A 表示等式约束的系数矩阵 Aeq
  • b 表示等式约束的右端向量 beq

最后,我们调用 socp 函数即可求解,实现期望收益率的最大化:


res = socp(f_1, G, h, l, q, Aeq, beq)

包含换手率约束及平衡收益与风险的投资组合优化

本案例中,我们将基于 MVO(均值-方差优化)模型,通过优化投资组合来最大化收益并最小化风险。除了延续上一个案例的权重约束条件外,我们还引入了换手率和跟踪误差的约束条件来控制交易成本,避免过度交易。

首先,我们将这一问题转化为数学模型:

其目标函数为:image.png(∑ 为收益率协方差矩阵,ω₀ 为上次的个股权重,Cᐪ 为换手成本系数,λ 为风险系数);

约束条件为:

32882b1e-ffca-4219-8b9f-33b9ff3150cb.png

接着,我们将目标函数与约束条件转化为二阶锥规划的标准形式,方便后续参数的确定:

  • 针对目标函数中的二次项规划问题,我们引入辅助变量 y,令 y=ωᐪ∑ω
  • 针对带有绝对值的换手率规划问题,我们引入辅助变量 u,令 uᵢ=|ωᵢ-ω₀ᵢ| , i=1,2,…,n

此时,原目标函数就可以优化为:image.png

然后,我们像上个例子一样转换 socp 所需参数,并调用该函数进行求解:


res = socp(c, G, h, l, q, Aeq, beq)

在量化投研过程中,引入数学模型不仅能够有效简化复杂的业务问题,还能为决策提供更加科学的依据。为了帮助用户提升投研效率,DolphinDB 将金融领域中绝大部分常用的模型抽象为可直接调用的函数。目前,DolphinDB 函数库已支持包括 socp 在内的 2000+ 函数。除此之外,DolphinDB 还内置多种流计算引擎,支持 JIT 优化、向量化计算等方式,为用户提供高性能计算体验。

image.png

未来,DolphinDB 将持续丰富金融函数库,满足用户不断增长和变化的投研需求。欢迎大家关注并试用 DolphinDB~