8

数据库交易回测系列三:多因子Alpha策略最佳因子权重

 3 years ago
source link: https://my.oschina.net/u/4865736/blog/4836446
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
数据库交易回测系列三:多因子Alpha策略最佳因子权重 - DolphinDB智臾科技的个人空间 - OSCHINA - 中文开源技术交流社区

在本系列二(多因子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]

这段代码解决了以下优化问题:

v2-33ddcdfb742847b6fa73ce3852217543_720w.png

这里我们的目标函数为最大化(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%的市值因子。

由此可见,进行均值方差优化时选用的历史时期对结果有重要影响。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK