【求助】matlab-欧式期权定价之显式\隐式有限差分法
发布:WenshanQi07 | 分类:Matlab软件培训
关于本站
人大经济论坛-经管之家:分享大学、考研、论文、会计、留学、数据、经济学、金融学、管理学、统计学、博弈论、统计年鉴、行业分析包括等相关资源。
经管之家是国内活跃的在线教育咨询平台!
经管之家新媒体交易平台
提供"微信号、微博、抖音、快手、头条、小红书、百家号、企鹅号、UC号、一点资讯"等虚拟账号交易,真正实现买卖双方的共赢。【请点击这里访问】
TOP热门关键词
论文研究的是用显式和隐式有限差分法研究欧式期权定价需要用到matlab可是本人matlab无能于是在网上找到了已经编写好的代码但问题是我把代码复制到matlab的m.file里然后点击运行可是出来的结果总是显示有error啊怎样改 ...
免费学术公开课,扫码加入 |
显式代码如下
function oPrice = finDiffExplicit(X,S0,r,sig,Svec,tvec,oType)
% Function to calculate the price of a vanilla European
% Put or Call option using the explicit finite difference method
%
% oPrice = finDiffExplicit(X,r,sig,Svec,tvec,oType)
%
% Inputs: X - strike
% : S0 - stock price
% : r - risk free interest rate
% : sig - volatility
% : Svec - Vector of stock prices (i.e. grid points)
% : tvec - Vector of times (i.e. grid points)
% : oType - must be 'PUT' or 'CALL'.
%
% Output: oPrice - the option price
%
% Notes: This code focuses on details of the implementation of the
% explicit finite difference scheme.
% It does not contain any programatic essentials such as error
% checking.
% It does not allow for optional/default input arguments.
% It is not optimized for memory efficiency, speed or
% use of sparse matrces.
% Author: Phil Goddard (phil@goddardconsulting.ca)
% Date: Q4, 2007
% Get the number of grid points
M = length(Svec)-1;
N = length(tvec)-1;
% Get the grid sizes (assuming equi-spaced points)
dt = tvec(2)-tvec(1);
% Calculate the coefficients
% To do this we need a vector of j points
j = 1:M-1;
sig2 = sig*sig;
j2 = j.*j;
aj = 0.5*dt*(sig2*j2-r*j);
bj = 1-dt*(sig2*j2+r);
cj = 0.5*dt*(sig2*j2+r*j);
% Pre-allocate the output
price(1:M+1,1:N+1) = nan;
% Specify the boundary conditions
switch oType
case 'CALL'
% Specify the expiry time boundary condition
price(:,end) = max(Svec-X,0);
% Put in the minimum and maximum price boundary conditions
% assuming that the largest value in the Svec is
% chosen so that the following is true for all time
price(1,:) = 0;
price(end,:) = (Svec(end)-X)*exp(-r*tvec(end:-1:1));
case 'PUT'
% Specify the expiry time boundary condition
price(:,end) = max(X-Svec,0);
% Put in the minimum and maximum price boundary conditions
% assuming that the largest value in the Svec is
% chosen so that the following is true for all time
price(1,:) = (X-Svec(end))*exp(-r*tvec(end:-1:1));
price(end,:) = 0;
end
% Form the tridiagonal matrix
A = diag(bj);% Diagonal terms
A(2:M:end) = aj(2:end); % terms below the diagonal
A(M:M:end) = cj(1:end-1); % terms above the diagonal
% Calculate the price at all interior nodes
offsetConstants = [aj(1); cj(end)];
for i = N:-1:1
price(2:end-1,i) = A*price(2:end-1,i+1);
% Offset the first and last terms
price([2 end-1],i) = price([2 end-1],i) + ...
offsetConstants.*price([1 end],i+1);
end
% Calculate the option price
oPrice = interp1(Svec,price(:,1),S0);
运行结果如下:
??? Input argument "Svec" is undefined.
Error in ==> finDiffExplicit at 29
M = length(Svec)-1;
隐式代码如下:
function oPrice = finDiffImplicit(X,S0,r,sig,Svec,tvec,oType)
% Function to calculate the price of a vanilla European
% Put or Call option using the implicit finite difference method
%
% oPrice = finDiffImplicit(X,r,sig,Svec,tvec,oType)
%
% Inputs: X - strike
% : S0 - stock price
% : r - risk free interest rate
% : sig - volatility
% : Svec - Vector of stock prices (i.e. grid points)
% : tvec - Vector of times (i.e. grid points)
% : oType - must be 'PUT' or 'CALL'.
%
% Output: oPrice - the option price
%
% Notes: This code focuses on details of the implementation of the
% implicit finite difference scheme.
% It does not contain any programatic essentials such as error
% checking.
% It does not allow for optional/default input arguments.
% It is not optimized for memory efficiency, speed or
% use of sparse matrces.
% Author: Phil Goddard (phil@goddardconsulting.ca)
% Date: Q4, 2007
% Get the number of grid points
M = length(Svec)-1;
N = length(tvec)-1;
% Get the grid sizes (assuming equi-spaced points)
dt = tvec(2)-tvec(1);
% Calculate the coefficients
% To do this we need a vector of j points
j = 0:M;
sig2 = sig*sig;
aj = (dt*j/2).*(r - sig2*j);
bj = 1 + dt*(sig2*(j.^2) + r);
cj = -(dt*j/2).*(r + sig2*j);
% Pre-allocate the output
price(1:M+1,1:N+1) = nan;
% Specify the boundary conditions
switch oType
case 'CALL'
% Specify the expiry time boundary condition
price(:,end) = max(Svec-X,0);
% Put in the minimum and maximum price boundary conditions
% assuming that the largest value in the Svec is
% chosen so that the following is true for all time
price(1,:) = 0;
price(end,:) = (Svec(end)-X)*exp(-r*tvec(end:-1:1));
case 'PUT'
% Specify the expiry time boundary condition
price(:,end) = max(X-Svec,0);
% Put in the minimum and maximum price boundary conditions
% assuming that the largest value in the Svec is
% chosen so that the following is true for all time
price(1,:) = (X-Svec(end))*exp(-r*tvec(end:-1:1));
price(end,:) = 0;
end
% Form the tridiagonal matrix
B = diag(aj(3:M),-1) + diag(bj(2:M)) + diag(cj(2:M-1),1);
[L,U] = lu(B);
% Solve at each node
offset = zeros(size(B,2),1);
for idx = N:-1:1
offset(1) = aj(2)*price(1,idx);
% offset(end) = c(end)*price(end,idx); % This will always be zero
price(2:M,idx) = U\(L\(price(2:M,idx+1) - offset));
end
% Calculate the option price
oPrice = interp1(Svec,price(:,1),S0);
隐式运行结果如下:
??? Input argument "Svec" is undefined.
Error in ==> finDiffImplicit at 29
M = length(Svec)-1;
我也试着在command window里直接调用 可是同样有问题啊 如下所示
>> finDiffExplicit(29.0,30.0,0.05,0.25,0:0.05:150,0:0.01:0.33,'call')
Warning: NaN found in Y, interpolation at undefined values
will result in undefined values.
> In interp1 at 179
In finDiffExplicit at 81
ans =
NaN
>> finDiffImplicit(29.0,30.0,0.05,0.25,0:0.05:150,0:0.01:0.33,'call')
Warning: NaN found in Y, interpolation at undefined values
will result in undefined values.
> In interp1 at 179
In finDiffImplicit at 78
ans =
NaN
另外 是不是如果代码成功的话 matlab不但能给出一个价格 还能作出图像呢
哪位好心的牛人可以帮帮我呀?如果能成功帮我搞定论文里有关matlab的部分 我愿意支付酬劳以作答谢
万分感谢!!!
「经管之家」APP:经管人学习、答疑、交友,就上经管之家!
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
免流量费下载资料----在经管之家app可以下载论坛上的所有资源,并且不额外收取下载高峰期的论坛币。
涵盖所有经管领域的优秀内容----覆盖经济、管理、金融投资、计量统计、数据分析、国贸、财会等专业的学习宝库,各类资料应有尽有。
来自五湖四海的经管达人----已经有上千万的经管人来到这里,你可以找到任何学科方向、有共同话题的朋友。
经管之家(原人大经济论坛),跨越高校的围墙,带你走进经管知识的新世界。
扫描下方二维码下载并注册APP
您可能感兴趣的文章
- Matlab软件 ... | matlab空间面板LM error和lag检验 ...
- Matlab软件 ... | Matlab 2011a绿色版+完整版合集( ...
- Matlab软件 ... | matlab求解方程组
- Matlab软件 ... | 求助有关MATLAB应用
- Matlab软件 ... | Scientific Computing with MATL ...
- Matlab软件 ... | matlab程序求助(面板数据问题)
- Matlab软件 ... | Matlab polyfit 曲线拟合
- Matlab软件 ... | MATLAB toolbox(2) -数据输入输出 ...
人气文章
本文标题:【求助】matlab-欧式期权定价之显式\隐式有限差分法
本文链接网址:https://bbs.pinggu.org/jg/ruanjianpeixun_matlabruanjianpeixun_1526834_1.html
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。