在本系列二(多因子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
因而可知,進行均值方差優化時選用的歷史時期對結果有重要影響。