明确业务条件与需求
确定优化问题三要素:决策变量、目标函数(如最大化期望收益率,最小化组合风险,最大化效用函数等)、约束条件(如等式约束和不等式约束)
选择并建立合适的数学规划模型
将该模型导入到求解器中去求解
四个常见的投资组合优化案例
最大化期望收益率
[0.1, 0.02, 0.01, 0.05, 0.17, 0.01, 0.07, 0.08, 0.09, 0.10]。这些股票属于消费、金融和科技三个行业,希望在每个行业的暴露不超过8%,且每个股票权重分配不得多于 15%,求最大化预期收益的投资组合。
在股票组合优化问题中,可以在个股权重上下限约束,风险约束,行业约束的约束条件下求解股票投资组合的最大收益。
最大化效用函数
现代投资组合理论用均值和方差来刻画收益和风险这两个关键因素,效用函数期望则是尽可能的在最大化期望收益率和最小组合波动率之间取得一个平衡,二次目标函数的最优解也是组合权重优化的一部分,一般收益最大化的同时也要求组合风险最小。
带有换手率约束的投资组合问题
同样是上个场景中的 2457 支股票,我们引入换手率约束。在投资组合问题中,换手率为当前股票权重与初始股票权重的绝对值之和,衡量了股票的流通性大小。过高的换手率意味着较大的交易成本,在这里我们设置所有股票换手率之和不大于1,求解使投资组合达到最大收益率时的权重分配。
带有收益率波动约束的投资组合问题
投资组合的收益率的波动率不超过 11%;
每支股票的权重在 10% 到 50% 之间。
性能对比:DolphinDB VS Python
我们分别使用 DolphinDB 内置最优化求解函数和 Python 求解器来解决线性规划、二次规划、二次约束线性规划这三类问题,对比其性能差异。获取详细脚本,请点击阅读原文,或联系小助手(dolphindb1)。
线性规划问题(LP)

本测试场景使用 200 个变量。
二次规划问题(QP)

本测试场景使用 1000 个变量。
二次约束线性规划问题(QCLP)

本测试场景使用 200 个变量。
实验证明,DolphinDB 最优化函数求解的结果与 Python 的求解结果在小数点后至少四位内均达到一致,同时 DolphinDB 的最优化函数求解效率相较 Python 均有较为显著的提升。
基于 DolphinDB Gurobi 插件的性能对比
与 CPLEX、MOSEK 类似,Gurobi 同样是解决组合优化问题的常见求解器,凭借强大的求解能力与高效的算法,吸引了国内外市场众多客户。目前 DolphinDB 也开发了 Gurobi 插件,方便用户将基于 Gurobi 构建的应用与 DolphinDB 进行集成,该插件将于4月上线 DolphinDB 官网。
线性规划问题(LP)

二次规划问题(QP)

二次约束线性规划问题(QCLP)

测试结果表明,DolphinDB Gurobi 插件在线性规划问题 (LP) 和二次约束线性规划问题 (QCLP) 场景中展现出了更优的性能。




