在本系列二(多因子 Alpha 策略回测)中,咱们对美股市场的 4 个量化因子进行了回测。在这里,咱们将应用 DolphinDB database 内置的 quadprog 函数,对各个因子的权重进行均值方差优化,以决定最佳因子权重。
本系列二提供的脚本执行结束后,数据表 factorPnl 会存有每个因子每天的收益。以下脚本基于数据表 factorPnl。
retMatrix=matrix(select C0, C1, C2, C3 from factorPnl)
H = cross(covar, retMatrix, retMatrix)
f=-0.25*each(avg, retMatrix)
A=-(1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 $4:4)
b=-0.1*1 1 1 1
Aeq=matrix([1],[1],[1],[1])
beq=[1]
result=quadprog(H, f, A, b, Aeq, beq)
result[1]
这段代码解决了以下优化问题:
这里咱们的指标函数为最大化(1/4冀望收益 – 1/2方差),同时保障四个因子的权重之和为 1,并且每个因子最小权重为 10%。H 是四个因子收益率的方差 - 协方差矩阵。请留神这里的 H,A 和 Aeq 必须是列数相等的矩阵;f,b 和 beq 必须是向量。A 是负的单位矩阵,与 b 一起应用,保障每个因子权重大于 10%。对于 quadprog 函数细节请参考 DolphinDB 用户开发文档 quadprog。
result[1]给出基于给定优化条件的最佳因子权重。后果如下:
[0.3612, 0.1, 0.438804, 0.1]
在本系列二提供的脚本中,
signalNames = `signal_mom`signal_vol`signal_beta`signal_size
因而,最佳权重为 36.1% 的动量因子,10% 的稳定率因子,43.9% 的 beta 因子和 10% 的市值因子。
以上计算应用了所有历史期间的数据。也可选用最近 10 年的数据进行计算,只需对以上脚本的第一行代码做如下改变:
retMatrix=matrix(select C0, C1, C2, C3 from factorPnl where date>=2007.01.01)
后果如下:
[0.19277, 0.1, 0.1, 0.60723]
因而,最佳权重为 19.3% 的动量因子,10% 的稳定率因子,10% 的 beta 因子和 60.7% 的市值因子。
由此可见,进行均值方差优化时选用的历史期间对后果有重要影响。