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

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

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

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

SOCP 问题的锥表述形式

图片

  • 其中 K 为锥,s 为松弛变量,其值在优化过程中会被确定。
  • f 是数值型向量,表示目标函数的系数向量。
  • G 是数值型矩阵,表示锥约束的系数矩阵。
  • h 是数值型向量,表示锥约束的右端向量。
  • Aeq 是数值型矩阵,表示等式约束的系数矩阵。
  • beq 是数值型向量,表示等式约束的右端向量。

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

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

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

(完整案例可前往此链接查看:https://zhuanlan.zhihu.com/p/11534247101?utm_medium=social&utm_psn=1849477370429448193&utm_source=ZHShareTargetIDMore) 

股票投资组合优化问题

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

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

其目标函数为:

图片

(ω 为投资组合中各股票的目标权重,f 为投资组合中各股票的预期收益率);

约束条件为:

图片

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

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

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

其目标函数为:

图片

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

约束条件为:

图片

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

  • 针对目标函数中的二次项规划问题,我们引入辅助变量 y,令 y=ωᐪ∑ω

  • 针对带有绝对值的换手率规划问题,我们引入辅助变量 u,令 uᵢ=|ωᵢ-ω₀ᵢ| , i=1,2,…,n

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

图片

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

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

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

图片

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值