MATLAB程序设计策略模拟组合保险策略分析.docx
- 文档编号:11733770
- 上传时间:2023-03-31
- 格式:DOCX
- 页数:36
- 大小:73.09KB
MATLAB程序设计策略模拟组合保险策略分析.docx
《MATLAB程序设计策略模拟组合保险策略分析.docx》由会员分享,可在线阅读,更多相关《MATLAB程序设计策略模拟组合保险策略分析.docx(36页珍藏版)》请在冰豆网上搜索。
MATLAB程序设计策略模拟组合保险策略分析
策略模拟—组合保险策略分析
人性的贪婪与恐惧在资本市场中可以得到充分的体现,组合保险策略产品是在下限风险确定的前提下,以获取潜在收益为目标的产品,本质为“恐惧基础上的贪婪”。
组合保险策略按构成主要分为基于期权的投资组合保险(Option-BasedPortfolioInsurance,OBPI)策略和恒定比例投资组合保险(ConstantProportionPortfolioInsurance,CPPI)策略是两种广泛应用的投资组合保险策略。
基于期权的投资组合保险产品使用债券与期权组合构建产品,这样构建方法与股票挂钩产品中的保本票据的构建方法一致。
在利息较低或者期权价格较高的情况下,基于期权的投资组合保险策略较难实现。
目前,国内市场金融工具有限,期权市场还尚未全面发展,保本产品基本都是使用固定比例投资组合保险进行构建。
本章以组合保险策略作为示例进行策略的模拟。
策略模拟的一般步骤为:
1.模拟数据生成(历史数据或随机数据);
2.策略模型根据模型原理对数据进行计算并生成结果;
3.对结果数据进行分析评价模型有效性。
1固定比例组合保险策略
投资组合保险理论(PortfolioInsurance)始于上世纪70年代末80年代初。
最初是由Leland和Rubinstein(1976)提出。
保本策略的本质是以确定的风险去追求潜在收益。
目前,国际上流行的保本策略有很多种,其中固定比例投资组合保险(CPPI:
ConstantProportionPortfolioInsurance)策略是最通用的保本策略之一。
CPPI是目前保本理财产品市场上非常流行的做法,它通过动态调整投资组合中无风险品种与高收益品种的投资比例,从而达到既规避高收益投资品种价格下跌风险的同时,又享受到其价格上涨的收益。
1.1策略模型
固定比例投资组合保险(CPPI:
ConstantProportionPortfolioInsurance)策略是组合保险策略通用方法之一。
CPPI策略的主要架构为:
将资产分为无风险资产和风险资产两部分。
初始时,风险资产投资比例较低,产品投资运作一段时间后根据资产的收益情况对无风险资产和风险资产两部分的投资比例进行调整,如果出现盈利,则可进一步扩大风险投资比例;如果出现亏损,则立即减少风险资产投资比例。
CPPI策略的基本公式如下:
其中,
表示t时刻投资组合的资产净值;
表示t时刻可投资于风险资产的上限;
表示t时刻可投资于无风险资产的下限;
表示t时刻表示风险乘数;
表示t时刻组合的安全底线;而
表示t时刻可承受风险的安全垫;
为初始风险控制水平(保本线);(T-t)为产品剩余期限;r为无风险资产年化收益率。
例:
某产品风险乘数为2,保本率为100%,债券利率为5%,保本期限一年,则初始时刻资产配置计算为:
产品初始净值为100元,安全底线为100/(1+5%)=95.2,则风险资产最大配置为2×(100-95.2)=9.6,无风险资产的最低配置为100-9.6=90.4,如果半年后,由于风险资产收益较高,产品净值为120元,安全底线为100/(1+0.5*5%)=97.6,则风险资产最大配置为2×(120-97.6)=44.8,无风险资产的最低配置为120-44.8=75.2。
同样若,风险资产亏损,则相应的减少风险资产配比,由于本产品风险乘数为2,若风险资产亏损50%,则根据模型公式计算,风险资产投资上限将为0,即风险资产将被平仓。
1.2模型参数
固定比例投资组合保险策模型涉及风险控制水平、风险乘数、资产配置调整周期等多个关键参数:
1.风险控制水平(保本线):
风险控制水平(或者保本线),就是产品到期时的最低净值。
如果面值为100元的产品,到期要求最低为100元,即保本率为100%,则为保本产品;若到期最低为102元,即保本率为102%,则为保收益产品;若到期最低为90元,即保本率为90%。
组合保险策略产品是在下限风险确定的前提下,以获取潜在收益为目标的产品。
但是风险控制水平的高低决定了产品配置风险资产的高低。
配置风险资产的比重越大,暴露风险头寸就多大,获取潜在收益的能力越强。
风险控制水平或者保本线应该根据投资人的风险厌恶水平确定。
2.风险乘数:
当保本比率一定,风险乘数越大,则风险资产投资比例越大。
如果市场行情越好,风险资产表现越好,则组合保险策略收益率也越大。
反之,产品净值损失越大。
在某种程度上来说,风险乘数的大小对整个产品的业绩起着至关重要的作用。
因此,风险乘数的设定水平反应了产品投资人的风险承受能力,同时也反映了产品管理人的投资能力。
风险乘数调整策略主要分两种:
恒定比例模式:
该方法采用消极管理方式,产品的风险乘数无论市场行情怎样,都保守一个固定的值不变。
这样可以避免因主观判断误差而造成的额外损失,但同时也会错过获得额外收益的机会。
变动比例模式:
产品的风险乘数根据市场行情而变化。
如果市场行情好,将系数变大将获得超额收益,反之市场行情差,将系数变小将有效减少股票市场系统风险给产品带来的损失,如果险乘数根据市场行情调整,由于市场行情好坏的判断是由主观因素来判断,存在因主观误差造成产品净值损失的可能。
3.资产配置调整周期:
当风险资产处于上升阶段时,及时进行资产配置调整从而提高风险资产比例,则会带来较好的正收益;反之,风险资产面临下跌阶段,及时进行资产配置调整,降低风险资产比例则可以避免损失。
但是,如市场处于盘整行情时,频繁调整资产比例会导致较大的交易费用。
国外通常有3种调整方法:
定期调整法则(以固定交易日作为间隔进行定期调整)、滤波调整法则(基金组合上涨或下跌一定比率时进行调整)、仓位调整法则(计算得到的股票仓位比例与实际仓位比例相差一定比率时便进行调整)。
2时间不变性组合保险策略
TIPP策略主要架构为:
时间不变性组合保险(time-invariantportfolioprotection,TIPP)策略。
该策略由Estep&Kritzman(1988)提出,并指出当投资组合的价值上涨时,产品的最低保险金额是一个动态调整的值。
TIPP和CPPI的调整公式非常类似,TIPP增加了保本比例调整策略,即每当产品收益每达到一定的比率,则动态保本比例相应的提高一定比例。
例如,产品收益达到5%时,相应的保险比率提高3%。
2.1策略模型
TIPP策略的基本公式如下:
其中,
表示t时刻投资组合的资产净值;
表示t时刻可投资于风险资产的上限;
表示t时刻可投资于无风险资产的下限;M表示风险乘数;
表示t时刻组合的安全底线;而
表示t时刻可承受风险的安全垫;
表示t时刻组合风险控制水平(保本线);(T-t)为产品剩余期限;r为无风险资产年化收益率。
2.2模型参数
固定比例投资组合保险策略(TIPP)与时间不变性组合保险策略(CPPI)基本一致,唯一的不同便是动态保本比率。
动态保本比率的确定依赖于无风险资产收益率与保本期限长短经过测试而确定的,当产品盈利的时候可以采用TIPP策略调整动态保本比率。
可以适时采用TIPP策略在一定时期后调整动态保本比率。
该策略只当产品盈利时使用,例如在一段时期内产品盈利5%,则可将动态保本比率相对应的调整3%,这样可使产品在一定时期后有一定收益,同时可投资于风险的资产会相应减少,即获得潜在收益的能力相比于CPPI策略可能会降低。
3策略数值模拟
3.1模拟情景假设
某金融产品采用组合保险策略进行资产投资,产品期限为1年,无风险资产为债券,其年化收益率为5%,风险资产为沪深300指数组合,产品保本率为100%,若预期未来1年沪深300指数的期望收益为20%,年化标准差为30%,风险资产的交易费用为0.5%,选取不同的组合保险策略,产品参数(包括风险乘数、资产配置调整周期,动态保本比率调整策略)产品收益如何?
点睛:
组合保险策略TIPP与CPPI是在发达资本市场成熟的策略,一般的操作方式是买入与产品期限相符的零息债券,债券到期使得产品达到产品说要求的保本率,使用剩余的资金进行风险资产的杠杆交易(杠杆率为风险乘数),交易可以通过融资融券或者保证金交易的方法进行。
但是国内目前缺少零息债券,融资融券业务尚未开展,证券交易为全额交收。
组合保险策略TIPP与CPPI执行方式一般为风险资产投资部门借入无风险资产进行杠杆投资,由于无风险资产投资减少对产品的实际保本率会造成一定的影响,尤其是在市场急速下跌,风险资产投资止损平仓时,对产品的实际保本率将造成较大影响。
3.2固定比例组合保险策略模拟
Matlab编程实现固定比例组合保险策略(CPPI),函数名称CPPIStr,M文件为CPPIStr.m
[F,E,A,G,SumTradeFee,portFreez]=CPPIStr(PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,SData)
输入参数:
PortValue:
产品组合初始价值
Riskmulti:
CPPI策略的风险乘数
GuarantRatio:
产品的保本率
TradeDayTimeLong:
产品期限,以交易日计数
TradeDayOfYear:
产品模拟,每年交易日,例如,每年交易日为250天
adjustCycle:
产品根据模型进行调整周期,例如每10个交易日调整一次
RisklessReturn:
无风险资产年化收益率
TradeFee:
风险资产的交易费用
SData:
模拟风险资产收益序列,布朗运动
输出参数:
F:
数组,第t个数据表示t时刻安全底线
E:
数组,第t个数据表示t时刻可投资于风险资产的上限
A:
数组,第t个数据表示t时刻产品净值
G:
数组,第t个数据表示t时刻可投资于无风险资产的下限
SumTradeFee:
总交易费用
portFreez:
组合风险资产是否出现平仓,0为未出现风险资产平仓,1:
出现风险资产平仓
CPPIStr函数程序源码:
Function[F,E,A,G,SumTradeFee,portFreez]=CPPIStr(PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,
TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,SData)
%codebyariszheng@
%2009-6-30
%intput:
%PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,
%SDataissimulationindexdata
%output
%F,E,A,G,SumTradeFee
%SumTradeFee
%portFreezdefaultis0,ifportFreez=1,portfoliofreeztherewould
%havenorisk--investment
%%
%初始交易费用(交易佣金)为0;
SumTradeFee=0;
%F,E,A,G的初始化,长度为N+1
F=zeros(1,TradeDayTimeLong+1);
E=zeros(1,TradeDayTimeLong+1);
A=zeros(1,TradeDayTimeLong+1);
G=zeros(1,TradeDayTimeLong+1);
%给定F,E,A,G的初始值
%初始组合资产
A
(1)=PortValue;
%初始安全底线
F
(1)=GuarantRatio*PortValue*exp(-RisklessReturn*TradeDayTimeLong/TradeDayOfYear);
%初始风险资产
E
(1)=max(0,Riskmulti*(A
(1)-F
(1)));
%无风险资产
G
(1)=A
(1)-E
(1);
%%
%是否进行风险资产平仓
%portFreez=0正常,portFreez=1;平仓
portFreez=0;
%ifportFreez=1,portfoliofreeztherewouldhavenorisk--investment
%%
%开始逐日模拟,循环计算
%根据T-1日情况与T日市场行情,计算T日产品净值
fori=2:
TradeDayTimeLong+1
E(i)=E(i-1)*(1+(SData(i)-SData(i-1))/(1+SData(i-1)));
G(i)=G(i-1)*(1+RisklessReturn/TradeDayOfYear);
A(i)=E(i)+G(i);
F(i)=GuarantRatio*PortValue*exp(-RisklessReturn*(TradeDayTimeLong-i+1)/TradeDayOfYear);
%判断是否进行调仓,调仓周期为adjustCycle
%mod函数求余数的意思,若adjustCycle=20,i为20的整数倍时
%mod(i,adjustCycle)=0
ifmod(i,adjustCycle)==0
temp=E(i);
E(i)=max(0,Riskmulti*(A(i)-F(i)));
SumTradeFee=SumTradeFee+TradeFee*abs(E(i)-temp);
G(i)=A(i)-E(i)-TradeFee*abs(E(i)-temp);
end
%判断是否平仓,若风险资产为0,组合平仓冻结
ifE(i)==0
A(i)=G(i);
portFreez=1;
end
end
函数测试,M程序为testCPPIStr.m
1.初始参数设置
%setvalue
PortValue=100;%产品组合初始价值
Riskmulti=2;%产品风险乘数为2
GuarantRatio=1.00;%产品保本率为100%
TradeDayTimeLong=250;%产品期限为250个交易日
TradeDayOfYear=250;%模拟假设一年交易为250个
adjustCycle=10;%调整周期为每10个交易日调整一次
RisklessReturn=0.05;%无风险产品收益率为5%
TradeFee=0.005;%风险资产的交易费用为0.5%
2.根据参数生成符合布朗运动的收益率序列
%togenerateBrownrandomnumber
%预期收益率年化专日化
Mean=1.2^(1/TradeDayOfYear)-1;
%预期波动率年化专日化
Std=0.3/sqrt(TradeDayOfYear);
%初始价格
Price0=100;
SData=RandnPrice(Price0,Mean,Std,TradeDayOfYear)
%将初始价格并入随机价格序列
SData=[Price0;SData]
%[X0,X1,~,Xn]
注释:
RandnPrice函数:
生成收益率服从正态分布的价格序列函数RandnPrice.M
Price=RandnPrice(Price0,mu,sigma,N).
输入:
Price0:
初始价格
Mu:
正态分布均值
Sigma:
正态分布方差
N:
随机数个数
输出:
Price:
收益率服从正态分布的价格序列
具体参看‘随机模拟’相关章节。
3.调用CPPIStr函数
%调用CPPIStr函数
[F,E,A,G,SumTradeFee,portFreez]=CPPIStr(PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,SData);
4.结果以及画图显示
%toplot
figure;
%子图1,模拟的风险资产的价格序列
subplot(2,1,1)
plot(SData)
legend('Hs300-Simulation')
xlabel('t');
ylabel('price')
%CPPI策略的运行情况
subplot(2,1,2)
plot(A,'-.')
holdon
plot(E,'-o')
plot(F,'-k')
plot(G,'-x')
%标记线形
legend('PortValue','RiskAssect','GuarantLine','RisklessAssect')
xlabel('t');
ylabel('price')
%总的交易费用
SumTradeFee
图1CPPI策略模拟图
计算结果:
如图1所示,收益序列为随机生成,由于每次计算生成的随机序列不同,则每次计算的结果不同,该次计算产品收益率为10%,总交易费用为1.04%.(占初始总资产的比例)。
3.3时间不变性组合保险策略模拟
Matlab编程实现时间不变性组合保险策略模拟(TIPP),函数名称TIPPStr,M文件为TIPPStr.m
[F,E,A,G,GuarantRatio,SumTradeFee,portFreez]=TIPPStr(PortValue,Riskmulti,GuarantRatio,GuarantRatioMark,GuarantRatioAdjust,TradeDayTimeLong,TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,SData)
输入参数:
PortValue:
产品组合初始价值
Riskmulti:
CPPI策略的风险乘数
GuarantRatio:
产品的保本率
GuarantRatioMark:
产品的保本率调整标准
GuarantRatioAdjust:
产品的保本率调整大小
TradeDayTimeLong:
产品期限,以交易日计数
TradeDayOfYear:
产品模拟,每年交易日
adjustCycle:
产品根据模型进行调整周期,例如每10个交易日调整一次
RisklessReturn:
无风险资产年化收益率
TradeFee:
风险资产的交易费用
SData:
模拟风险资产收益序列,布朗运动
注释:
例如,GuarantRatioMark=5%,GuarantRatioAdjust=3%,即产品收益每增加5%,则产品的保本率上调3%,GuarantRatio只能进行向上调整。
输出参数:
F:
数组,第t个数据表示t时刻安全底线
E:
数组,第t个数据表示t时刻可投资于风险资产的上限
A:
数组,第t个数据表示t时刻产品净值
G:
数组,第t个数据表示t时刻可投资于无风险资产的下限
GuarantRatio:
产品的保本率
SumTradeFee:
总交易费用
portFreez:
组合风险资产是否出现平仓,0为未出现风险资产平仓,1:
出现风险资产平仓
函数TIPPStr源代码:
function[F,E,A,G,GuarantRatio,SumTradeFee,portFreez]=TIPPStr(PortValue,Riskmulti,GuarantRatio,
GuarantRatioMark,GuarantRatioAdjust,TradeDayTimeLong,TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,SData)
%codebyariszheng@
%2009-6-30
%intput:
%PortValue,Riskmulti,GuarantRatio,GuarantRatioMark,GuarantRatioAdjust
%Trade,DayTimeLong,TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee
%e.gGuarantRatio=100%,GuarantRatioMark=5%,GuarantRatioAdjust=3%
%ifreturnmorethanGuarantRatioMark
%GuarantRatio=GuarantRatio+GuarantRatioAdjust
%SDataissimulationindexdata
%output
%F,E,A,G,SumTradeFee
%SumTradeFee
%portFreezdefaultis0,ifportFreez=1,portfoliofreez
%therewouldhavenorisk--investment
%%
%初始的交易总费用为0
SumTradeFee=0;
%模拟状态变量F,E,A,G的空间初始化(分配内存)
%为不影响计算一般初始值为0;
F=zeros(1,TradeDayTimeLong+1);
E=zeros(1,TradeDayTimeLong+1);
A=zeros(1,TradeDayTimeLong+1);
G=zeros(1,TradeDayTimeLong+1);
%模拟状态变量F,E,A,G的初始化
A
(1)=PortValue;
F
(1)=GuarantRatio*PortValue*exp(-RisklessReturn*TradeDayTimeLong/TradeDayOfYear);
E
(1)=max(0,Riskmulti*(A
(1)-F
(1)));
G
(1)=A
(1)-E
(1);
%%
%ifportFreez=1,portfoliofreeztherewouldhavenorisk--investment
%风险资产平仓状态标识;
portFreez=0;
%保本率为100%
GuarantRatioMarklevel=1;
%%
fori=2:
TradeDayTimeLong+1
E(i)=E(i-1)*(1+(SData(i)-SData(i-1))/(1+SData(i-1)));
G(i)=G(i-1)*(1+RisklessReturn/TradeDayOfYear);
A(i)=E(i)+G(i);
F(i)=GuarantRatio*PortValue*exp(-RisklessReturn*(TradeDayTimeLong-i+1)/TradeDayOfYear);
%判断是否进行调仓,调仓周期为adjustCycle
%mod函数求余数的意思,若adjustCycle=20,i为20的整数倍时
%mod(i,adjustCycle)=0
ifmod(i,adjustCycle)==0
if(A(i)/A
(1))>(1+GuarantRatioMarklevel*GuarantRatioMark)
GuarantRatio=GuarantRatio+GuarantRatioAdjust;
GuarantRatioMarklevel=GuarantRatioM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 程序设计 策略 模拟 组合 保险 分析