您的当前位置:首页正文

MATLAB程序设计策略模拟—组合保险策略分析

2020-05-07 来源:好走旅游网


策略模拟—组合保险策略分析

人性的贪婪与恐惧在资本市场中可以得到充分的体现,组合保险策略产品是在下限风险确定的前提下,以获取潜在收益为目标的产品,本质为“恐惧基础上的贪婪”。

组合保险策略按构成主要分为基于期权的投资组合保险(Option-Based Portfolio Insurance, OBPI)策略和恒定比例投资组合保险(Constant Proportion Portfolio Insurance, CPPI)策略是两种广泛应用的投资组合保险策略。

基于期权的投资组合保险产品使用债券与期权组合构建产品,这样构建方法与股票挂钩产品中的保本票据的构建方法一致。在利息较低或者期权价格较高的情况下,基于期权的投资组合保险策略较难实现。目前,国内市场金融工具有限,期权市场还尚未全面发展,保本产品基本都是使用固定比例投资组合保险进行构建。

本章以组合保险策略作为示例进行策略的模拟。策略模拟的一般步骤为: 1.模拟数据生成(历史数据或随机数据);

2.策略模型根据模型原理对数据进行计算并生成结果; 3.对结果数据进行分析评价模型有效性。

1固定比例组合保险策略

投资组合保险理论(Portfolio Insurance)始于上世纪70年代末80年代初。最初是由Leland 和Rubinstein(1976)提出。保本策略的本质是以确定的风险去追求潜在收益。目前,国际上流行的保本策略有很多种,其中固定比例投资组合保险(CPPI:Constant Proportion Portfolio Insurance)策略是最通用的保本策略之一。CPPI是目前保本理财产品市场上非常流行的做法,它通过动态调整投资组合中无风险品种与高收益品种的投资比例,从而达到既规避高收益投资品种价格下跌风险的同时,又享受到其价格上涨的收益。

1.1策略模型

固定比例投资组合保险(CPPI:Constant Proportion Portfolio Insurance)策略是组合保险策略通用方法之一。CPPI策略的主要架构为:将资产分为无风险资产和风险资产两部分。初始时,风险资产投资比例较低,产品投资运作一段时间后根据资产的收益情况对无风险资产和风险资产两部分的投资比例进行调整,如果出现盈利,则可进一步扩大风险投资比例;如果出现亏损,则立即减少风险资产投资比例。

CPPI策略的基本公式如下:

Etmax(0,Mt(AtFt))GtAtEtFtAter(Tt)其中,At表示t时刻投资组合的资产净值;Et表示t时刻可投资于风险资产的上限;

Gt表示t时刻可投资于无风险资产的下限;Mt表示t时刻表示风险乘数;Ft表示t时刻组

合的安全底线;而(AtFt)表示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-invariant portfolio protection,TIPP)

策略。该策略由Estep & Kritzman(1988)提出,并指出当投资组合的价值上涨时,产品的最低保险金额是一个动态调整的值。TIPP 和 CPPI 的调整公式非常类似,TIPP增加了保本比例调整策略,即每当产品收益每达到一定的比率,则动态保本比例相应的提高一定比例。例如,产品收益达到5%时,相应的保险比率提高3%。

2.1策略模型

TIPP策略的基本公式如下:

Etmax(0,Mt(AtFt))GtAtEtFtAter(Tt)其中,At表示t时刻投资组合的资产净值;Et表示t时刻可投资于风险资产的上限;

Gt表示t时刻可投资于无风险资产的下限;M表示风险乘数;Ft表示t时刻组合的安全底

t表示t时刻组合风险控制水平线;而(AtFt)表示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) %code by ariszheng@gmail.com %2009-6-30 %intput:

%PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,TradeDayOfYear,adj

ustCycle,RisklessReturn,TradeFee,

%SData is simulation index data %output

%F,E,A,G,SumTradeFee %SumTradeFee

