假设我们有 $n$ 个因子 $A_i$,我们希望得到一个最优组合 $\sum w_iA_i$,最大化其收益风险比 IR 。
1、数学模型
假设因子的收益率为$r_i$,因子的协方差矩阵为$\Sigma_{i,j}$,那么问题是最大化 $ \frac{r^T w}{\sqrt{w^T \Sigma w } } $。
在组合优化中,一般只有线性优化或者二次凸优化能求出全局最优解,显然上面 IR 的直接形式不属于这两种。但我们可以通过变形来求解。因为分子分母对于$w$的量纲是一样的,$w$的缩放不影响求解,因此可以直接添加限制添加:
这时候问题变成最小化 $\sigma^2 = w^T \Sigma w $,这就是一个二次凸优化问题了。假设 $ \Gamma $ 为 $\Sigma $ 的 Choleksy 因子,即 $\Sigma = \Gamma^T \Gamma $ ,并令 $\tau = \Gamma w $,那么上述的问题将转为:
这是一个标准的 mosek 二次凸优化问题。
2、工程上如何实现
因子 $A_i$ 在过去 $K$ 天的日收益率序列为$r_{i,k}, 1 \leq i \leq n, 1\leq k \leq K$。那么因子收益率为(前面的系数$\frac{242}{K}$表示年化值):
协方差矩阵可近似(忽略非零期望值):
从这个表达式我们可以直接进行 Cholesky 分解:
然后套用上面的数学模型求解即可。
在工程上我们还需要做更多。为了增加问题的鲁棒性,我们会调增上面的协方差矩阵的对角线,这样会让协方差矩阵更正定。这个增加值称为岭参数( Ridge Parameter ),我们用$\lambda$来表示。那么在数学上,实际就是:
但这个表达式不符合 mosek 二次问题的标准格式,我们需要将$\lambda $ 合并到 $\Gamma $ 和 $\tau $:
因此下面是最终实现(唯一的输入是各个因子的历史日收益率序列 $r_{i,k}$),一个标准化的 mosek 二次凸优化问题:
其中:
Q. E. D.