在本系列二(多因子Alpha策略回测)中,咱们对美股市场的4个量化因子进行了回测。在这里,咱们将使用 DolphinDB database 内置的quadprog函数,对各个因子的权重进行均值方差优化,以决定最佳因子权重。html
本系列二提供的脚本执行完毕后,数据表factorPnl会存有每一个因子天天的收益。如下脚本基于数据表factorPnl。ide
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]给出基于给定优化条件的最佳因子权重。结果以下:spa
[0.3612, 0.1, 0.438804, 0.1]
在本系列二提供的脚本中,htm
signalNames = `signal_mom`signal_vol`signal_beta`signal_size
所以,最佳权重为36.1%的动量因子,10%的波动率因子,43.9%的beta因子和10%的市值因子。blog
以上计算使用了全部历史时期的数据。也可选用最近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%的市值因子。get
因而可知,进行均值方差优化时选用的历史时期对结果有重要影响。