%portFreez default is 0, if portFreez=1, portfolio freez there would % have no risk--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/Trad

eDayOfYear);

%初始风险资产

E(1)=max(0,Riskmulti*(A(1)-F(1))); %无风险资产

G(1)=A(1)-E(1); %%

%是否进行风险资产平仓

% portFreez=0正常,portFreez=1;平仓 portFreez=0;

%if portFreez=1, portfolio freez there would have no risk--investment %%

%开始逐日模拟,循环计算

%根据T-1日情况与T日市场行情,计算T日产品净值 for i=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 if mod(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,组合平仓冻结 if E(i)==0

A(i)=G(i); portFreez=1; end end

函数测试,M程序为testCPPIStr.m 1.初始参数设置

%set value

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.根据参数生成符合布朗运动的收益率序列

%to generate Brown random number %预期收益率年化专日化

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.结果以及画图显示

%to plot figure;

%子图1,模拟的风险资产的价格序列 subplot(2,1,1) plot(SData)

legend('Hs300-Simulation') xlabel('t'); ylabel('price') %CPPI策略的运行情况 subplot(2,1,2) plot(A,'-.') hold on

plot(E,'-o') plot(F,'-k') plot(G,'-x') %标记线形

legend('PortValue','RiskAssect','GuarantLine','RisklessAssect') xlabel('t'); ylabel('price') %总的交易费用 SumTradeFee

170160150140price Hs300-Simulation13012011010090 050100150t20025030012010080price PortValueRiskAssectGuarantLineRisklessAssect6040200 050100150t200250300

图1 CPPI策略模拟图

计算结果:

如图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,a

djustCycle,RisklessReturn,TradeFee,SData)

%code by ariszheng@gmail.com %2009-6-30 %intput:

%PortValue,Riskmulti,GuarantRatio,GuarantRatioMark,GuarantRatioAdjust %Trade,DayTimeLong,TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee %e.g GuarantRatio=100%,GuarantRatioMark=5%,GuarantRatioAdjust=3% %if return more than GuarantRatioMark

%GuarantRatio=GuarantRatio+GuarantRatioAdjust %SData is simulation index data %output

%F,E,A,G,SumTradeFee %SumTradeFee

%portFreez default is 0, if portFreez=1, portfolio freez %there would have no risk--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/Trad

eDayOfYear);

E(1)=max(0,Riskmulti*(A(1)-F(1))); G(1)=A(1)-E(1); %%

%if portFreez=1, portfolio freez there would have no risk--investment %风险资产平仓状态标识; portFreez=0; %保本率为100%

GuarantRatioMarklevel=1; %%

for i=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 if mod(i,adjustCycle)==0

if ( A(i)/A(1) ) > (1+GuarantRatioMarklevel*GuarantRatioMark) GuarantRatio=GuarantRatio+GuarantRatioAdjust; GuarantRatioMarklevel=GuarantRatioMarklevel+1; end

F(i)=GuarantRatio*PortValue*exp(-RisklessReturn*

(TradeDayTimeLong-i+1)/TradeDayOfYear);

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

%是否发生风险资产的平仓; if E(i)==0

A(i)=G(i); portFreez=1; end end

函数测试,M程序为testTIPPStr.m 1.初始参数设置

%set value

PortValue=100;% 产品组合初始价值 Riskmulti=2; %产品风险乘数为2

GuarantRatio=1.00; %产品保本率为100%

GuarantRatioMark=0.05;% 产品的保本率调整标准为5%, GuarantRatioAdjust=0.03; %产品的保本率调整大小为3%, TradeDayTimeLong=250; %产品期限为250个交易日 TradeDayOfYear=250; %模拟假设一年交易为250个 adjustCycle=10; %调整周期为每10个交易日调整一次 RisklessReturn=0.05; %无风险产品收益率为5% TradeFee=0.005; %风险资产的交易费用为0.5%

