首页 > 技术文章 > Derivative Pricing_1_Black

sophhhie 2020-02-07 22:19 原文

  

1. Stock Option wih divends

1.1 Task A

1.1.1 Calculate a ECO on a stock.

  /Ex-dividend dates in 3 and 6 months, each dividend is expected to be 1;

  /P0 = 80, K = 80, σ = 0.25 per annum, rf = 0.07; T = 1;

1.1.2 Process and results:

K <- 80
r <- 0.07
sigma <- 0.25
tau <- 1
# pv of expected dividends
d <- exp(-(tau/4) * r) + exp(-(tau/2) * r)
# stock price
S <- K - d

Deduct pv of dividends from S0 to arrive at purely random component of S0 which is 78.0517.

y <- (log(S/K) + (r - sigma^2 / 2) * tau) / (sigma * sqrt(tau))
cdfy <- pnorm(y)
cdfn <- pnorm(y + sigma * sqrt(tau))
# BS formula
C <- S * cdfn - (K * exp(-r * tau) * cdfy)

1.2 Task B

1.2.1 Calculate EPO using BSM model, assume that

  /Continuously compounded dividend yield is 0.015;

  /S0 = 100, K = 100, option expires in 275 days, volatility is 0.45;

  /Continuously compounded rf = 0.03;

1.2.2 Process and results

# Adjust S0
GBSOption('p', 100 * exp(-0.015 * (275/365)), 100, 275/365, 0.03, 0.03, 0.45)

2. Black's Futures Option Model

2.1 Key parameter: S = F, b = 0;

2.2 Task: Need an option for an asset (futures price = 120), assume K = 100, T = 5, volatility = 20%, riskfree rate = 5%;

2.3 Process and results:

GBSOption('c', 120, 100, 5, 0.05, 0, 0.2)

3. Pricing Cap Using Black

3.1 Key parameter: S = F(n-1), b = 0;

3.2 Notes:

  Interest rate caps are interest rate derivatives, where holder receives positive payments throughout periods if interest rate exceeds certain level (strike price, K).

  Interest rate floors the holder wins if interest rate below K.

3.3 Task: 

    Need to pay USD LIBOR for 6 months to Alex between May and Nov 2020, so use caplet avoid interest rate risk.

    Assume: the caplet on LIBOR rate with 2.5% strike price (i.e., if LIBOR > 2.5%, one period payoff = 0.5 * max[3% - 2.5%, 0]); 

        LIBOR follows Brownian Motion with 20% volatility;

        forward rate between May and Nov = 2.2%;

        spot rate = 2%;

3.4 Process and results:

GBSOption('c', 0.022, 0.025, 0.5, 0.02, 0, 0.2)

3.5 Comments

3.5.1 Still need to multiply the time interval 0.5 on 0.0003269133 to get 0.0001634567, if unit is million USD, the final price of caplet will be 163USD;

3.5.2 Cap is sum of caplets !!! % LIBOR changes all the time, example above is just a single caplet calculation, below is whole method. Now assume that:

      we need a cap that pays if LIBOR > 2.5% in first 3m, or if LIBOR > 2% in following 3m;

      forward LIBOR rate in May~Aug is 2.1%, in Aug~Nov is 2.2%;      

GBSOption('c', 0.021, 0.025, 0.25, 0.02, 0, 0.2)
GBSOption('c', 0.022, 0.02, 0.25, 0.02, 0, 0.2)
# we seperately get two prices, each of them with time interval 0.25, so final price of cap is:
0.25 * (3.743394e-05 +  0.002179862)
0.000554324

So final price of cap will be 554USD.

4. Drawing Binomial Trees for Stock Option  

4.1 Key parameter: b = r;

4.2 Assume:

    Stock P0 = 900, K = 950, r = 0.02, T = 3m, Volatility = 0.22

4.3 Process and results:

tree <- BinomialTreeOption(TypeFlag = 'ce', S = 900, X = 950, 1/4, 0.02, b = 0.02, sigma = 0.22, n = 3) 
BinomialTreePlot(tree, dy = 1, xlab = 'Time steps', ylab = 'number of up steps', xlim = c(0, 4)) 
title(main = 'European Call Option')

4.4 Comment:

    This is CRR Binomial model, which converges to Black. Black Pricing is as below:

 

推荐阅读