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