2.根据参数生成符合布朗运动的收益率序列

%to generate Brown random number %预期收益率年化专日化

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函数语法参看‘随机模拟’相关章节。 3.调用TIPPStr函数

%to computer

[F,E,A,G,GuarantRatio,SumTradeFee,portFreez]=TIPPStr(PortValu

e,Riskmulti,GuarantRatio,GuarantRatioMark, GuarantRatioAdjust, TradeDayTimeLong, TradeDayOfYear, adjustCycle, RisklessReturn, TradeFee,SData);

4.计算结果及画图展示

150Hs300-Simulation140130price 1201101009080 050100150t20025030012010080price PortValueRiskAssectGuarantLineRisklessAssect6040200 050100150t200250300

图2 TIPP策略模拟图

计算结果:

如图2所示,收益序列为随机生成,由于每次计算生成的随机序列不同,则每次计算的结果不同,该次计算产品收益率为6.69%,总交易费用为 0.782%(占初始总资产的比例),保本率调整为 103%。

注视:两次模拟的结果基于不同的随机价格序列(同样的方法,两次生成的数值不同),在收益率与交易费用上不具可比性。

4策略选择与参数优化

4.1 模拟情景假设

某金融产品采用组合保险策略进行资产投资,产品期限为1年,无风险资产为债券,其年化收益率为5%,风险资产为沪深300指数组合,产品保本率为100%,若预期未来1年沪深300指数的期望收益为20%,年化标准差为30%,风险资产的交易费用为0.5%,选择CPPI策略还是TIPP策略,参数如何设置使得产品期望收益最大

4.2 模拟方案与模拟参数

模拟思路与步骤如下: 1. 模拟数据生成:

根据案例说明“若预期未来1年沪深300指数的期望收益为20%,年化标准差为30%”生成1000组不同的布朗运动的随机序列。

2.模拟参数设置:

CPPI策略模拟参数设置

PortValue:产品组合初始价值为100

Riskmulti:CPPI策略的风险乘数,分别选取2, 2.5, 3.0, 3.5, 4.0五种情况 GuarantRatio:产品的保本率分为95%,100%两种情况 TradeDayTimeLong:产品期限,以交易日计数,为250 TradeDayOfYear:产品模拟,每年交易日为250

adjustCycle:产品根据模型进行调整周期,采用1,5,10,20四种情况 RisklessReturn:无风险资产年化收益率5%

TIPP策略模拟参数设置

GuarantRatioMark:产品的保本率调整标准 GuarantRatioAdjust:产品的保本率调整大小 分别采取一下两组

GuarantRatioMark =5%,GuarantRatioAdjust =3% GuarantRatioMark =3%, GuarantRatioAdjust =2%

3.模拟计算:

使用CPPI与TIPP分布使用不同的参数设置,进行1000次模拟计算,使用1000次的均值作为在给定条件下的期望收益率。

4.3 模拟程序与结果

CPPI策略模拟程序,M文件CPPIOpt.m 参数说明:

GuarantRatio:产品保本率,分别为95%,100% 两种情况 Riskmulti:产品风险乘数,分别为2, 2.5, 3, 3.5,4五种情况

adjustCycle:策略调整周期,分别为1,5,10,20即每天调整,每周调整等,四种情况 Return:在参数一定条件下的产品收益率(年化) Volatility:在参数一定条件下的产品波动率(年化) SumTradeFee:在参数一定条件下的产品交易费用

portFreez:在参数一定条件下的产品风险资产平仓的概率

根据不同参数的组合共将计算出40种不同参数情况下CPPI策略结果

模拟程序源码:

%%

%CPPI simulation %相关参数设 %初始组合价值

PortValue=100; %Portfoilo Value %交易日个数

TradeDayTimeLong=250; TradeDayOfYear=250; %无风险收益率

RisklessReturn=0.05; %交易费用(%) TradeFee=0.005; %情景设定 风险乘数

