主要内容

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

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

加载数据

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

清晰;负载(“asset_return_100_simulated.mat”);[nobreservations, p] = size(stockReturns)
观察量= 2000
P = 100
splitPoint = ceil(nobvation *0.6);训练= 1:splitPoint;test = splitPoint+1: noobserver;trainingNum = numel(训练);

可视化每只股票的权益曲线。对于本例,绘制前5只股票。

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

图中包含一个axes对象。标题为Equity Curve的axis对象包含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,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通过以下方法计算收益 r 一个 μ 一个 + F r f + ε 一个

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

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

有无法解释的资产回报 ε 一个 因为剩下的(p-k)主成分被删除。你可以将未解释的资产收益归因于特定资产的风险,具体表现为D

unexplainedCovar = diag(cov(unexplainedRetn));D = diag(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;%投资组合收益的标准差tRisk = 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,“选项”、选择);astwgt1 = x.asset_weight;

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

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

百分比= 0.05;AssetName = stockReturns.Properties.VariableNames(asset twgt1 >=percentage)';权重= asset twgt1 (asset twgt1 >=percentage);T1 =表(资产名,权重)
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 .的投资组合类支持具有各万博1manbetx种内置约束,您可以使用它们来描述您的投资组合问题,并估计有效边界上的风险和回报。有关更多信息,请参见使用组合对象进行优化的组合集

covarAsset = factorLoading*covarFactor*factorLoading'+D;端口=作品集(“AssetMean”meanStockRetn,“AssetCovar”covarAsset,下界的0,“UpperBound”, 1...“预算”1);asset twgt2 = estimateFrontierByRisk(port, targetRisk);AssetName = stockReturns.Properties.VariableNames(asset twgt2 >=percentage)';权重= asset twgt2 (asset twgt2 >=percentage);T2 =表(资产名,权重)
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,:}*资产twgt1;情节(ret2tick (retn,“方法”“简单”) * 100);持有;包含(“步伐”);ylabel (“价值”);标题(“投资组合权益曲线”);

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

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

参考

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

另请参阅

|||||||||

相关的例子

更多关于

外部网站