利用因子模型优化投资组合
本例展示了在均值-方差框架下使用因子模型优化资产配置的两种方法。多因素模型通常用于风险建模、投资组合管理和投资组合绩效归因。多因素模型降低了投资领域的维度,并负责描述市场的大部分随机性[1].这些因素可以是统计的、宏观的和基本的。在本例中的第一种方法中,您根据资产回报构建统计因素,并直接根据这些因素优化配置。在第二种方法中,您使用给定的因子信息来计算资产收益的协方差矩阵,然后使用投资组合
类来优化资产配置。
加载数据
加载一个模拟数据集,其中包括资产总回报p= 100个资产和2000个每日观察。
清晰;负载(“asset_return_100_simulated.mat”);[noobservation, p] = size(stockReturns)
noobservation = 2000
P = 100
splitPoint = ceil(noobservation *0.6);训练= 1:splitPoint;test = splitPoint+1: noobservation;trainingNum =数字(训练);
可视化每只股票的权益曲线。在这个例子中,画出前5只股票。
情节(ret2tick (stockReturns{培训、1:5},“方法”,“简单”) * 100);持有从;包含(“步伐”);ylabel (“价值”);标题(“股本曲线”);传奇(stockReturns.Properties.VariableNames (1:5),“位置”,“bestoutside”,“翻译”,“没有”);
利用基于问题的定义框架直接针对因素优化资产配置
对于这些因素,您可以使用从资产回报系列中提取的统计因素。在本例中,您使用主成分分析(PCA)来提取统计因素[1].然后你可以使用这个因素模型来解决投资组合优化问题。
有了因子模型,p资产收益可以表示为的线性组合k因素的回报, ,在那里k<<p.在均值-方差框架下,投资组合风险为
, ,
地点:
是投资组合回报(标量)。
是资产回报。
是资产收益率的均值。
因子是否随尺寸变化而变化p-by-k.
是因子回报。
是与每种资产相关的特殊收益。
是资产权重。
是因子权重。
是因子收益的协方差。
是特殊收益的方差。
的参数
,
,
,
是p -通过-1
列向量,
而且
是k -通过-1
列向量,
是一个p -通过- p矩阵,
是一个k -通过- k矩阵,
是一个p -通过- p对角矩阵。
因此,均值-方差优化问题的公式为
, , .
在p由p资产收益,PCA认为最重要k的给定回报中最重要的变化p资产。通常情况下,k小于p.因此,通过使用PCA可以分解p资产返回到k因素,这大大降低了问题的维度。的k原则方向被解释为因子负荷,分解的分数被解释为因子回报。有关更多信息,请参见主成分分析
(统计和机器学习工具箱™)。在本例中,使用k =10
主成分的数量。或者,您也可以找到k通过为表示为顶部的总方差定义一个阈值来进行计算k主要组件。通常95%是可以接受的阈值。
K = 10;[factorLoading,factorRetn,latent,tsq,explained,mu] = pca(stockReturns{training,:},“NumComponents”、k);disp(大小(factorLoading))
100年10
disp(大小(factorRetn))
1200年10
在输出中p -通过- kfactorLoading
,每一列为一个主成分。每个时间步的资产回报向量被分解为这些k维度空间,其中K << p.输出factorRetn
是一个trainingNum -通过- k维度。
用因子收益估计因子协方差矩阵。
covarFactor = cov(factorRetn);
你可以重建p资产回报的每个观察使用每个k通过以下方法计算收益 .
重建训练集的总共1200个观测值。
reconReturn = factorRetn*factorLoading' + mu;unexplainedRetn = stockReturns{training,:} - reconReturn;
还有无法解释的资产回报 因为剩下的(p-k)主成分被删除。您可以将无法解释的资产收益归因于表示为的特定资产风险D.
unexplainedCovar = diag(cov(unexplainedRetn));D = diag(未解释covar);
您可以使用Optimization Toolbox™中的基于问题的定义框架来构造问题的变量、目标和约束: , , .基于问题的定义框架使您能够定义变量并象征性地表示目标和约束。您可以根据具体问题添加其他约束或使用不同的目标。有关更多信息,请参见首先选择基于问题或基于解决方案的方法.
targetRisk = 0.007;投资组合收益的标准差风险= targetRisk*targetRisk;投资组合回报的方差meanStockRetn = mean(stockReturns{training,:});optimProb = optimproblem(“描述”,“带因子协方差矩阵的投资组合”,“ObjectiveSense”,“马克斯”);wgtAsset = optimvar(“asset_weight”p, 1,“类型”,“连续”,下界的0,“UpperBound”1);wgtFactor = optimvar(“factor_weight”, k, 1,“类型”,“连续”);optimProb。目标= sum(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 = solve(optimProb,x0,“选项”、选择);assetWgt1 = x.asset_weight;
在这个例子中,你要最大化目标风险的投资组合回报。这是一个带有二次约束的非线性规划问题fmincon
来解决这个问题。
检查超过5%的资产配置,以确定哪些资产具有较大的投资权重。
百分比= 0.05;AssetName = stockReturns.Properties.VariableNames(assetWgt1>=percentage)';权重= assetWgt1(assetWgt1>=percentage);T1 = table(AssetName, Weight)
T1 =7×2表资产名权重___________ ________ {'Asset9'} 0.080053 {'Asset32'} 0.22355 {'Asset47'} 0.11369 {'Asset57'} 0.088323 {'Asset61'} 0.068845 {'Asset75'} 0.063649 {'Asset94'} 0.22163
优化资产配置使用投资组合
具有因子信息的类
如果您已经从其他分析或第三方提供商获得了因子负荷和因子协方差矩阵,则可以使用此信息计算资产协方差矩阵,然后直接使用投资组合
类。回想一下,投资组合风险是
,则可以得到资产收益的协方差
.
使用estimateFrontierByRisk
在投资组合
类来解决优化问题:
,
.的投资组合
类支持具有各种内置的约束,您可以使用它们来描述您的投资组合问题,并估计有效边界上的风险和收益。有关更多信息,请参见使用组合对象进行优化的组合集.
covarAsset = factorLoading*covarFactor*factorLoading'+D;端口=组合(“AssetMean”meanStockRetn,“AssetCovar”covarAsset,下界的0,“UpperBound”, 1...“预算”1);assetWgt2 = estimateFrontierByRisk(port, targetRisk);AssetName = stockReturns.Properties.VariableNames(assetWgt2>=percentage)';权重= assetWgt2(assetWgt2>=百分比);T2 = table(资产名,权重)
T2 =7×2表资产名权重___________ ________ {'Asset9'} 0.080061 {'Asset32'} 0.22355 {'Asset47'} 0.11369 {'Asset57'} 0.088314 {'Asset61'} 0.068847 {'Asset75'} 0.063644 {'Asset94'} 0.22163
投资组合优化结果
表T1
而且T2
为超过5%的资产配置显示相同的配置。因此,在本例中,使用因子模型进行投资组合优化的两种方法获得的资产权重是相同的。
在测试期间可视化优化分配的性能。
retn = stockReturns{test,:}*assetWgt1;情节(ret2tick (retn,“方法”,“简单”) * 100);持有从;包含(“步伐”);ylabel (“价值”);标题(“投资组合权益曲线”);
本示例演示如何使用PCA从资产收益中获得统计因子,然后使用这些因子执行基于因子的投资组合优化。该示例还展示了如何将这些统计因子与投资组合
类。在实践中,你可以调整这个例子,纳入一些可衡量的市场因素,例如行业因素或不同行业的ETF回报率,以描述市场的随机性[1].您可以使用Optimization Toolbox™中的基于问题的定义框架,以高度的灵活性定义因素或资产权重的自定义约束。或者,您可以直接使用投资组合
类以运行具有各种内置约束的投资组合优化。
参考
Meucci,。“市场建模”。风险与资产配置。柏林:施普林格,2009年。
另请参阅
投资组合
|setBounds
|addGroups
|setAssetMoments
|estimateAssetMoments
|estimateBounds
|plotFrontier
|estimateFrontierLimits
|estimateFrontierByRisk
|estimatePortRisk
相关的例子
- 创建Portfolio对象
- 使用默认值处理组合约束
- 验证组合对象的组合问题
- 为投资组合对象的整个有效边界估计有效投资组合
- 估计投资组合对象的有效边界
- 建立可交易投资组合的后处理结果
- 基于半连续和基数约束的投资组合优化
- Black-Litterman组合优化使用金融工具箱™
- 基于基准的投资组合优化
- 使用财务工具箱™的投资组合优化示例
- 利用社会绩效衡量的投资组合优化
- 使用自定义目标使投资组合多样化