Riskmulti=[2,2.5,3,3.5,4];

%情景设定 保本率

GuarantRatio=[0.95,1.00]; %情景设定 调整周期

adjustCycle=[1,5,10,20]; %结果矩阵的初始化

% length(GuarantRatio)=2 % length(Riskmulti)=4 %length(adjustCycle)=2

%共总16种组合,每种组合有7个参数

%length(GuarantRatio)*length(Riskmulti)*length(adjustCycle)=16

CPPITestMatrix=zeros(length(GuarantRatio)*length(Riskmulti)*length(ad

justCycle),7);

%CPPIResult=[GuarantRatio,Riskmulti,adjustCycle,Return,Volatility,Sum

TradeFee,portFreez]

%%

%根据每种情景假设进行模拟 num=0;

for i=1:length(GuarantRatio) for j=1:length(Riskmulti);

for k=1:length(adjustCycle) num=num+1;

CPPITestMatrix(num,1:3)=[GuarantRatio(i),Riskmulti(j),adjustCycle(k)];

end end end %%

%每种情况,模拟1000次,生成1000次随机序列 testNum=1000; %随机序列的参数

%将预期收益率20%进行日化 1.2^(1/250)-1;

%将预期波动率30%进行日化,30%/sqrt(250); sqrr表示开方 Mean=1.2^(1/TradeDayTimeLong)-1; Std=0.3/sqrt(TradeDayTimeLong); %初始价格为100 Price0=100;

%过程矩阵(testNum,TradeDayTimeLong+1),1000次测试,每次测试251个数据 SDataMatrix=zeros(testNum,TradeDayTimeLong+1); for i=1:testNum

SData=RandnPrice(Price0,Mean,Std,TradeDayTimeLong) SDataMatrix(i,:)=[Price0;SData]; end %%

%CPPI compute

%根据随机序列开始计算模拟

SumTradeFee=zeros(testNum,1); portFreez=zeros(testNum,1); testReturn=zeros(testNum,1);

testVolatility=zeros(testNum,1); %分别待入不同的参数进行CPPI模拟

for testNo=1:length(CPPITestMatrix) for i=1:testNum

%CPPIResult=[GuarantRatio,Riskmulti,adjustCycle,Return, %Volatility,SumTradeFee]

TRiskmulti=CPPITestMatrix(testNo,2); TGuarantRatio=CPPITestMatrix(testNo,1); TadjustCycle=CPPITestMatrix(testNo,3); [F,E,A,G,SumTradeFee(i),portFreez(i)]=

CPPIStr(PortValue,TRiskmulti,TGuarantRatio, TradeDayTimeLong,...

TradeDayOfYear,TadjustCycle,RisklessReturn,TradeFee,SDataMatrix(i,:));

testReturn(i)=( A(TradeDayTimeLong+1)-A(1) )/A(1);

testVolatility(i)=std( price2ret( A ) )*sqrt(TradeDayOfYear); end

CPPITestMatrix(testNo,4)=sum(testReturn)/testNum;

CPPITestMatrix(testNo,5)=sum(testVolatility)/testNum; CPPITestMatrix(testNo,6)=sum(SumTradeFee)/testNum; CPPITestMatrix(testNo,7)=sum(portFreez)/testNum; end

CPPITestMatrix

