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

此示例示出了两种方法用于使用下均方差框架的因子模型来优化资产分配。多因素模型经常在风险建模,投资组合管理,和投资组合业绩归因使用。多因素模型降低了投资宇宙的尺寸,并负责说明大部分市场的随机性[1]。这些因素可以统计,宏观性,根本性的。在这个例子中,第一种方法,你建立从资产收益的统计因素,并直接优化配置反对因素。在第二种方法使用给定的因素的信息来计算资产收益率的协方差矩阵,然后使用投资组合类以优化资产配置。

数据加载

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

明确;加载('asset_return_100_simulated.mat');[nObservation,P] =尺寸(stockReturns)
nObservation = 2000
P = 100
splitPoint =小区(nObservation * 0.6);训练= 1:splitPoint;测试= splitPoint + 1:nObservation;trainingNum = numel(训练);

可视化每只股票的资金曲线。在这个例子中,绘制前五的股票。

情节(ret2tick(stockReturns {训练,1:5},'方法''简单')* 100);保持;xlabel(“时间步”);ylabel('值');标题(“资金曲线”);图例(stockReturns.Properties.VariableNames(1:5),'位置'“bestoutside”“解释”'没有');

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

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

随着因子模型,p资产回报可以表示为的线性组合ķ要素回报, [R 一个 = μ 一个 + F [R F + ε 一个 ,其中ķ<<p。在均值 - 方差框架,组合的风险

瓦尔 [R p = 瓦尔 [R 一个 Ť w ^ 一个 = 瓦尔 μ 一个 + F [R F + ε 一个 Ť w ^ 一个 = w ^ 一个 Ť F Σ F F Ť + d w ^ 一个 = w ^ F Ť Σ F w ^ F + w ^ 一个 Ť d w ^ 一个 w ^ F = F Ť w ^ 一个

哪里:

[R p 是投资组合回报率(标量)。

[R 一个 是资产回报。

μ 一个 是资产收益率的平均值。

F 是因子载荷,与尺寸对由k值

[R F 是要素的回报。

ε 一个 是与每个资产的特质回报。

w ^ 一个 是资产重量。

w ^ F 是因子权重。

Σ F 是要素回报的协方差。

d 的特质返回的方差。

参数 [R 一个 w ^ 一个 μ 一个 ε 一个 P-通过-1列向量, [R F w ^ F K-通过-1列向量, Σ 一个 P-通过-p矩阵, Σ ķ K-通过-k矩阵, d P-通过-p对角矩阵。

因此,均值 - 方差最优化问题转化为

最大 μ 一个 Ť w ^ 一个 小号 Ť F Ť w ^ 一个 = w ^ F w ^ F Ť Σ F w ^ F + w ^ 一个 Ť d w ^ 一个 Ť 风险 0 w ^ 1 Ë Ť w ^ 一个 = 1

在里面p通过形成三维空间p资产收益率,PCA发现的最重要的ķ方向捕获在给定收益的最重要的变化p资产。通常情况下,ķ小于p。因此,通过使用PCA可以分解p资产收益进入ķ因素,这大大降低了问题的维数。该ķ主方向被解释为因子载荷与分解的分数被解释为要素回报。欲了解更多信息,请参阅PCA(统计和机器学习工具箱™)。在这个例子中,使用K =10作为主要组分的数量。或者,你也可以找到ķ通过定义的总方差的阈值表示为顶ķ主成分。通常为95%是可接受的阈值。

设k = 10;[factorLoading,factorRetn,潜,TSQ,所解释的,μ= PCA(stockReturns {训练,:}'NumComponents',K);DISP(大小(factorLoading));
100 10
DISP(大小(factorRetn));
1200 10

在输出P-通过-kfactorLoading中,每个列是主要成分。在每个时步资产回报矢量被分解到这些ķ维空间,其中ķ<< p。输出factorRetntrainingNum-通过-k尺寸。

因子协方差矩阵与要素回报的估计。

covarFactor = COV(factorRetn);

您可以重建p资产回报使用每个每个观测ķ通过以下要素回报 [R 一个 = μ 一个 + F [R F + ε 一个

重建的训练集总1200个观察。

reconReturn = factorRetn * factorLoading” +亩;unexplainedRetn = stockReturns {训练,:}  -  reconReturn;

有不明原因的资产回报 ε 一个 因为剩余(p-ķ)主成分被丢弃。您可以将属性不明资产收益资产特定风险表示为d

unexplainedCovar = DIAG(COV(unexplainedRetn));d = DIAG(unexplainedCovar);

您可以使用从优化工具箱基于问题的定义框架™构建变量,目标和约束的问题: 最大 μ 一个 Ť w ^ 一个 小号 Ť F Ť w ^ 一个 = w ^ F w ^ F Ť Σ F w ^ F + w ^ 一个 Ť d w ^ 一个 Ť 风险 Ë Ť w ^ 一个 = 1 0 w ^ 1 。基于问题的定义框架,可以定义变量和表达客观和约束象征。您可以添加其他约束或使用基于您的具体问题不同的目标。欲了解更多信息,请参阅首先选择基于问题或求解器为基础的方法(优化工具箱)。

targetRisk = 0.007;的组合收益%标准偏差tRisk = targetRisk * targetRisk;的组合收益方差%meanStockRetn =平均值(stockReturns {训练,:});optimProb = optimproblem('描述'图集与因子协方差矩阵''ObjectiveSense'“最大”);wgtAsset = optimvar('asset_weight',P,1,'类型''连续'“下界”,0,“上界”,1);wgtFactor = optimvar('factor_weight'中,k,1,'类型''连续');optimProb.Objective =总和(meanStockRetn” * wgtAsset。);optimProb.Constraints.asset_factor_weight = factorLoading'* wgtAsset  -  wgtFactor == 0;optimProb.Constraints.risk = wgtFactor '* covarFactor * wgtFactor + wgtAsset' * d * wgtAsset <= tRisk;optimProb.Constraints.budget =总和(wgtAsset)== 1;x0.asset_weight =者(P,1)/ P;x0.factor_weight =零(K,1);选择= optimoptions(“fmincon”“算法”“小数量议定书”“显示”“关”...'ConstraintTolerance',1.0E-8,'OptimalityTolerance',1.0E-8,'StepTolerance',1.0E-8);X =解决(optimProb,X0,“选项”,选择);assetWgt1 = x.asset_weight;

在这个例子中,你最大化的目标风险组合收益。这是一个非线性规划问题,二次约束和使用fmincon要解决这个问题。

检查资产分配是5%以上,以确定哪些资产有较大的投资权重。

百分比= 0.05;ASSETNAME = stockReturns.Properties.VariableNames(assetWgt1> =百分比)';重量= assetWgt1(assetWgt1> =百分比);T1 =表(ASSETNAME,重量)
T1 =7×2表ASSETNAME重量___________ ________ { 'Asset9'} 0.080053 { 'Asset32'} 0.22355 { 'Asset47'} 0.11369 { 'Asset57'} 0.088323 { 'Asset61'} 0.068845 { 'Asset75'} 0.063649 { 'Asset94'} 0.22163

优化资产配置使用投资组合与要素类信息

如果你已经有一些其它的分析或第三方供应商的因子负荷和因子协方差矩阵,您可以使用这些信息来计算资产的协方差矩阵,然后使用直接运行均值 - 方差最优化投资组合类。回想一下,组合的风险 瓦尔 [R p = 瓦尔 μ 一个 + F [R F + ε 一个 Ť w ^ 一个 = w ^ 一个 Ť F Σ F F Ť + d w ^ 一个 ,这样你就可以得到资产收益的协方差 Σ 一个 = F Σ F F Ť + d

利用estimateFrontierByRisk在里面投资组合班来解决优化问题: 最大 μ 一个 Ť w ^ 一个 小号 Ť w ^ 一个 Ť Σ 一个 w ^ 一个 Ť 风险 0 w ^ 一个 1 Ë Ť w ^ 一个 = 1 。该投资组合类支持具有内金宝app置的约束,你可以用它来形容自己的投资组合问题,并估计在有效前沿上的风险和回报多种。欲了解更多信息,请参阅投资组合设置为优化使用组合对象

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

投资组合优化结果

T1T2示出了用于资产分配是5%以上的相同的分配。因此,在这个例子中,这两种方法以组合优化以因子模型获得资产的权重是相同的。

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

RETN = stockReturns {测试,:} * assetWgt1;图(ret2tick(RETN,'方法''简单')* 100);保持;xlabel(“时间步”);ylabel('值');标题(“证券投资曲线”);

这个例子演示了如何导出使用PCA资产收益统计的因素,然后利用这些因素来执行基于因子的优化组合。这个例子也说明了如何使用与这些统计因素投资组合类。在实践中,你能适应这个例子中加入一些可衡量的市场因素,如工业因素或来自不同行业的ETF的回报,来描述市场的随机性[1]。您可以在因素或资产利用优化工具箱™基于问题的定义框架的重量具有很高的灵活性定义自定义约束。或者,您可以用直接合作投资组合类运行各种内建约束的投资组合优化。

参考

  1. 梅乌奇,A“造型的市场。”风险和资产配置。柏林:施普林格,2009年。