亚式期权是什么意思_亚式期权有哪些_亚式期权定价
亚式期权是什么意思
亚式期权又称为平均价格期权,是股票期权的衍生,是在总结真实期权、虚拟期权和优先认股权等期权实施的经验教训基础上推出的。它最早是由美国银行家信托公司(Bankers Trust)在日本东京推出的。
亚式期权是当今金融衍生品市场上交易最为活跃的奇异期权之一,与通常意义上股票期权的差别是对执行价格的限制,其执行价格为执行目前半年二级市场股票价格的平均价格。
与标准期权的区别在于:在到期日确定期权收益时,不是采用标的资产当时的市场价格,而是用期权合同期内某段时间标的资产价格的平均值,这段时间被称为平均期. 在对价格进行平均时,采用算术平均或几何平均。
亚式期权有哪些
亚式期权的收益依附于标准的资产有效期至少一段时间内的平均价格。按照计算机基础价格的不同,亚式期权可分为平均价期权和平均执行价格期权。
1、平均价格期权的收益为执行价格与标的资产在有效期内的平均价格之差。平均价格期权比标准期权廉价,因为标的资产价格在一段时间内的平均值的变动比时点价格的变动程度要小,这就减少了期权风险,从而降低了其时间价值,并且可能更适合客户的需求。
2、平均执行价格期权的收益为执行时的即期汇率与标的资产的平均价格之差。平均执行价格期权可以保证购买在一段时间内频繁交易的资产所支付的平均价格低于最终价格。另外它也能保证销售在一段时间内频繁交易的资产所收取的平均价格高于最终价格。
亚式期权定价
亚式期权是典型的路径依赖性期权,期权的支付有两种:固定亚式期权与浮动亚式期权,指的是到期时支付分别为:
(1) max(股价路径的某种平均-K,0) ,K为某一固定敲定价格
(2)max(股价路径的某种平均-ST,0) ,ST为到期日的股价
某种平均指可以是算术平均或几何平均,或者其它加权平均。
几何平均情况下可以得到亚式期权的确切解,算术平均情况下能得到一个偏微分方程,仍是需要数值方法解方程。
通过蒙特卡罗方法模拟股价路径来求解亚式期权是一种容易理解,容易运用的有效方法。
下面用IML来试图求一个固定敲定价格的亚式期权,先不用方差减小技术直接模拟,另一个是用准随机模拟技术其中的Halton序列,结果部分说明Halton序列并不高明,结果并非让人满意,而且Halton计算量偏大。当基数素数的选择过大时,Halton序列存在比较大的问题,基本这种情况下上可以淘汰。
所谓Halton序列是指:选择一个素数B当做基底,然后把每个自然数N表示成B进制:
然后将该表达式反转,
得到该自然数对应的halton数。
1到17在基数3对应的halton数如下,比如7的三进制下为21,则halton数为0.12,转化为十进制为
1* 1/3 +2 * 1/(3*3)=0.5555556
0.3333333 0.6666667 0.1111111 0.4444444 0.7777778 0.2222222 0.5555556 0.8888889 0.037037
0.3703704 0.7037037 0.1481481 0.4814815 0.8148148 0.2592593 0.5925926 0.9259259
选择不同的基数(它要求是一个素数),可以得到不同的halton数列。统计学家证明了运用QUASI随机数列可以加快收敛速度,突破了原先的[转载]亚式期权定价-——蒙特卡罗方法介绍(二),将收敛速度加快到:[转载]亚式期权定价-——蒙特卡罗方法介绍(二)
产生Halton序列的程序见下面。
%macro ASIANMC(S0,K,r,T,sigma,Snsteps,Nrepeat);
proc iml;
*--------------以下没有借助方法减小技术模拟产生股价运动路径------------*;
start MCSpaths(S0,mu,sigma,T,Snsteps,Nrepeat);
dt=T/Snsteps;
v=(mu-0.5#sigma##2)#dt;
sigmadt=sigma#sqrt(dt);
temnomal=j(Nrepeat,Snsteps,12345);
Increment=sigmadt#normal(temnomal)+v;
logPaths=j(Nrepeat,Snsteps+1,0);
do i=1 to Nrepeat;
logPaths[i,]=cusum(log(S0)||increment[i,]);
end;
Spaths=exp(logPaths);
return(Spaths);
finish;
*-------------风险中性测度下的贴现到期payoff----------;
start AsianMCcrude(S0,K,r,T,sigma,Snsteps,Nrepeat);
payoff=j(Nrepeat,1,0);
Spaths=MCSpaths(S0,r,T,sigma,Snsteps,Nrepeat);
payoff= (Spaths[,2:Snsteps+1][,+]/Snsteps-K)#(Spaths[,2:Snsteps+1][,+]/Snsteps>K);
manyPrice=exp(-r#T)#payoff;
create pricetable1 var{manyprice};
append;
close pricetable;
finish;
*--------------------------------------*;
run AsianMCcrude(&S0,&K,&r,&T,&sigma,&Snsteps,&Nrepeat);
quit;
%mend;
%macro drawcheck(MCpricedata);
ods select BasicIntervals;
proc univariate data=&MCpricedata cibasic;
run;
%mend;
提交上述语句后,就可以:
%ASIANMC(50,50,0.1,5/12,0.4,5,5000);
%drawcheck(pricetable1);
输出结果为:
参数 估计值 95% 置信限
均值 3.88436 3.72274 4.04599
标准偏差 5.82967 5.71761 5.94623
方差 33.98501 32.69107 35.35770
%ASIANMC(50,50,0.1,5/12,0.4,5,10000);
%drawcheck(pricetable1);
输出结果为:
参数 估计值 95% 置信限
均值 3.94501 3.83010 4.05991
标准偏差 5.86191 5.78178 5.94430
方差 34.36197 33.42902 35.33472
%ASIANMC(50,50,0.1,5/12,0.4,10,10000);
%drawcheck(pricetable1);
输出结果为:
参数 估计值 95% 置信限
均值 3.82253 3.71227 3.93279
标准偏差 5.62482 5.54793 5.70388
方差 31.63857 30.77956 32.53422
%ASIANMC(50,50,0.1,5/12,0.4,100,50000);
%drawcheck(pricetable1);
输出结果为:(运行时间好长)
均值 3.46064 3.41486 3.50641
标准偏差 5.22228 5.19012 5.25485
方差 27.27224 26.93730 27.61349
以最后一次的结果来看,均值的置信限区间很小,3.46的价格应该算是接近真值,但如此大的计算量让人望而生畏。标准差与方差这个没什么可靠(标准差比均值还大,这个肯定是不太可靠的),可以不看这个统计量。我们寻求的是较少的计算量情况下较满意的答案。
下面是借助Halton序列的程序。
%macro ASIANMChalton(S0,K,r,T,sigma,Snsteps,Nrepeat);
proc iml;
*----------借助Halton序列产生股价运动路径---------*;
start MCSpaths(S0,mu,sigma,T,Snsteps,Nrepeat);
dt=T/Snsteps;
v=(mu-0.5#sigma##2)#dt;
sigmadt=sigma#sqrt(dt);
base=prime(Snsteps);
temrandom=j(Nrepeat,Snsteps,0);
do i=1 to Snsteps;
temrandom[,i]=T(halton(Nrepeat,base));
end;
Increment=v+sigmadt#probit(temrandom);
logPaths=j(Nrepeat,Snsteps+1,0);
do i=1 to Nrepeat;
logPaths[i,]=cusum(log(S0)||increment[i,]);
end;
Spaths=exp(logPaths);
return(Spaths);
finish;
*---------定义产生前N个素数的函数,SAS里居然连产生素数的函数都没---------*;
start prime(n);
A=2;
x=3;
k=1;
do until(k>=n);
do i=3 to x by 2 until(mod(x,i)=0);
if i=x then
do;
A=A||x;
k=k+1;
end;
end;
x=x+1;
end;
return(A);
finish;
*------------产生关于素数base,序列1到自然数N对应的halton序列-------------*;
start halton(N,base);
n0=1:N;
h=j(1,n,0);
n1=j(1,n,0);
do i=1 to n;
f=1/base;
do while(n0>0);
n1=floor(n0/base);
r=n0-n1#base;
h=h+f#r;
f=f/base;
n0=n1;
end;
end;
return(h);
finish;
*-------------风险中性测度下贴现到期payoff------------------;
start AsianMChalton(S0,K,r,T,sigma,Snsteps,Nrepeat);
payoff=j(Nrepeat,1,0);
Spaths=MCSpaths(S0,r,T,sigma,Snsteps,Nrepeat);
payoff= (Spaths[,2:Snsteps+1][,+]/Snsteps-K)#(Spaths[,2:Snsteps+1][,+]/Snsteps>K);
manyPrice=exp(-r#T)#payoff;
create pricetable2 var{manyprice};
append;
close pricetable;
finish;
run AsianMChalton(&S0,&K,&r,&T,&sigma,&Snsteps,&Nrepeat);
quit;
%mend;
提交上述语句后就可以:
%ASIANMChalton(50,50,0.1,5/12,0.4,5,5000);
%drawcheck(pricetable2);
输出结果为: 参数 估计值 95% 置信限
均值 3.96886 3.80409 4.13364
标准偏差 5.94325 5.82901 6.06209
方差 35.32223 33.97738 36.74893
%ASIANMChalton(50,50,0.1,5/12,0.4,5,10000);
%drawcheck(pricetable2);
输出结果为: 参数 估计值 95% 置信限
均值 3.98389 3.86663 4.10116
标准偏差 5.98217 5.90040 6.06625
方差 35.78631 34.81469 36.79938
%ASIANMChalton(50,50,0.1,5/12,0.4,10,10000);
%drawcheck(pricetable2);
输出结果为:
均值 3.70095 3.59274 3.80915
标准偏差 5.52017 5.44472 5.59776
方差 30.47227 29.64493 31.33491
%ASIANMChalton(50,50,0.1,5/12,0.4,50,10000);
%drawcheck(pricetable2);
输出结果为:
均值 3.18426 3.09011 3.27842
标准偏差 4.80317 4.73752 4.87069
方差 23.07048 22.44410 23.72358
%ASIANMChalton(50,50,0.1,5/12,0.4,100,10000);
%drawcheck(pricetable2);
输出结果为:(计算时间更长) 均值 2.64993 2.56858 2.73127
标准偏差 4.14981 4.09309 4.20814
方差 17.22092 16.75336 17.70843
从结果来看上述最后两次结果比较差,原因可能来自于素数的选择过大,(50个和100个),最后一次的结果差到难以接受。
同样是10个时间步长,与10000次模拟,借助halton序列只给出了好了一点点的结果,这个好处看起来并不太显著。