matlab prctile出错,matlab使用Copula仿真优化市场风险

news/2024/7/23 19:30:17 标签: matlab prctile出错

原标题:matlab使用Copula仿真优化市场风险

使用Copula仿真优化市场风险

此示例演示了使用具有胖尾边缘分布的多变量copula模拟计算投资组合的风险价值和条件风险值(预期缺口)。然后使用模拟来计算最优风险收益组合的有效前沿。

内容

导入支持历史数据集

可视化标准化价格

退货和边际分配

Copula校准

Copula模拟

计算单周期模拟VaR

组合优化

以给定的回报水平计算投资组合

导入支持历史数据集

使用Datafeed Toolbox的API导入我们将在本练习中建模的不同资产类别的市场数据

SPY:大盘美国(标准普尔500指数)

EEM:新兴市场股票

TLT:20年期国债(iShares Barclays)

COY:美国高收益债券

普惠制:大宗商品(iPath S&P GSCI总回报指数)

RWR:房地产(房地产投资信托指数)

names = { 'SPY','EEM','TLT','COY','GSP','RWR' };

startPeriod = '2009-10-01' ;

endPeriod = '2013-06-24' ;

[date,prices,ds] = importFeedPrices(names,startPeriod,endPeriod);

nAssets = length(名字);

可视化标准化价格

该图显示了每个指数的相对价格走势。每个指数的初始水平已经标准化为统一,以便于比较历史记录中的相对表现。

plot(date,normPrices),datetick('x'),xlabel('Date'),ylabel('Index Value');

title('Normalized Daily Index Closings');

0a37ffe7d7c872d58945bb89aa6c9439.png退货和边际分配

为准备copula建模,单独描述每个指数的回报分布。虽然每个回归序列的分布可以参数化地表征,但是使用具有广义Pareto尾部的分段分布来拟合半参数模型是有用的。这使用极值理论来更好地表征每个尾部的行为。

return = price2ret(价格);

cc5621cd7a8dfa43c83aac374d3bf947.png以下代码段为每个索引返回系列创建一个paretotails类型的对象。这些Pareto尾部对象封装参数Pareto下尾部,非参数内核平滑内部和参数Pareto上尾部的估计,以为每个索引构建复合半参数CDF。

tailFraction = 0.1;

marginal {i} = paretotails(return(:,i),tailFraction,1 - tailFraction,'kernel');

fprintf('%s的边缘分布:\ n',名称{i});

SPY的边际分布:

分段分布有3个部分

-Inf

-0.0125822

0.01286

EEM的边际分布:

分段分布有3个部分

-Inf

-0.0186259

0.0185703

TLT的边际分布:

分段分布有3个部分

-Inf

-0.0132814

0.0128738

COY的边际分布:

分段分布有3个部分

-Inf

-0.0105025

0.011195

GSP的边际分布:

分段分布有3个部分

-Inf

-0.0161561

0.016506

RWR的边际分布:

分段分布有3个部分

-Inf

-0.0172097

0.0168041

得到的分段分布对象允许在CDF内部进行插值并在每个尾部进行外推(函数评估)。外推允许估计历史记录之外的分位数,这对于风险管理应用是非常宝贵的。在这里,我们将paretoTail分布产生的拟合与正态分布的拟合进行比较。

index = 1;

dist = marginal {index};

CLF

h = probplot(gca,@ dist.cdf);

set(h,'Color','r');

title([ 'Semi-Parametric / Piecewise Probability Plot:' names {index}])

148bf63e2ca7fbcb86c82cba5af6575d.png

Copula校准

我们使用统计工具箱功能来校准和模拟数据。

使用每日索引返回,使用函数copulafit估计高斯和t copula的参数。由于在标量自由度参数(DoF)变得无限大时,copula变为高斯copula,因此两个copula实际上属于同一族,因此共享线性相关矩阵作为基本参数。

虽然高斯copula的线性相关矩阵的校准很简单,但是copula的校准不是。出于这个原因,统计工具箱软件提供了两种在copula校准的技术:以下代码段首先通过上面导出的分段半参数CDF将每日居中的回报转换为均匀变量。然后它将Gaussian和t copula拟合到转换后的数据:

[〜,ax] = plotmatrix(U); title('拟合Copula之前的转换回报');

b9b8b7cdf9cdeb72d72634c93b4b0d3e.png

5a78128f6ad395642f171aee8e544e4d.png

估算copula的参数。注意从t copula校准获得的相对较低的自由度参数,表明明显偏离高斯情况。

[rho,DoF] = copulafit('t',U,'ApproximateML')

rhoT =

1 0.88229 -0.59693 0.40875 0.58027 0.81485

0.88229 1 -0.52371 0.38906 0.63175 0.73608

-0.59693 -0.52371 1 -0.28404 -0.37285 -0.43114

0.40875 0.38906 -0.28404 1 0.2953 0.36207

0.58027 0.63175 -0.37285 0.2953 1 0.47097

0.81485 0.73608 -0.43114 0.36207 0.47097 1

DoF =

9.5014

估计的相关矩阵与线性相关矩阵相似但不相同

corrcoef(return) 每日收益的%线性相关矩阵

ans =

1 0.89745 -0.61065 0.4677 0.59174 0.83717

0.89745 1 -0.54167 0.45612 0.63322 0.76712

-0.61065 -0.54167 1 -0.30377 -0.3918 -0.44429

0.4677 0.45612 -0.30377 1 0.33312 0.43525

0.59174 0.63322 -0.3918 0.33312 1 0.49161

0.83717 0.76712 -0.44429 0.43525 0.49161 1

Copula模拟

现在已经估计了copula参数,使用copularnd函数模拟联合依赖的均匀变量。

