主要内容

债券投资组合优化

这个例子展示了如何构建一个最优组合的20和30年期国债,将一段一个月举行。强调整体资产配置的过程。

  • 步骤1:市场数据加载——历史每日国债收益率从弗雷德下载加载。

  • 步骤2:计算市场不变量——每天的变化选择到期收益率作为不变量和假定为多元正态。30年期债券由于缺失的数据,一个期望最大化算法来估计不变量的均值和协方差。不变量的统计数据预计将投资领域。

  • 步骤3:模拟在地平线不变量——由于高收益率曲线相关性和内在结构,主成分分析应用于不变的统计数据。多元正态随机了PCA空间中完成。模拟转换回使用PCA载荷不变的空间。

  • 第四步:计算分布在地平线的回报——模拟月度收益率曲线的变化用于计算投资组合证券的收益率。这需要插值值的模拟自组合证券收益率曲线将期限一个月小于10,20到30年。利润/损失计算了每个场景/安全使用模拟和插值收益率的国债定价。模拟线性回归和统计计算的价格。

  • 第五步:优化资产配置,二次均值/方差优化执行财政部返回数据来计算最优投资组合有效边界重量为10分。投资者偏好选择投资组合是最接近平均值的夏普比率。

步骤1:负载市场数据

历史性的到期收益率数据系列:DGS6MO, DGS1, DGS2, DGS3, DGS5, DGS7, DGS10, DGS20, DGS30日期:9月1日,2000年9月1日,2010年获得:http://research.stlouisfed.org/fred2/categories/115注:数据下载使用数据处理工具箱™使用命令:> >康涅狄格州=弗雷德;> >数据=fetch(康涅狄格州,‘DGS10’,‘9/1/2000’,‘9/1/2010’);结果聚合和存储在一个二进制convinience垫文件

disp (步骤1:加载和可视化的市场数据……”);
步骤1:加载和可视化市场数据……
histData =负载(“HistoricalYTMData.mat”);%为每个系列的到期时间tsYTMMats = histData.tsYTMMats;%日期利率观察tsYTMObsDates = histData.tsYTMObsDates;%观察利率tsYTMRates = histData.tsYTMRates;%可视化收益率曲线如矿坑的= min (tsYTMRates (:));maxy = max (tsYTMRates (:));图;h =情节(tsYTMMats tsYTMRates,' k o ');轴([0,32岁,如矿坑的,maxy]);包含(“到期时间”);ylabel (“收益”);传奇(“历史收益率曲线”,“位置”,“本身”);网格;我= 1:50:长度(tsYTMObsDates)组(h,“ydata”tsYTMRates(我:));标题(datestr (tsYTMObsDates (i)));暂停(0.1);结束

步骤2:计算市场不变量

市场不变量,使用标准:每个系列日常到期收益率的变化。你可以估计他们的统计分布多元正常。IID分析每一个不变的系列生产像样的结果——在“独立”因素高于“相同”。一个更彻底的建模使用更复杂的分布和/或时间序列模型是超出了这个项目的范围。什么是需要占分布参数的估计存在缺失的数据。30年期债券停止一段时间2002年2月至2006年2月,所以没有收益率这个时期。

disp (步骤2:计算市场不变量……”);
步骤2:计算市场不变量……
%不变量则认为是日常到期利率利率变化tsYTMRateDeltas = diff (tsYTMRates);%约1/3的30年期利率(列9)从最初的失踪%数据集。而不是扔掉所有这些观察,一个期望%最大化例程用于估计的均值和协方差%不变量。默认选项(NaN跳过初始估计,等等)。[tsInvMu, tsInvCov] = ecmnmle (tsYTMRateDeltas);%计算标准差和相关系数[tsInvStd, tsInvCorr] = cov2corr (tsInvCov);%的投资期限是1个月。(21工作日9/1/2010之间%和10/1/2010)。自从不变量是可和和手段%方差的正态分布是正常的,我们可以计划%不变量对投资期限如下hrznInvMu = 21 * tsInvMu ';hrznInvCov = 21 * tsInvCov;[hrznInvStd, hrznInvCor] = cov2corr (hrznInvCov);%显示结果disp (市场不变量将地平线以下统计数据的);
市场不变量将地平线以下统计数据
disp (”的意思是:“);
意思是:
disp (hrznInvMu);
1.0 e 03 * -0.5149 -0.4981 -0.4696 -0.4418 -0.3788 -0.3268 -0.2604 -0.2184 -0.1603
disp (的标准差:);
标准偏差:
disp (hrznInvStd);
0.0023 0.0024 0.0030 0.0032 0.0033 0.0032 0.0030 0.0027 0.0026
disp (的关系:);
相关:
disp (hrznInvCor);
1.0000 0.8553 0.5952 0.5629 0.4980 0.4467 0.4028 0.3338 0.3088 0.8553 1.0000 0.8282 0.7901 0.7246 0.6685 0.6175 0.5349 0.4973 0.5952 0.8282 1.0000 0.9653 0.9114 0.8589 0.8055 0.7102 0.6642 0.5629 0.7901 0.9653 1.0000 0.9519 0.9106 0.8664 0.7789 0.7361 0.4980 0.7246 0.9114 0.9519 1.0000 0.9725 0.9438 0.8728 0.8322 0.4467 0.6685 0.8589 0.9106 0.9725 1.0000 0.9730 0.9218 0.8863 0.4028 0.6175 0.8055 0.8664 0.9438 0.9730 1.0000 0.9562 0.9267 0.3338 0.5349 0.7102 0.7789 0.8728 0.9218 0.9562 1.0000 0.9758 0.3088 0.4973 0.6642 0.7361 0.8322 0.8863 0.9267 0.9758 1.0000

