加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

用标的复制欧式看涨期权的MATALB程序

(2014-08-25 15:31:24)
标签:

股票

matlab

蒙特卡罗

复制期权

欧式期权

    由于我国还没有期权上市,因此,在用期权对冲风险时就显得较为困难,好在有期货市场,可以用期货合成期权,比如拥有股票多头的投资者,可以选择用股指期货来对冲系统性风险,也可以用股指期货来合成期权对冲市场风险,本程序只给出了用现货复制欧式看涨期权的例子,用期货合成期权理论上是一样的,只不过较为复制写。
    期权复制的思路这里简单提一下,由于可以用期权、期权的标的和无风险资产构造一个delta无风险组合,这就相当于用期权标的可无风险资产复制出来一个期权产品,其实就是一个公式:期权+标的+无风险只产=0,那么可以变换上面的等式:期权 = -标的-无风险资产;标的 = -期权 -无风险资产,无风险资产 = -期权-标的,表示的含义分别是可以用无风险资产和标的构造期权、用无风险资产可期权来构造标的、用期权可标的构造无风险资产。
本程序实现了以下功能:
1.以股票为例,用股票合成一个欧式看涨期权多头,当前股价为49元,执行价为50元。
2.合成不同执行价格的期权,对比复制期权成本与期权理论价的区别,股票价格路径采取蒙特卡罗模拟生成,理论上,复制成本应该近似于期权理论价格。
3.通过蒙特卡罗模拟,画出期权的盈亏分布图
注意:该程序中主要函数calculateDelta未给出,有兴趣着可以向作者索取。
    运行结果如图所示:
图1  蒙特卡罗模拟股票价格走势路径图

图2  复制成本和理论价格


http://s3/mw690/001Z4dUBgy6LwkLRrxMe2&690
图3  复制的期权盈亏图

图4 复制成本与BS理论价格
(注意:由于运算较为耗时,因此图4给出了复制锌看涨欧式期权的复制成本和BS理论价格的对比图)

部分matlab程序:

%蒙特卡罗模拟
%sigma:锌的年波动率为 0.2731
%T:总时间为1单位
�ltaT:将时间划分为deltaT个区间
%r:无风险利率
%模拟100行,90个样本,加上初始的price,共91个样本
clear;clc;close;
%锌的数据
% r = 0.05;T = 1;deltaT = 1/90;sigma = 0.2731;  �ltaT这里指把整个时间区间划分为按deltaT间隔的区间
%  price = 16800; %当前价格
%  strick = 16520;%执行价格
% frequent = 252;
%书中例子的数据
r = 0.05;T = 1;deltaT = 1/52;sigma = 0.2;  �ltaT这里指把整个时间区间划分为按deltaT间隔的区间,指该频率的所有数据长度
price = 49; %当前价格
strick = 50;%执行价格
num1 = 40000; %模拟路径数
frequent = 52;

rx = randn(num1,1/deltaT);
S = [price*ones(num1,1) zeros(num1,1/deltaT)];
for i=1:1/deltaT 
    S(:,i+1) = S(:,i).*(1+r*deltaT+sigma*deltaT^0.5*rx(:,i));
end
S = S(:,1:21);  %针对书上的例子,其他数据可删
r = 0.05;T = 1;deltaT = 1/20;sigma = 0.2;  %设置期权计算的相关计算,与前面相比,仅deltaT变成了期权的剩余年限
%用蒙特卡罗计算期权价格
p1 = max(mean(S(:,1:end),2)-strick,0);
optionPrice = exp(-r*1/deltaT/frequent)*mean(p1);
%蒙特卡罗计算期权价格完
subplot(121)
plot(0:deltaT:1,S);
legend(['蒙特卡罗模拟锌期货价格',num2str(num1),'条样本路径'])
%% 以下通过复制期权来计算复制成本
copyOptionCost=0;
Charge = 0;
leiJiChengBen = zeros(1+1/deltaT,num1);
for i=1:num1
    [delta,leiJiChengBen(:,i),gouMaiGuPiaoShu(:,i),copyOptionCost(i),Charge(i)] = calculateDelta(S(i,:)',strick,r,sigma,1/deltaT/frequent,0,frequent);
end
 subplot(122)
%  plot(copyOptionCost);
 [Call1,put1] = blsprice(price,strick,r,1/deltaT/frequent,sigma);
%  [Call1,put1]=blsprice(49,50,0.05,0.3846,0.2);
% cost = leiJiChengBen(end,:);
% cost(find(cost>strick)) = cost(find(cost>strick))-strick;
%cost要折现,因为这个复制成本是期末的总成本,而假设有期权的话,期权费的支出是在期初,因此,要折现。模拟成本要折现,折现后的数据近似于期权的理论价格
% cost = exp(-1/deltaT/252*r)*cost;%折现,连续复利计算
copyOptionCost = copyOptionCost/(1+1/deltaT/frequent*r);%折现,简单复利计算
plot(copyOptionCost);
legend(['平均复制成本:', num2str(mean(copyOptionCost)),'.理论价格为:',num2str(Call1)]);









0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有