然后,通过外推Pareto尾部并对平滑后的内部进行插值,通过每个索引的逆CDF 将从copularnd导出的均匀变量转换为每日居中返回。这些模拟的居中回报与从历史数据集获得的回归一致。假设回报在时间上是独立的,但在任何时间点都具有由给定的copula引起的依赖性和等级相关性。

nPoints = 10000; %#模拟观测值

U = copularnd('t',rhoT,DoF,nPoints); %从t copula模拟U(0,1)

[〜,ax] = plotmatrix(R); title('模拟回报的成对相关');

62e16adcbe444550fa4aa63dc6d7b162.png

计算单周期模拟VaR

来自copula模型的多变量模拟可用于计算样本组合的风险值和预期不足(CVaR)。

%样本组合组件权重

wts = [.1 .2 .3 .2 .1 .1]';

%从模拟组件返回生成组合返回

portReturns = R * wts;

%计算VaR

var = -prctile(portReturns,1);

cvar = -mean(portReturns(portReturns

%与正态分布比较

R2 = mvnrnd(mean(returns),cov(returns),10000);

normReturns = R2 * wts;

var2 = -prctile(normReturns,1);

cvar2 = -mean(normReturns(normReturns

disp('Copula Value-at-Risk ----------------------');

fprintf('99 %% VaR:%0.2f %% \ n99 %% CVaR:%0.2f %% \ n \ n',var * 100,cvar * 100);

disp('多变量正常风险值---------');

fprintf('99 %% VaR:%0.2f %% \ n99 %% CVaR:%0.2f %% \ n \ n',var2 * 100,cvar2 * 100);

Copula风险价值----------------------

99%的风险价值:1.78%

99%CVaR:2.58%

多变量正常风险值---------

99%VaR:1.49%

99%CVaR:1.71%

组合优化

以前,我们使用模拟回报来计算样本组合的风险。相反,我们可以找到一个最佳投资组合(权重),为我们提供一定的回报风险。我们可以使用PortfolioCVaR框架来完成此任务。

p = PortfolioCVaR('ProbabilityLevel',。99,'AssetNames',名称);

p = p.setScenarios(R);

p = p.setDefaultConstraints();

wts = p.estimateFrontier(20);

portRisk = p.estimatePortRisk(wts);

portRet = p.estimatePortReturn(wts);

CLF

visualizeFrontier(p,portRisk,portRet);

201afe03fd2aaa14bd1dbc3b58f811d9.png

以给定的回报水平计算投资组合

wt = p.estimateFrontierByReturn(.05 / 100);

TOC;

pRisk = p.estimatePortRisk(wt);

pRet = p.estimatePortReturn(wt);

经过的时间是0.635017秒。

62a614119be5597ae8c04591115e8b14.png

▍关注我们

趋势报告、案例精选、最新洞察 第一时间与您分享

【拓端数据】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。

68daff702221fade2c7bde4539c781ba.png

官网: tecdat.cn

微信公众号:拓端数据返回搜狐,查看更多

责任编辑:


http://www.niftyadmin.cn/n/1467984.html

相关文章

php建立函数库,利用php DOM函数库创建xml文档

/*** filename: domEx.php** Editor: richard_ma** Date: 2007-07-27** Description:* 利用php DOM函数库创建xml文档*/// 设置Http头属性为xmlheader("Content-Type:text/xml");/*** 创建文档对象及根节点*/// 创建DOM对象,xml版本为1.0编码方式为UTF-8$dom new …

最小二乘法解决什么问题_如何解决最小操作问题

最小二乘法解决什么问题Hello, everyone!大家好! It’s been quite some time since I last posted, but I am back with another JavaScript algorithm tutorial. This time we’ll be solving the Minimum Operations problem, which tasks you with finding the…

matlab散点图看不到,matlab关于叶绿素散点图无法画出问题

clc;clear all;close all;tablereadtable(F:\Chlorophyll-a\叶绿素csv格式\sw_chla_monthly_2002-2011.csv);%将csv转成表格形式timetable.time(2:362613,:); %获取时间列% xmat2str(cell2mat(time(1,1)));% yx(2:8);%获取月平均的日期dataxlsread(F:\Chlorophyll-a\sw_chla_mo…

迁移学习 保持参数不变_迁移到打字稿,使其保持平稳

迁移学习 保持参数不变In the process of transitioning two mature frontend codebases (totalling ~5k files / 300k lines) from Javascript to Typescript, I learned a bit about the process that might be helpful to anyone considering this change in their stack. M…

ajax调用php文件函数吗,使用php和ajax调用javascript函数?

这是我的情况:我已经加载了这个页面(评论页面)。我可以使用javascript函数(ajax)获取新的注释。我也可以发表评论。问题是,当我发表评论时,我想同时获取新的评论。(所以用户可以看到他上传的评论。)遗憾的是,我的评论获取脚本比我的评论上传脚本快得多,这使得javascript在我的评…

多继承,多重继承,多层继承_服务继承的角度介绍

多继承,多重继承,多层继承Inheritance is one of the most popular ways to reuse code in Angular. It has been used very frequently to build components. Yet, not many developers will apply inheritance to service. In fact, service inheritance is much cleaner and…

python打印一年的日历,Python~打印日历~选择年月份~遍历

根据用户输入年月份来输出日历import calendarx int(input(请输入年份:))y int(input(请输入月份:))calcalendar.month(x,y)print(以下输出str(x)年str(y)月的日历:)print(ca运行如下遍历某一年的日历for循环import calendarx int(input(请…

react引用多个样式_使用多个引用进行React

react引用多个样式It is not as complicated as you might think它并不像您想象的那么复杂 向#StraightToThePoint系列问好 (Say hello to #StraightToThePoint series) NERDJACKING is just launching the #StraightToThePoint series: short stories with no chit-chat, jus…