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

标签:
股票matlab蒙特卡罗复制期权欧式期权 |
1.以股票为例,用股票合成一个欧式看涨期权多头,当前股价为49元,执行价为50元。
2.合成不同执行价格的期权,对比复制期权成本与期权理论价的区别,股票价格路径采取蒙特卡罗模拟生成,理论上,复制成本应该近似于期权理论价格。
3.通过蒙特卡罗模拟,画出期权的盈亏分布图
注意:该程序中主要函数calculateDelta未给出,有兴趣着可以向作者索取。
图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
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
end
% plot(copyOptionCost);
%
[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)]);