|
问题:固定比例组合保险策略模拟(问题在代码括号内)
CPPIStr函数源代码:
- function [F,E,A,G,SumTradeFee,portFreez]=CPPIStr(PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,...
- TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,SData)
- %input
- %PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,TradeDayOfYear,adjustCycle,Risklessreturn,TradeFee...
- %SData is simulation index data
- %output
- %F,E,A,G,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 ??( 长度为什么要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;
- %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); ?这个temp放这里干嘛用? E(i)=max(0,Riskmulti*(A(i)-F(i)));
- SumTradeFee=SumTradeFee+TradeFee*abs(E(i)-temp); ? ?abs里不是为0了吗??
- 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
复制代码 函数测试代码:(??最后产品的收益率在哪里看到的??)
- %set value
- PortValue=100;%产品组合初始价值
- Riskmulti=2;%产品风险乘数为2
- GuarantRatio=1;%产品保本率为100%
- TradeDayTimeLong=250;%产品期限为250个交易日
- TradeDayOfYear=250;%模拟假设一年交易日为250个
- adjustCycle=10;%调整周期为每10个交易日调整一次
- RisklessReturn=0.05;%无风险产品收益率为5%
- TradeFee=0.005;%风险资产的交易费用为0.5%
- %to generate Brow 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]
- %调用CPPIStr函数
- [F,E,A,G,SumTradeFee,portFreez]=CPPIStr(PortValue,Riskmulti,GuarantRatio,TradeDayTimeLong,...
- TradeDayOfYear,adjustCycle,RisklessReturn,TradeFee,SData);
- %to plot
- figure;
- %子图1,模拟的风险资产的价格序列
- subplot(2,1,1)
- plot(SData)
- legend('Hs300-Simulation')
- xlabel('t');
- ylabel('price');
- %set(gca,'XTick',10:10:100) 设定刻度
- %set(gca,'YTick',10:10:100)
- %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')
- axis([0 300 0 150])
- %总的交易费用
- SumTradeFee
复制代码
|