计算结果: GuarantRatio 保本率 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 95% 100% 100% 100% 100% 100% Riskmulti 风险乘数 2 2 2 2 2.5 2.5 2.5 2.5 3 3 3 3 3.5 3.5 3.5 3.5 4 4 4 4 2 2 2 2 2.5 adjustCycle 调整周日 1 5 10 20 1 5 10 20 1 5 10 20 1 5 10 20 1 5 10 20 1 5 10 20 1 Return 收益率 0.0750 0.0773 0.0779 0.0781 0.0784 0.0828 0.0839 0.0843 0.0807 0.0879 0.0897 0.0904 0.0819 0.0924 0.0951 0.0962 0.0821 0.0965 0.1003 0.1019 0.0633 0.0645 0.0647 0.0648 0.0650 Volatility 波动率 0.0558 0.0563 0.0564 0.0564 0.0695 0.0705 0.0708 0.0708 0.0827 0.0848 0.0853 0.0855 0.0955 0.0989 0.0998 0.1002 0.1077 0.1128 0.1142 0.1150 0.0285 0.0288 0.0288 0.0288 0.0356 SumTradeFee 交易费用 0.3658 0.1648 0.1169 0.0806 0.6841 0.3105 0.2207 0.1520 1.0874 0.4986 0.3550 0.2445 1.5695 0.7285 0.5200 0.3580 2.1225 0.9995 0.7156 0.4928 0.1852 0.0834 0.0592 0.0408 0.3463 portFreez 平仓概率 0 0 0.001 0 0 0 0.001 0.002 0 0.001 0.002 0.003 0.001 0.001 0.002 0.01 0.001 0.001 0.004 0.025 0 0 0.001 0 0

100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 100% 2.5 2.5 2.5 3 3 3 3 3.5 3.5 3.5 3.5 4 4 4 4 5 10 20 1 5 10 20 1 5 10 20 1 5 10 20 0.0672 0.0678 0.0680 0.0662 0.0698 0.0707 0.0711 0.0668 0.0721 0.0735 0.0740 0.0669 0.0742 0.0761 0.0769 0.0362 0.0363 0.0364 0.0427 0.0438 0.0440 0.0441 0.0495 0.0514 0.0518 0.0520 0.0561 0.0590 0.0598 0.0602 0.1572 0.1117 0.0770 0.5505 0.2524 0.1797 0.1238 0.7946 0.3688 0.2633 0.1813 1.0746 0.5060 0.3623 0.2495 0 0.001 0.002 0 0.001 0.002 0.003 0.001 0.001 0.002 0.01 0.001 0.002 0.004 0.025 表1 CPPI策略模拟结果

结果说明:

CPPI策略在预期市场上涨概念较大的情况下,CPPI策略低保本率与高风险乘数获得收益最高,为10.19%,波动性也最大11.5%,发生风险资产平仓的概率同样最大,策略的调整间隔越短,交易费用越高。

TIPP策略模拟程序,M文件TIPPOpt.m 参数说明:

GuarantRatio:产品保本率,分别为95%,100% 两种情况 Riskmulti:产品风险乘数,分别为2, 2.5, 3, 3.5,4五种情况

adjustCycle:策略调整周期,分别为1,5,10,20即每天调整,每周调整等四种情况 Return:在参数一定条件下的产品收益率(年化) Volatility:在参数一定条件下的产品波动率(年化) SumTradeFee:在参数一定条件下的产品交易费用

portFreez:在参数一定条件下的产品风险资产平仓的概率 GuarantRatioMark:产品的保本率调整标准 GuarantRatioAdjust:产品的保本率调整大小 分别采取一下两组,两种情况

GuarantRatioMark =5%,GuarantRatioAdjust =3% GuarantRatioMark =3%, GuarantRatioAdjust =2%

根据不同参数的组合共将计算出80种不同参数情况下TIPP策略结果

程序源码:

%%

%TIPP simulation

PortValue=100; %Portfoilo Value TradeDayTimeLong=250; TradeDayOfYear=250; RisklessReturn=0.05;

TradeFee=0.005;

Riskmulti=[2,2.5,3,3.5,4]; GuarantRatio=[0.95,1.00]; adjustCycle=[1,5,10,20];

GuarantRatioMark=[0.03,0.05]; GuarantRatioAdjust=[0.02,0.03];

TIPPTestMatrix=zeros(length(GuarantRatioMark)*length(GuarantRatio)*le

ngth(Riskmulti)...

*length(adjustCycle),9);

