@shuangtoa
2015-02-17T05:56:45.000000Z
字数 2968
阅读 482
| 变量名称 | 变量意义 |
|---|---|
| HSclose | HS300指数的每分钟收盘价 |
| HSopen | HS300指数的每分钟开盘价 |
| option_close | 股指期货的每分钟收盘价 |
| option_open | 股指期货的每分钟开盘价 |
| Clsprc_d | 股指期货每日收盘价 |
| Indexpic_d | HS300指数每日收盘价 |
数据来源与组成:
分钟数据是2010年4月17日9:30~2011年1月1日14:59,取指数和期货共同交易的时间;
日数据是从2010年4月16日~2014年6月18日;
分钟数据来源:淘宝 日数据来源:resset数据库
**这里需要强调的是,其实使用2010年的数据来进行回测是非常不准确的,2010年事股指期货刚刚推出的一年,价格波动非常大,基差率波动是2014年的4倍以上,故导致本文的验证结果看上去并不显著。但是由于淘宝上2010年以后的一年分钟数据太昂贵,已经买了最便宜的2010年数据之后我们才发现数据并不十分合适,就没有再买2014年一年的数据了。
load('rawdata.mat');T=120; %设立三种投资期限,60个交易日,120个交易日,252个交易日w=0.05;L=length(option_close);I=HS300close; %使用指数收盘价作为IF=option_close; %使用期货收盘价作为Fswap=24; %每24分钟换仓一次day=L/240;sigma=0.2;position=zeros(1,floor(240/swap));hold=zeros(1,day);cash=zeros(1,day);earn60=zeros(1,day);HSplot=zeros(1,day);cost_per=option_open(1);hold(1)=cost_per*position(1);cash(1)=-hold(1);for j=1:day-T+1K=F(240*(j-1)+1)*(1-w*T/365); %每一天的开盘价计算60天期限的期权行权价for d=1:Tflag=swap-1;for m=1:240flag=flag+1;i=(j-1)*240+(d-1)*240+m;n=(d-1)*240+m;if flag==swap %到换仓时间position(n)=normcdf((log(I(i)/K)+0.5*sigma^2*(T-d))/(sigma*sqrt(T-d)));%计算应当持仓的数量flag=0;elseposition(n)=position(n-1);endendendfor k=2:n %计算一天,一定期限下一只期权的收益,用于画图检验看涨期权复制i=(j-1)*240+k;if position(k)<position(k-1)deta=position(k-1)-position(k);hold(j)=hold(j)-1*deta*cost_per;%换仓若是卖,持仓金额的变化cash(j)=cash(j)+deta*(F(i)-cost_per);%现金金额的变化cost_per=hold(j)/position(k);%持仓单位成本的变化endif position(k)>position(k-1)deta=position(k)-position(k-1);hold(j)=hold(j)+deta*F(i);cash(j)=cash(j)-deta*F(i);cost_per=hold(j)/position(k);endendearn60(j)=(F(i)*position(k)+cash(j));HSplot(j)=(HS300close((j-1+T)*240)-HS300open((j-1)*240+1))/HS300open((j-1)*240+1);%指数每日收益endttest_res=ttest(hold-HSplot);for j=2:day-T+1earnplot(j)=earn60(j)/earn60(j-1);endplot(HSplot(2:day-T+1),winsorize(earnplot(2:day-T+1)),'or');xlabel('指数收益');ylabel('产品净值');title('delta复制期权效果');
复制结果:

以上假设的是基差为w=5%(只是现期近似为5%,2010年的波动是较大的),实际上,期货和指数的基差只是可以近似为常数的:
而使用2010~2014年的期货和指数的数据进行验证计算60天基差率w
load('rawdata.mat');L=length(TRDDT);w=zeros(L,1);%展期Clsprc_d_fill=fillNAN(Clsprc_d);Indexpic_d_fill=fillNAN(Indexpic_d);for i=61:Lif isnan(Indexpic_d(i))continue;endcal=0;for t=i-59:iif ~isnan(Indexpic_d(t))cal=cal+1;endendRind=(Indexpic_d_fill(i)-Indexpic_d_fill(i-59))/Indexpic_d_fill(i-59);Rfut=(Clsprc_d_fill(i)-Clsprc_d_fill(i-59))/Clsprc_d_fill(i-59);w(i)=(Rind-Rfut)*365.25/cal;endhold onplot(TRDDT,Clsprc_d_fill);plot(TRDDT,Indexpic_d_fill);legend('期货价格','指数');
得到基差率w:

所以,接下来我们采用动态的基差率代入策略,即使用前一天的60天年化基差率代入策略计算,(Naive策略)
for j=1:day-59if j==1K=F(240*(j-1)+1)*(1-w(j)*T/365);elseK=F(240*(j-1)+1)*(1-w(j-1)*T/365);%每一天的开盘价计算60天期限的期权行权价,用前一天的60天基差率作为当日的基差率endfor d=1:Tflag=swap-1;for m=1:240flag=flag+1;i=(j-1)*240+(d-1)*240+m;n=(d-1)*240+m;if flag==swapposition(n)=normcdf((log(I(i))/log(K)+0.5*sigma^2*(T-d))/(sigma*sqrt(T-d)));flag=0;elseposition(n)=position(n-1);endendend
