主要内容

利用因子模型优化投资组合

这个例子展示了在均值-方差框架下使用因子模型优化资产配置的两种方法。多因素模型常用于风险建模、投资组合管理和投资组合绩效归因。多因素模型减少了投资空间的维度,并负责描述市场的大部分随机性[1].这些因素可以是统计的、宏观经济的和基本的。在本例中的第一种方法中,您根据资产回报构建统计因子,并直接根据这些因子优化配置。在第二种方法中,你使用给定的因子信息来计算资产回报的协方差矩阵,然后使用投资组合类优化资产配置。

加载数据

加载一个模拟数据集,其中包括资产回报总额p= 100项资产和2000项每日观测。

清晰;负载(“asset_return_100_simulated.mat”);[noobservation, p] = size(stockReturns)
nObservation = 2000
p = 100
splitPoint =装天花板(nObservation * 0.6);培训= 1:splitPoint;测试= splitPoint + 1: nObservation;trainingNum =元素个数(培训);

想象每只股票的权益曲线。在本例中,绘制前5只股票。

情节(ret2tick (stockReturns{培训、1:5},“方法”“简单”) * 100);持有;包含(“步伐”);ylabel (“价值”);标题(“股本曲线”);传奇(stockReturns.Properties.VariableNames (1:5),“位置”“bestoutside”“翻译”“没有”);

图中包含一个轴对象。标题为Equity Curve的轴对象包含5个类型为line的对象。这些对象代表了Asset1, Asset2, Asset3, Asset4, Asset5。

基于问题的定义框架,直接针对因素优化资产配置

对于因素,您可以使用从资产回报系列中提取的统计因素。在本例中,您使用主成分分析(PCA)提取统计因素[1].然后,您可以使用这个因素模型来解决投资组合优化问题。

有了因子模型,p资产收益可以表示为k因素的回报, r 一个 μ 一个 + F r f + ε 一个 ,在那里k<<p.在均值-方差框架下,投资组合风险为

Var R p Var r 一个 T w 一个 Var μ 一个 + F r f + ε 一个 T w 一个 w 一个 T F Σ f F T + D w 一个 w f T Σ f w f + w 一个 T D w 一个 , w f F T w 一个

地点:

R p 为投资组合收益(标量)。

r 一个 为资产回报。

μ 一个 是资产回报的均值。

F 因素是装载的,与尺寸p-by-k

r f 为因子回报。

ε 一个 是与每种资产相关的特殊回报。

w 一个 为资产权重。

w f 为因子权重。

Σ f 为因子收益的协方差。

D 是特殊回报的方差。

的参数 r 一个 w 一个 μ 一个 ε 一个 p -通过-1列向量, r f w f k -通过-1列向量, Σ 一个 是一个p -通过- p矩阵, Σ k 是一个k -通过- k矩阵, D 是一个p -通过- p对角矩阵。

因此,均值-方差优化问题表示为

马克斯 μ 一个 T w 一个 年代 t F T w 一个 w f w f T Σ f w f + w 一个 T D w 一个 t 风险 0 w 1 e T w 一个 1

pp资产回报,PCA发现最重要k在给定的回报中捕捉到最重要的变化的方向p资产。通常情况下,k小于p.因此,通过使用PCA,您可以分解p资产回报率k因素,这大大减少了问题的维度。的k主方向被解释为因子负荷,分解的分数被解释为因子回报。有关更多信息,请参见主成分分析统计和机器学习工具箱™。在本例中,使用k =10主成分的数量。或者,您还可以找到k值,通过定义总方差的阈值表示为顶部k主要组件。通常95%是一个可接受的阈值。

k = 10;[factorLoading factorRetn,潜伏,tsq,解释说,μ)= pca (stockReturns{培训:},“NumComponents”、k);disp(大小(factorLoading))
100年10
disp(大小(factorRetn))
1200年10

在输出p -通过- kfactorLoading,每一列是一个主成分。每个时间步骤的资产回报向量被分解为这些k维空间,k < < p.输出factorRetn是一个trainingNum -通过- k维度。

用因子回报估计因子协方差矩阵。

covarFactor = x (factorRetn);

你可以重建p每个观察的资产回报k通过以下方法计算收益 r 一个 μ 一个 + F r f + ε 一个

重建训练集的1200个观测值。

reconReturn = factorRetn*factorLoading' + mu;unexplainedRetn = stockReturns{training,:} - reconReturn;

存在无法解释的资产回报 ε 一个 因为剩下的(p-k)主成分被删除。您可以将无法解释的资产回报归因于表示为的资产特定风险D

unexplainedCovar =诊断接头(x (unexplainedRetn));D =诊断接头(unexplainedCovar);

您可以使用最优化工具箱™中的基于问题的定义框架来构造问题的变量、目标和约束: 马克斯 μ 一个 T w 一个 年代 t F T w 一个 w f w f T Σ f w f + w 一个 T D w 一个 t 风险 e T w 一个 1 0 w 1 .基于问题的定义框架使您能够定义变量,并用符号表示目标和约束。您可以根据具体问题添加其他限制条件或使用不同的目标。有关更多信息,请参见首先选择基于问题或基于解决者的方法