%CPPIResult=[GuarantRatio,GuarantRatioMark,GuarantRatioAdjust,Riskmul

ti,adjustCycle,Return,

%Volatility,SumTradeFee,portFreez] %%

num=0;

for i=1:length(GuarantRatio) for j=1:length(Riskmulti);

for k=1:length(adjustCycle)

for l=1:length(GuarantRatioMark) num=num+1;

TIPPTestMatrix(num,[1,4,5])=[GuarantRatio(i),Riskmulti(j),adjustCycle(k)];

TIPPTestMatrix(num,[2,3])=[GuarantRatioMark(l),GuarantRatioAdjust(l)];

end end end end %%

%每种情况,模拟1000次,生成1000次随机序列 testNum=1000; %随机序列的参数

Mean=1.2^(1/TradeDayTimeLong)-1; Std=0.3/sqrt(TradeDayTimeLong); Price0=100;

SDataMatrix=zeros(testNum,TradeDayTimeLong+1); for i=1:testNum

SData=RandnPrice(Price0,Mean,Std,TradeDayTimeLong) SDataMatrix(i,:)=[Price0;SData]; end %%

%TIPP compute

SumTradeFee=zeros(testNum,1); portFreez=zeros(testNum,1); testReturn=zeros(testNum,1);

testVolatility=zeros(testNum,1); for testNo=1:length(TIPPTestMatrix) for i=1:testNum

%TIPPResult=[GuarantRatio,GuarantRatioMark,GuarantRatioAdjust,

Riskmulti,adjustCycle,Return,

%Volatility,SumTradeFee,portFreez] TRiskmulti=TIPPTestMatrix(testNo,4); TGuarantRatio=TIPPTestMatrix(testNo,1);

TadjustCycle=TIPPTestMatrix(testNo,5);

TGuarantRatioMark=TIPPTestMatrix(testNo,2); TGuarantRatioAdjust=TIPPTestMatrix(testNo,3);

[F,E,A,G,GuarantRatio,SumTradeFee(i),portFreez(i)]=

TIPPStr(PortValue,TRiskmulti,TGuarantRatio,TGuarantRatioMark,.. TGuarantRatioAdjust,TradeDayTimeLong,TradeDayOfYear,TadjustCycle,RisklessReturn,TradeFee,SDataMatrix(i,:));

testReturn(i)=( A(TradeDayTimeLong+1)-A(1) )/A(1);

testVolatility(i)=std( price2ret( A ) )*sqrt(TradeDayOfYear); end

TIPPTestMatrix(testNo,6)=sum(testReturn)/testNum;

TIPPTestMatrix(testNo,7)=sum(testVolatility)/testNum; TIPPTestMatrix(testNo,8)=sum(SumTradeFee)/testNum; TIPPTestMatrix(testNo,9)=sum(portFreez)/testNum; end

TIPPTestMatrix

计算结果: GuarantRatio GuarantRatioMark GuarantRatioAdjust Riskmulti adjustCycle Return Volatility SumTradeFee portFreez 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 2 2 2 2 2 2 2 2 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 3 3 3 3 3 3 3 3 3.5 3.5 3.5 1 1 5 5 10 10 20 20 1 1 5 5 10 10 20 20 1 1 5 5 10 10 20 20 1 1 5 0.0698 0.0463 0.0711 0.0492 0.0720 0.0472 0.0733 0.0500 0.0727 0.0478 0.0741 0.0504 0.0736 0.0486 0.0749 0.0510 0.0716 0.0555 0.0730 0.0593 0.0755 0.0568 0.0770 0.0605 0.0768 0.0579 0.0783 0.0613 0.0782 0.0592 0.0799 0.0623 0.0725 0.0639 0.0738 0.0683 0.0785 0.0660 0.0798 0.0703 0.0804 0.0674 0.0821 0.0715 0.0826 0.0697 0.0842 0.0732 0.0724 0.0713 0.0737 0.0764 0.0806 0.0744 0.3309 0.3474 0.1576 0.1672 0.1110 0.1206 0.0723 0.0812 0.5714 0.6092 0.2587 0.2845 0.1747 0.1990 0.1091 0.1284 0.8526 0.9169 0.3747 0.4195 0.2490 0.2864 0.1604 0.1816 1.1609 1.2599 0.5028 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.002 0.002 0 0 0

