在量化投研领域,许多业务问题都可以转化为数学问题。例如,在投资组合优化、风险管理和衍生品定价中,我们通常会利用最优化函数,将利润、收益或风险等指标进行最大化或最小化,以求得最佳解。
在求最优解时,线性规划(LP)、二次规划(QP)、二次约束线性规划(QCLP)是常用的优化方法,可以处理线性约束或者较为简单的非线性问题。但当面对更复杂的场景,如杠杆限制、市场约束、资本要求等时,这些方法便力有不逮。
此时,使用二阶锥规划(SOCP)是一个更优选择。
SOCP 问题的锥表述形式

其中 K 为锥,s 为松弛变量,其值在优化过程中会被确定。
f 是数值型向量,表示目标函数的系数向量。
G 是数值型矩阵,表示锥约束的系数矩阵。
h 是数值型向量,表示锥约束的右端向量。
Aeq 是数值型矩阵,表示等式约束的系数矩阵。
beq 是数值型向量,表示等式约束的右端向量。
接下来,让我们以两个具体的投资组合优化问题为例,看看如何使用 socp 函数实现期望收益率的最大化。
股票投资组合优化问题
首先,我们将这一问题转化为数学模型:
其目标函数为:
(ω 为投资组合中各股票的目标权重,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~
Explore More



扫描二维码,添加 DolphinDB 小助手





