-
Notifications
You must be signed in to change notification settings - Fork 0
/
jump_diffusion_process.py
51 lines (47 loc) · 1.08 KB
/
jump_diffusion_process.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import matplotlib.pyplot as plt
import numpy as np
from src.stochastic_processes import StandardJumpDiffusion
PATHS = 25
PRICE = 100.00
START_TIME, END_TIME = 0, 5
TIMESTEP = 0.01
RISKFREE_RATE = 0.05
VOLATILITY = 0.16
JUMP_MEAN = 0.00
JUMP_VOLATILITY = 0.20
JUMP_RATE = 1.00
ys = PRICE * np.ones(PATHS)
xs = np.log(ys) * np.ones(PATHS)
xss, yss, ts = np.array([xs]), np.array([ys]), np.array(START_TIME)
dXt = StandardJumpDiffusion(
r = RISKFREE_RATE,
sigma = VOLATILITY,
muJ = JUMP_MEAN,
sigmaJ = JUMP_VOLATILITY,
xiP = JUMP_RATE,
xs = xs,
t = START_TIME,
dt = TIMESTEP
)
for xs, t in dXt:
xss = np.vstack([xss, xs])
yss = np.vstack([yss, np.exp(xs)])
ts = np.append(ts, t)
if t > END_TIME:
break
else:
continue
_, (ax1, ax2) = plt.subplots(2,1)
ax1.plot(ts, xss)
ax1.grid()
ax1.set_title(
"dX_t = (r - 1/2 sigma^2 - esilon_p E[e^J_t - 1]) dt + sigma dB_t + J_t dXp_t"
)
ax1.set_xlabel("t")
ax1.set_ylabel("X_t")
ax2.plot(ts, yss)
ax2.grid()
ax2.set_xlabel("t")
ax2.set_ylabel("S_t = exp(X_t)")
plt.tight_layout()
plt.show()