0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 0.95 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 3.5 3.5 3.5 3.5 3.5 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 2 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 3 3 3 3 3 3 3 3 3.5 3.5 3.5 3.5 3.5 5 10 10 20 20 1 1 5 5 10 10 20 20 1 1 5 5 10 10 20 20 1 1 5 5 10 10 20 20 1 1 5 5 10 10 20 20 1 1 5 5 10 0.0823 0.0795 0.0834 0.0764 0.0854 0.0812 0.0865 0.0802 0.0881 0.0838 0.0715 0.0780 0.0730 0.0837 0.0824 0.0822 0.0844 0.0878 0.0861 0.0851 0.0883 0.0903 0.0906 0.0909 0.0918 0.0939 0.0601 0.0229 0.0613 0.0253 0.0611 0.0234 0.0623 0.0257 0.0614 0.0236 0.0627 0.0259 0.0619 0.0241 0.0633 0.0262 0.0608 0.0278 0.0623 0.0307 0.0627 0.0285 0.0642 0.0313 0.0633 0.0289 0.0648 0.0318 0.0642 0.0295 0.0657 0.0322 0.0613 0.0322 0.0627 0.0356 0.0642 0.0332 0.0658 0.0366 0.0653 0.0338 0.0667 0.0373 0.0663 0.0347 0.0679 0.0380 0.0614 0.0361 0.0629 0.0401 0.0654 0.0376 0.0673 0.0415 0.0668 0.0385 0.5689 0.3380 0.3842 0.2273 0.2488 1.4879 1.6240 0.6427 0.7254 0.4385 0.4947 0.3111 0.3263 0.1711 0.1827 0.0891 0.0927 0.0679 0.0700 0.0496 0.0507 0.2935 0.3189 0.1450 0.1567 0.1065 0.1149 0.0740 0.0807 0.4377 0.4810 0.2107 0.2325 0.1500 0.1678 0.1000 0.1140 0.5978 0.6626 0.2825 0.3169 0.1968 0 0.002 0.002 0.011 0.011 0 0 0.002 0.002 0.006 0.006 0.026 0.026 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.002 0.002 0 0 0 0 0.002

1 1 1 1 1 1 1 1 1 1 1 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.05 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 0.02 0.03 3.5 3.5 3.5 4 4 4 4 4 4 4 4 10 20 20 1 1 5 5 10 10 20 20 0.0684 0.0424 0.0683 0.0398 0.0702 0.0435 0.0611 0.0398 0.0623 0.0441 0.0663 0.0418 0.0683 0.0463 0.0682 0.0430 0.0701 0.0475 0.0698 0.0447 0.0723 0.0490 0.2251 0.1279 0.1501 0.7700 0.8590 0.3588 0.4082 0.2463 0.2865 0.1602 0.1885 0.002 0.011 0.011 0 0 0.002 0.002 0.006 0.006 0.027 0.026 表2 TIPP策略模拟结果

结果说明:

TIPP的结果与CPPI结果类似,在预期市场上涨概念较大的情况下,TIPP策略低保本率与高风险乘数获得收益最高,为9.18%,波动性也最大9.35%,发生风险资产平仓的概率同样最大,策略的调整间隔越短,交易费用越高。在预期市场上涨概念较大的情况下,TIPP策略使得收益与风险较CPPI策略降低。

因篇幅问题不能全部显示,请点此查看更多更全内容