步骤3:模拟市场不变量在地平线

高度的相关性并不理想的不变量的分布的模拟地平线(并最终安全价格)。使用主成分分解提取正交不变性。这也可以用于降维,然而由于不变量的数量仍相对较少,保留所有9组件更精确的重建。然而,市场缺失值数据直接阻止你估计的时间序列数据。相反,可以直接从协方差矩阵

disp (步骤3:模拟市场不变量在地平线……”);
步骤3:模拟市场不变量在地平线……
%进行PCA分解利用不变量的协方差[pcaFactorCoeff, pcaFactorVar pcaFactorExp] = pcacov (hrznInvCov);%将pca decompositon的所有组件numFactors = 9;%创建PCA因素协方差矩阵pcaFactorCov = corr2cov (√pcaFactorVar)、眼睛(numFactors));%的数量模拟(随机画)numSim = 10000;%解决随机种子可重复的结果流= RandStream (“mrg32k3a”);RandStream.setGlobalStream(流);%从多元正态分布与零均值随机了%和对角协方差(numFactors pcaFactorSims = mvnrnd (0, 1), pcaFactorCov, numSim);%地平线变换不变量和计算统计数据hrznInvSims = pcaFactorSims * pcaFactorCoeff ' + repmat (hrznInvMu numSim 1);hrznInvSimsMu =意味着(hrznInvSims);hrznInvSimsCov = x (hrznInvSims);[hrznInvSimsStd, hrznInvSimsCor] = cov2corr (hrznInvSimsCov);%显示结果disp (模拟不变量有非常相似的统计原始不变量的);
模拟不变量有非常类似的统计数据最初的不变量
disp (”的意思是:“);
意思是:
disp (hrznInvSimsMu);
1.0 e 03 * -0.4983 -0.5002 -0.4832 -0.4542 -0.4031 -0.3597 -0.2867 -0.2515 -0.1875
disp (的标准差:);
标准偏差:
disp (hrznInvSimsStd);
0.0023 0.0023 0.0030 0.0031 0.0032 0.0031 0.0029 0.0027 0.0026
disp (的关系:);
相关:
disp (hrznInvSimsCor);
1.0000 0.8527 0.5827 0.5502 0.4846 0.4327 0.3896 0.3197 0.2961 0.8527 1.0000 0.8227 0.7840 0.7181 0.6603 0.6097 0.5246 0.4896 0.5827 0.8227 1.0000 0.9646 0.9100 0.8569 0.8048 0.7074 0.6633 0.5502 0.7840 0.9646 1.0000 0.9507 0.9085 0.8656 0.7757 0.7344 0.4846 0.7181 0.9100 0.9507 1.0000 0.9721 0.9428 0.8710 0.8319 0.4327 0.6603 0.8569 0.9085 0.9721 1.0000 0.9726 0.9211 0.8870 0.3896 0.6097 0.8048 0.8656 0.9428 0.9726 1.0000 0.9552 0.9264 0.3197 0.5246 0.7074 0.7757 0.8710 0.9211 0.9552 1.0000 0.9753 0.2961 0.4896 0.6633 0.7344 0.8319 0.8870 0.9264 0.9753 1.0000

第四步:计算分布在地平线的安全返回

投资组合将包括10、20和30年到期国债。为简单起见,假设这些新问题在结算日期和定价在市场价值推断出从当前的收益率曲线。损益分布计算了价格每个安全模拟收益率在地平线,减去购买价格。地平线价格需要非标准时间到期收益率。这些都是使用三次样条插值计算。模拟线性回报他们的统计数据,计算损益的场景。

