Quantitative finance collector
C++ Matlab VBA/Excel Java Mathematica R/Splus Net Code Site Other
Nov 27

Pricing Parisian Options

Posted by abiao at 17:11 | Code » Matlab | Comments(0) | Reads(8546)
A parisian option pricer was shared at the post before at http://www.mathfinance.cn/parisian-option-pricer/, where the authors Haber, Schoenbucher, and Wilmott values Parisian and Parasian options via explicit finite difference method. (Parisian option is a barrier option but becomes activated only after stock prices have spent a certain continuous, pre-decided time, called a window, above or below the barrier.)

Unfortunately, the authors don't release their codes for us to study, I tried to program according to that paper with theta scheme finite difference, where theta =0, 0.5, 1 refer to explicit, Crank-Nicolson, and implicit finite difference, respectively. Below is a runnable naive Matlab code, please correct me if you find errors, cheers & have a nice weekend.
% set parameter
N = 201; M = 200; s = 10; T = 1;
Tau = 0.1; %barrier window 20 days
sigma = 0.2; r = 0.05; K = 10;
Bar = 12; %barrier
bar = log(Bar);
% time-space grid
R = 3;
h = 2*R/(N+1);
k = T/M;
NoTau = floor(Tau/k);
x = linspace(-R,R,N+2)';

% compute finite difference matrix A
e = ones(N,1);
alphap = -sigma^2/2/h^2 +(sigma^2/2-r)/2/h;
alpham = -sigma^2/2/h^2 -(sigma^2/2-r)/2/h;
beta = sigma^2/h^2+r;
A = spdiags([alpham*e, beta*e, alphap*e], -1:1, N, N);
% compute matrices for the theta scheme
theta = 0.5;
B = speye(N,N) + theta*k*A;
C = speye(N,N) - (1-theta)*k*A;
% compute initial data
u = max(exp(x)-K,0);
u = repmat(u,1,NoTau+1);
inx = find(x>bar,1,'first');
u(:,1) = 0; %up and out when j=tau
f = zeros(N,1);
% start timestepping
for m = 1:M
    lastu = u;
    % compute right hand side
    for j = 2:NoTau+1
        f = C*[lastu(2:inx-2,NoTau+1);lastu(inx-1:end-1,j-1)]; %below using tau=0, above using tau=tau+1;
        u(:,j) = zeros(N+2,1);
        % solve the linear system
        u(2:N+1,j) = B\f;
    end
    u(inx-1,2:NoTau) = u(inx-1,NoTau+1);%reset value at barrier point for parisian
    lastu = u;
end

Plots of the Parisian option and its delta W.R.T stock prices and barrier Tau.
Open in new window
Open in new window


Add a comment
Emots
Enable HTML
Enable UBB
Enable Emots
Hidden
Remember
Nickname   Password   Optional
Site URI   Email   [Register]