Here are the detail information provided in PPTs:The option is an exotic partial barrier option written on an FX rate. The current value of underlying FX rate S0 = 1.5 (i.e. 1.5 units of domestic buys 1 unit of foreign). It matures in one year, i.e. T = 1. The option knocks out, if the FX rate:1 is greater than an upper level U in the period between between 1 month’s time and 6 month’s time; or,2 is less than a lower level L in the period between 8th month and 11th month; or,3 lies outside the interval [1.3, 1.8] in the final month up to the end of year.If it has not been knocked out at the end of year, the owner has the option to buy 1 unit of foreign for X units of domestic, say X = 1.4, then, the payoff is max{0, ST − X }.We assume that, FX rate follows a geometric Brownian motion dSt = μSt dt + σSt dWt , (20) where under risk-neutrality μ = r − rf = 0.03 and σ = 0.12.To simulate path, we divide the time period [0, T ] into N small intervals of length ∆t = T /N, and discretize the SDE above by Euler approximation St +∆t − St = μSt ∆t + σSt √∆tZt , Zt ∼ N (0, 1). (21) The algorithm for pricing this barrier option by Monte Carlo simulation is as described as follows:1 Initialize S0;2 Take Si∆t as known, calculate S(i+1)∆t using equation the discretized SDE as above;3 If Si+1 hits any barrier, then set payoff to be 0 and stop iteration, otherwise, set payoff at time T to max{0, ST − X };4 Repeat the above steps for M times and get M payoffs;5 Calculate the average of M payoffs and discount at rate μ;6 Calculate the standard deviation of M payoffs.
时间: 2024-02-14 19:06:34 浏览: 117
Based on the information provided in the PPTs, here is the Python code to simulate and price the partial barrier option using Monte Carlo simulation:
```python
import numpy as np
from scipy.stats import norm
# Parameters
S0 = 1.5 # initial FX rate
U = 1.7 # upper barrier level
L = 1.2 # lower barrier level
X = 1.4 # strike price
T = 1.0 # time to maturity
r = 0.03 # risk-free rate
rf = 0.0 # foreign interest rate
sigma = 0.12 # volatility
# Simulation settings
M = 100000 # number of Monte Carlo simulations
N = 252 # number of time steps
# Time and step size
dt = T / N
t = np.linspace(0, T, N+1)
# Simulate FX rates
Z = np.random.standard_normal((M, N))
S = np.zeros((M, N+1))
S[:, 0] = S0
for i in range(N):
S[:, i+1] = S[:, i] * np.exp((r-rf - 0.5*sigma**2)*dt + sigma*np.sqrt(dt)*Z[:, i])
# Compute option payoff
payoff = np.zeros(M)
for i in range(M):
# Check if the option has knocked out
if np.any((S[i, 21:126] > U) | (S[i, 201:231] < L) | (S[i, -1] < 1.3) | (S[i, -1] > 1.8)):
payoff[i] = 0
else:
payoff[i] = np.maximum(S[i, -1] - X, 0)
# Compute option price and standard deviation using Monte Carlo simulation
discount_factor = np.exp(-r*T)
option_price = discount_factor * np.mean(payoff)
std_dev = np.std(payoff)
print("Option price:", option_price)
print("Standard deviation:", std_dev)
# Compute option delta using finite difference method
delta = np.zeros(N+1)
delta[0] = norm.cdf((np.log(S0/X) + (r-rf + 0.5*sigma**2)*T) / (sigma*np.sqrt(T)))
for i in range(1, N+1):
Si = S[:, i]
Si_minus_1 = S[:, i-1]
Ci = np.maximum(Si-X, 0)
Ci_minus_1 = np.maximum(Si_minus_1-X, 0)
delta[i] = np.mean((Ci - Ci_minus_1) / (Si - Si_minus_1)) * np.exp(-r*dt)
print("Option delta:", delta[-1])
```
This code uses Monte Carlo simulation to estimate the option price and standard deviation, and it also uses the finite difference method to estimate the option delta. The results should match the ones expected based on the information provided in the PPTs. Note that the code assumes a daily time step, which corresponds to 252 trading days in a year.
阅读全文