targetRisk = 0.007;%投资组合收益的标准差因为= targetRisk * targetRisk;投资组合回报的方差meanStockRetn =意味着(stockReturns{培训:});optimProb = optimproblem (“描述”“因子协方差矩阵组合”“ObjectiveSense”“马克斯”);wgtAsset = optimvar (“asset_weight”p 1“类型”“连续”下界的0,“UpperBound”1);wgtFactor = optimvar (“factor_weight”k 1“类型”“连续”);optimProb。目标=总和(meanStockRetn”。* wgtAsset);optimProb.Constraints。一个年代年代et_factor_weight = factorLoading'*wgtAsset - wgtFactor == 0; optimProb.Constraints.risk = wgtFactor'*covarFactor*wgtFactor + wgtAsset'*D*wgtAsset <= tRisk; optimProb.Constraints.budget = sum(wgtAsset) == 1; x0.asset_weight = ones(p, 1)/p; x0.factor_weight = zeros(k, 1); opt = optimoptions(“fmincon”“算法”“sqp”“显示”“关闭”...“ConstraintTolerance”1.0 e-8“OptimalityTolerance”1.0 e-8“StepTolerance”1.0 e-8);x =解决(optimProb x0,“选项”、选择);assetWgt1 = x.asset_weight;

在这个例子中,你正在最大化目标风险的投资组合回报。这是一个带二次约束的非线性规划问题fmincon来解决这个问题。

检查超过5%的资产配置,以确定哪些资产拥有较大的投资权重。

比例= 0.05;AssetName = stockReturns.Properties.VariableNames (assetWgt1 > =百分比)';重量= assetWgt1 (assetWgt1 > =百分比);T1 = table(AssetName, Weight)
T1 =7×2表AssetName重量  ___________ ________ {' Asset9} 0.080052 0.22355{‘Asset32}{‘Asset47} 0.11369{‘Asset57} 0.088323 0.068845{‘Asset61}{‘Asset75} 0.06365 0.22163{“Asset94”}

优化资产配置投资组合因子信息类

如果您已经从其他分析或第三方供应商那里获得了因子加载和因子协方差矩阵,那么您可以使用这些信息来计算资产协方差矩阵,然后直接使用投资组合类。回想一下,投资组合风险是 Var R p Var μ 一个 + F r f + ε 一个 T w 一个 w 一个 T F Σ f F T + D w 一个 ,所以你可以得到资产回报的协方差 Σ 一个 F Σ f F T + D

使用estimateFrontierByRisk投资组合求解类优化问题: 马克斯 μ 一个 T w 一个 年代 t w 一个 T Σ 一个 w 一个 t 风险 0 w 一个 1 e T w 一个 1 .的投资组合类支持具有各金宝app种内置约束,您可以使用这些约束来描述您的投资组合问题,并在有效边界上估计风险和回报。有关更多信息,请参见使用组合对象进行优化的组合集

covarAsset = factorLoading * covarFactor * factorLoading ' + D;端口=组合(“AssetMean”meanStockRetn,“AssetCovar”covarAsset,下界的0,“UpperBound”, 1...“预算”1);assetWgt2 = estimateFrontierByRisk(port, targetRisk);AssetName = stockReturns.Properties.VariableNames (assetWgt2 > =百分比)';重量= assetWgt2 (assetWgt2 > =百分比);T2 = table(资产名,权重)
T2 =7×2表AssetName Weight ___________ ________ {'Asset9'} 0.080061 {'Asset32'} 0.22355 {'Asset47'} 0.11369 {'Asset57'} 0.088314 {'Asset61'} 0.068847 {'Asset75'} 0.063644 {'Asset94'} 0.22163

投资组合优化的结果

T1T2显示超过5%的资产配置的相同配置。因此,在本例中,两种采用因子模型的投资组合优化方法获得的资产权重是相同的。

在测试期间可视化优化分配的性能。

return = stockReturns{test,:}*assetWgt1;情节(ret2tick (retn,“方法”“简单”) * 100);持有;包含(“步伐”);ylabel (“价值”);标题(“投资组合净值曲线”);

图中包含一个轴对象。标题为Portfolio Equity Curve的轴对象包含一个类型为line的对象。

这个例子演示了如何使用PCA从资产回报中获得统计因素,然后使用这些因素执行基于因素的投资组合优化。这个示例还展示了如何使用这些统计因子投资组合类。在实践中,你可以采用这个例子,纳入一些可衡量的市场因素,如行业因素或来自各个行业的ETF回报,来描述市场的随机性[1].您可以使用来自最优化工具箱™的基于问题的定义框架,以高灵活性定义因素或资产的权重的自定义约束。或者,您可以直接使用投资组合类运行具有各种内置约束的组合优化。

参考

  1. Meucci,。“建模”市场。风险与资产配置。柏林:施普林格,2009年。

另请参阅

|||||||||

相关的例子

更多关于

外部网站