disp (第四步:计算分布的安全返回地平线……”);
第四步:计算分配安全返回地平线……
%购买和投资期限日期settleDate =“9/1/2010”;hrznDate =“10/1/2010”;%购买新发行国债的到期日期结算日期treasuryMaturities = {“9/1/2020”,“9/1/2030”,“9/1/2040”};%的观察收益率证券结算日期上的利益treasuryYTMAtSettle = tsYTMRates(结束,七章);%初始化数组以备后用treasuryYTMAtHorizonSim = 0 (numSim, 3);treasuryPricesAtSettle = 0 (1、3);treasuryPricesAtHorizonSim = 0 (numSim, 3);%使用实际/实际年化收益率计算基础基础= 8;%价格国债结算日期使用已知的到期收益率%注意:为简单起见,我们假定这些证券%包括利息。希望是,虽然价格可能不是%准确的总体结构/价值之间的关系%保存资产配置过程。j = 1:3 treasuryPricesAtSettle (j) = bndprice (treasuryYTMAtSettle (j), 0, settleDate,treasuryMaturities (j),“基础”、基础);结束%的美国国债价格,我们需要知道到期收益率% 9岁11个月,19年11个月,29年11个月%的模拟。我们使用三次样条插值近似这些%变换模拟不变量在地平线到期利率hrznYTMRatesSims = repmat (tsYTMRates(最终,:),numSim, 1) + hrznInvSims;hrznYTMMaturities = {“4/1/2011”,“10/1/2011”,“10/1/2012”,“10/1/2013”,“10/1/2015”,“10/1/2017”,“10/1/2020”,“10/1/2030”,“10/1/2040”};%将日期转换成数字串行日期x = datenum (hrznYTMMaturities);ξ= datenum (treasuryMaturities);%的数值精度,改变x值从0开始minDate = min (x);x = x - minDate;ξ= xi - minDate;%为每个模拟和成熟度近似收益率接近10,20年,30年%的节点。注意,花键配合的影响与线性适合有一个%显著影响产生的理想配置。这是由于%显著低估收益当使用一个线性的健康%点的已知节点i = 1: numSim treasuryYTMAtHorizonSim(我,:)= interp1 (x, hrznYTMRatesSims(我,:),,样条的);结束% 1可视化模拟收益率曲线插值图;情节(x, hrznYTMRatesSims (1:)' k o '习,treasuryYTMAtHorizonSim (1:)“罗”);包含(的时间(天));ylabel (“收益”);传奇({“模拟收益率曲线”,“窜改收益率”},“位置”,“本身”);网格;标题(“看样条与线性Interpolants变焦”);

%公债价格为每个模拟到期收益率在地平线%就是做了相同的假设在调用bndprice之上基础= 8 * 1 (numSim 1);j = 1:3 treasuryPricesAtHorizonSim (:, j) = bndprice (treasuryYTMAtHorizonSim (:, j), 0,hrznDate treasuryMaturities (j),“基础”、基础);结束%计算线性分布的回报treasuryReturns = (treasuryPricesAtHorizonSim - repmat (treasuryPricesAtSettle numSim 1))。/ repmat (treasuryPricesAtSettle numSim 1);%计算返回数据retsMean =意味着(treasuryReturns);retsCov = x (treasuryReturns);[retsStd, retsCor] = cov2corr (retsCov);%可视化结果30年期国债图;嘘(treasuryReturns, 100);标题(的收益分配10年,20年,30年国债的);网格;传奇({“十年”,“20年”,“30年”});

第五步:优化资产配置

资产配置是使用二次规划优化。十个最优投资组合计算和夏普比率计算。基于投资者偏好的最优投资组合选择的是最接近平均值的夏普比率

disp (第五步:优化资产配置……”);
第五步:优化资产配置…
%计算10分的投影有效边界% std /回报空间。[portStd, portRet portWts] = portopt (retsMean retsCov 10);%可视化图;次要情节(2,1,1)情节(portStd portRet,' k o ');包含(“组合性病”);ylabel (“投资回报”);标题(“有效边界投影”);传奇(“最佳组合”,“位置”,“本身”);网格;次要情节(2,1,2)栏(portWts,“堆叠”);包含(组合数的);ylabel (的组合权重);标题(的比例在每个财政投资);传奇({“十年”,“20年”,“30年”});

%夏普比率计算使用0无风险利率,因为我们是投资%的美国国债夏普= portRet. / portStd;基于近%的投资者选择投资组合意味着夏普比率sharpeTarget =意味着(夏普);investorChoice =找到(min (abs (sharpe-sharpeTarget)) = = abs (sharpe-sharpeTarget));investorPortfolioWts = portWts (investorChoice:);disp (的投资者比例分配在10年,20年,30年国债的);
投资者分配比例在10年,20年,30年国债
disp (investorPortfolioWts);
0.3989 0.3196 0.2815

另请参阅

|||||

相关的例子

更多关于