这个例子展示了在均值-方差框架下使用因子模型优化资产配置的两种方法。多因素模型常用于风险建模、投资组合管理和投资组合绩效归因。多因素模型减少了投资空间的维度,并负责描述市场的大部分随机性[1].这些因素可以是统计的、宏观经济的和基本的。在本例中的第一种方法中,您根据资产回报构建统计因子,并直接根据这些因子优化配置。在第二种方法中,你使用给定的因子信息来计算资产回报的协方差矩阵,然后使用文件夹
类优化资产配置。
加载一个模拟数据集,其中包括资产回报总额p= 100项资产和2000项每日观测。
清晰;负载('资产返回\u 100\u模拟。mat');[noobservation, p] = size(stockReturns)
nObservation=2000
p = 100
splitPoint =装天花板(nObservation * 0.6);培训= 1:splitPoint;测试= splitPoint + 1: nObservation;trainingNum =元素个数(培训);
可视化每个股票的权益曲线。在本例中,绘制前五只股票。
情节(ret2tick (stockReturns{培训、1:5},“方法”,“简单”) * 100);持有从;包含(“步伐”);ylabel (“价值”); 头衔(“股本曲线”); 图例(股票收益率。属性。变量名称(1:5),“位置”,“最佳户外”,“口译员”,“没有”);
对于因素,您可以使用从资产回报系列中提取的统计因素。在本例中,您使用主成分分析(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这个refore, by using PCA you can decompose thep资产回报率k因素,这大大减少了问题的维度。的k原则方向被解释为因子负荷,分解的分数被解释为因子回报。有关更多信息,请参阅主成分分析
统计和机器学习工具箱™。在本例中,使用k =10
主成分的数量。或者,您还可以找到k值,通过定义总方差的阈值表示为顶部k主要组件。通常95%是一个可接受的阈值。
k = 10;[factorLoading factorRetn,潜伏,tsq,解释说,μ)= pca (stockReturns{培训:},“NumComponents”、k);disp(大小(factorLoading))
100年10
显示(尺寸(系数)
1200年10
在输出p -通过- k因子负荷
,每列为主成分。每个时间步的资产回报向量分解为k维空间,k < < p这个outputfactorRetn
是一个trainingNum -通过- k维
利用因子收益估计因子协方差矩阵。
covarFactor=cov(factorRetn);
你可以重建p每个观察的资产回报k因子按下列方式返回 .
重建训练集的1200个观测值。
reconReturn = factorRetn*factorLoading' + mu;unexplainedRetn = stockReturns{training,:} - reconReturn;
存在无法解释的资产回报 因为剩下的(p-k)主成分被删除。您可以将无法解释的资产回报归因于表示为D.
未解释的COVAR=diag(cov(未解释的RETN));D=diag(未解释的COVAR);
您可以使用最优化工具箱™中的基于问题的定义框架来构造问题的变量、目标和约束: , , 这个problem-based definition framework enables you to define variables and express objective and constraints symbolically. You can add other constraints or use a different objective based on your specific problem. For more information, see首先选择基于问题或基于解决者的方法.
targetRisk = 0.007;%投资组合收益的标准差因为= targetRisk * targetRisk;投资组合回报的方差meanStockRetn =意味着(stockReturns{培训:});optimProb = optimproblem (“描述”,“因子协方差矩阵组合”,“ObjectiveSense”,“马克斯”); wgtaset=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;资产名称=stockReturns.Properties.VariableNames(资产名称>=percentage)';权重=资产名称1(资产名称>=percentage);T1=表格(资产名称,权重)
T1 =7×2表资产名称权重0.080052{'Asset32'}0.22355{'Asset47'}0.11369{'Asset57'}0.088323{'Asset61'}0.068845{'Asset75'}0.06365{'Asset94'}0.22163
文件夹
因子信息类如果您已经从其他分析或第三方提供商处获得了因子加载和因子协方差矩阵,则可以使用此信息计算资产协方差矩阵,然后使用文件夹
类。回想一下,投资组合风险是
,因此您可以通过
.
使用estimateFrontierByRisk
在文件夹
类来解决优化问题:
,
这个文件夹
类支持具有各万博1manbetx种内置约束,您可以使用这些约束来描述您的投资组合问题,并在有效边界上估计风险和回报。有关更多信息,请参见使用组合对象进行优化的组合集.
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
表T1
和T2
显示超过5%的资产配置的相同配置。因此,在本例中,两种采用因子模型的投资组合优化方法获得的资产权重是相同的。
在测试期间可视化优化分配的性能。
return = stockReturns{test,:}*assetWgt1;情节(ret2tick (retn,“方法”,“简单”) * 100);持有从;包含(“步伐”);ylabel (“价值”); 头衔(“投资组合净值曲线”);
这个例子演示了如何使用PCA从资产回报中获得统计因素,然后使用这些因素执行基于因素的投资组合优化。这个示例还展示了如何使用这些统计因子文件夹
类。在实践中,你可以采用这个例子,纳入一些可衡量的市场因素,如行业因素或来自各个行业的ETF回报,来描述市场的随机性[1].您可以使用来自最优化工具箱™的基于问题的定义框架,以高灵活性定义因素或资产的权重的自定义约束。或者,您可以直接使用文件夹
类运行具有各种内置约束的组合优化。
Meucci,。“建模”市场。风险和资产配置。柏林:施普林格,2009年。
addGroups
|估计资产时刻
|estimateBounds
|estimateFrontierByRisk
|estimateFrontierLimits
|estimatePortRisk
|plotFrontier
|文件夹
|setAssetMoments
|setBounds