Simulating Barrier Options with Jump Diffusion
Summary
The document discusses pricing a barrier option when the underlying follows a jump-diffusion process. Its central point is that a fixed time grid can miss when a jump occurs within a step, making it unsuitable for accurately tracking whether the barrier was crossed during that interval. The suggested approach is to simulate jump times explicitly, then simulate the stock’s evolution between jumps using Brownian increments and record its values immediately before and after each jump.
This event-based simulation can handle intervals with no jumps as well as multiple jumps, and explicit jump times are also needed when the option pays a rebate upon hitting the barrier. Jump times can be generated from exponential waiting times or by sampling and ordering uniform times. The document gives guidance rather than a complete pricing derivation or validated implementation; it does not specify how to combine jump and diffusion barrier-crossing probabilities in code.
Key ideas
- A fixed time grid can misrepresent barrier crossings when jumps occur between grid points.
- Simulate jump times explicitly to locate the intervals where the process changes discontinuously.
- Use Brownian increments over the actual time spans between jumps to simulate the diffusion component.
- Record the process immediately before and after each jump to assess barrier status.
- Explicit jump times are needed to determine when a barrier rebate is triggered.
Tags
Full text
# Barrier Option under Jump Diffusion
# Barrier Option under Jump Diffusion
I am trying to price a Barrier Option under a model with jumps. I am using a brownian bridge approach but struggle with the jumps around these bridges and don't know how to handle this.
My main problem is that I guess I would need to define $S(t)_{before}$ and $S(t)_{after}$ in addition to my normal grid points. However, how would that influence my "barrier has not been hit probability" since there is basically no $dt$ in between "before" and "after" jump and the change is not driven by the brownian motion but the jump.
Can anyone point me in the right direction? :)
Best regards, Alex
My Naive Code:
```
if S0 <= B
P0 = 0;
time = toc;
epsilon = 0;
elseif S0 > B
dt = T/NumberOfSteps;
KBar = exp(Mu+0.5*Delta^2)-1;
S = zeros(NumberOfSimulations, NumberOfSteps);
S(:,1) = S0;
prob = ones(NumberOfSimulations,1);
Z = randn(NumberOfSimulations,NumberOfSteps);
if Lambda ~= 0
Nt = poissrnd(Lambda*dt,[NumberOfSimulations,NumberOfSteps]);
end
for i = 1:NumberOfSimulations
for t=1:NumberOfSteps
LnJ = 0;
if Lambda ~= 0
if Nt(i,t) > 0
LnJ = sum(normrnd(Mu,Delta,[Nt(i,t),1]));
end
end
S(i,t+1) = S(i,t).exp((r - q - LambdaKBar-0.5*Sigma^2)dt + Sigmasqrt(dt).Z(i,t));
prob(i) = prob(i).(1 - exp(-2*max(S(i,t+1)-B,0).*max(S(i,t)-B,0)./(Sigma^2*dt*S(i,t).^2)));
%Jump
if S(i,t+1)*exp(LnJ) <= B
prob(i) = prob(i)*0;
elseif S(i,t+1)*exp(LnJ) > B
prob(i) = prob(i)*1;
end
S(i,t+1) = S(i,t+1)*exp(LnJ);
end
end
ST = S(:,end);
if strcmp(OptionType,'Call')
Payoff = prob.exp(-rT).*max(ST - K,0);
elseif strcmp(OptionType,'Put')
Payoff = prob.exp(-rT).*max(K - ST,0);
end
```
## Answer by Futurist (score 1)
https://quant.stackexchange.com/a/49549
Using a pre-defined fixed time grid is not exactly accurate since you don't know when in an interval the jump occurred.
The correct way is to first simulate the time points of the jumps and then the values of the process $S(t)_{before}$ and $S(t)_{after}$ by a Brownian increment. The latter then depends on the time between the jumps. This way you can have also only one interval (if no jump occurred) with one Brownian increment or many in your time horizon.
In case the barrier option features a rebate you also need the exact jump times explicitely.
You can simulate the jump times via exponential r.v.'s or alternatively via drawing from a uniform and re-order (see the book by Sato (1999), prop. 3.4); this might be faster if the intensity is large.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.