\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
source("stock_tree.R")
## Loading required package: timeDate
## Loading required package: timeSeries
## Loading required package: fBasics
## Loading required package: MASS
## Attaching package: 'fBasics'
## The following object(s) are masked from 'package:base':
##
## norm
## Loading required package: fOptions
stock <- 100
strike <- 100
rfr <- 0.08
rfree <- 0.08
vol <- 0.3
div <- 0
Tm <- 1
print("**********************Prob 14.3**************************************************")
## [1] "**********************Prob 14.3**************************************************"
yrt <- stock.price.tree(100, rfr, lvls = 3, vol = 0.3, time = 1)
print(yrt)
## [,1] [,2] [,3]
## [1,] 100.00 0.0 0.0
## [2,] 84.19 128.7 0.0
## [3,] 70.87 108.3 165.6
print("arithmetic mean six month average")
## [1] "arithmetic mean six month average"
mean(yrt[2, 1:2])
## [1] 106.4
print("arithmeitc mean annual average")
## [1] "arithmeitc mean annual average"
mean(yrt[3, 1:3])
## [1] 114.9
print("geometric mean six month average")
## [1] "geometric mean six month average"
exp(mean(log(yrt[2, 1:2])))
## [1] 104.1
print("geometric mean annual average")
## [1] "geometric mean annual average"
exp(mean(log(yrt[3, 1:3])))
## [1] 108.3
asian.option.binomial.price.tree()
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 11.37
## [2,] 4 5 0.00
## [3,] 6 7 21.80
## [4,] NA NA 0.00
## [5,] NA NA 0.00
## [6,] NA NA 12.34
## [7,] NA NA 31.42
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $tree$nxt
## [1] 8
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 92.09
## [3,] 6 7 114.34
## [4,] NA NA 85.02
## [5,] NA NA 97.51
## [6,] NA NA 112.34
## [7,] NA NA 131.42
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $s.tree$nxt
## [1] 8
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 11.37
asian.option.binomial.price.tree(flg = "g")
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 10.48
## [2,] 4 5 0.00
## [3,] 6 7 20.10
## [4,] NA NA 0.00
## [5,] NA NA 0.00
## [6,] NA NA 11.71
## [7,] NA NA 28.68
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $tree$nxt
## [1] 8
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 91.75
## [3,] 6 7 113.44
## [4,] NA NA 84.19
## [5,] NA NA 96.98
## [6,] NA NA 111.71
## [7,] NA NA 128.68
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $s.tree$nxt
## [1] 8
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 10.48
print("**************************Prob 14.4**********************************************")
## [1] "**************************Prob 14.4**********************************************"
asian.option.binomial.strike.tree()
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 11.765
## [2,] 4 5 5.643
## [3,] 6 7 17.809
## [4,] NA NA 0.000
## [5,] NA NA 10.824
## [6,] NA NA 0.000
## [7,] NA NA 34.159
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $tree$nxt
## [1] 8
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 92.09
## [3,] 6 7 114.34
## [4,] NA NA 85.02
## [5,] NA NA 97.51
## [6,] NA NA 112.34
## [7,] NA NA 131.42
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $s.tree$nxt
## [1] 8
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 11.76
asian.option.binomial.strike.tree(flg = "g")
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 12.631
## [2,] 4 5 5.919
## [3,] 6 7 19.238
## [4,] NA NA 0.000
## [5,] NA NA 11.353
## [6,] NA NA 0.000
## [7,] NA NA 36.900
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $tree$nxt
## [1] 8
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 91.75
## [3,] 6 7 113.44
## [4,] NA NA 84.19
## [5,] NA NA 96.98
## [6,] NA NA 111.71
## [7,] NA NA 128.68
## [8,] NA NA NA
## [9,] NA NA NA
## [10,] NA NA NA
##
## $s.tree$nxt
## [1] 8
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 12.63
GeometricAverageRateOption("c", stock, strike, 1, 0.08, 0.08, vol)
##
## Title:
## Geometric Average Rate Option
##
## Call:
## GeometricAverageRateOption(TypeFlag = "c", S = stock, X = strike,
## Time = 1, r = 0.08, b = 0.08, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag c
## S 100
## X 100
## Time 1
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 8.114
##
## Description:
## Tue Sep 18 04:56:15 2012
TurnbullWakemanAsianApproxOption("c", 100, 100, 100, 1, 1, 0, rfree, rfree,
vol, title = NULL, description = NULL)
##
## Title:
## Turnbull Wakeman Asian Approximated Option
##
## Call:
## TurnbullWakemanAsianApproxOption(TypeFlag = "c", S = 100, SA = 100,
## X = 100, Time = 1, time = 1, tau = 0, r = rfree, b = rfree,
## sigma = vol, title = NULL, description = NULL)
##
## Parameters:
## Value:
## TypeFlag c
## S 100
## SA 100
## X 100
## Time 1
## time 1
## tau 0
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 8.659
##
## Description:
## Tue Sep 18 04:56:15 2012
print("***************************Prob 14.5*********************************************")
## [1] "***************************Prob 14.5*********************************************"
yrt <- stock.price.tree(100, rfr, lvls = 4, vol = 0.3, time = 1)
print(yrt)
## [,1] [,2] [,3] [,4]
## [1,] 100.00 0.0 0.0 0.0
## [2,] 86.37 122.1 0.0 0.0
## [3,] 74.60 105.5 149.1 0.0
## [4,] 64.43 91.1 128.8 182.1
print("arithmetic mean 4 month average")
## [1] "arithmetic mean 4 month average"
mean(yrt[2, 1:2])
## [1] 104.2
print("arithmeitc mean 8 average")
## [1] "arithmeitc mean 8 average"
mean(yrt[3, 1:3])
## [1] 109.7
print("arithmeitc mean annual average")
## [1] "arithmeitc mean annual average"
mean(yrt[4, 1:4])
## [1] 116.6
print("geometric mean tree 4 month average")
## [1] "geometric mean tree 4 month average"
exp(mean(log(yrt[2, 1:2])))
## [1] 102.7
print("geometric 8 month average")
## [1] "geometric 8 month average"
exp(mean(log(yrt[3, 1:3])))
## [1] 105.5
print("geometric annual month average")
## [1] "geometric annual month average"
exp(mean(log(yrt[4, 1:4])))
## [1] 108.3
asian.option.binomial.price.tree(lvls = 4)
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 11.341
## [2,] 4 5 1.399
## [3,] 6 7 20.576
## [4,] 8 9 0.000
## [5,] 10 11 2.688
## [6,] 12 13 9.459
## [7,] 14 15 31.300
## [8,] NA NA 0.000
## [9,] NA NA 0.000
## [10,] NA NA 0.000
## [11,] NA NA 5.166
## [12,] NA NA 4.676
## [13,] NA NA 14.104
## [14,] NA NA 25.021
## [15,] NA NA 38.353
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $tree$nxt
## [1] 16
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 93.18
## [3,] 6 7 111.06
## [4,] 8 9 86.99
## [5,] 10 11 97.28
## [6,] 12 13 109.20
## [7,] 14 15 123.76
## [8,] NA NA 81.35
## [9,] NA NA 88.02
## [10,] NA NA 95.74
## [11,] NA NA 105.17
## [12,] NA NA 104.68
## [13,] NA NA 114.10
## [14,] NA NA 125.02
## [15,] NA NA 138.35
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $s.tree$nxt
## [1] 16
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 11.34
asian.option.binomial.price.tree(lvls = 4, flg = "g")
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 10.437
## [2,] 4 5 1.105
## [3,] 6 7 19.095
## [4,] 8 9 0.000
## [5,] 10 11 2.124
## [6,] 12 13 8.873
## [7,] 14 15 28.965
## [8,] NA NA 0.000
## [9,] NA NA 0.000
## [10,] NA NA 0.000
## [11,] NA NA 4.081
## [12,] NA NA 4.081
## [13,] NA NA 13.497
## [14,] NA NA 23.764
## [15,] NA NA 34.960
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $tree$nxt
## [1] 16
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 92.94
## [3,] 6 7 110.51
## [4,] 8 9 86.37
## [5,] 10 11 96.94
## [6,] 12 13 108.81
## [7,] 14 15 122.12
## [8,] NA NA 80.27
## [9,] NA NA 87.53
## [10,] NA NA 95.45
## [11,] NA NA 104.08
## [12,] NA NA 104.08
## [13,] NA NA 113.50
## [14,] NA NA 123.76
## [15,] NA NA 134.96
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $s.tree$nxt
## [1] 16
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 10.44
asian.option.binomial.strike.tree(lvls = 4)
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 11.674
## [2,] 4 5 7.131
## [3,] 6 7 16.222
## [4,] 8 9 1.605
## [5,] 10 11 12.306
## [6,] 12 13 7.655
## [7,] 14 15 24.506
## [8,] NA NA 0.000
## [9,] NA NA 3.084
## [10,] NA NA 0.000
## [11,] NA NA 23.649
## [12,] NA NA 0.000
## [13,] NA NA 14.710
## [14,] NA NA 3.794
## [15,] NA NA 43.789
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $tree$nxt
## [1] 16
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 93.18
## [3,] 6 7 111.06
## [4,] 8 9 86.99
## [5,] 10 11 97.28
## [6,] 12 13 109.20
## [7,] 14 15 123.76
## [8,] NA NA 81.35
## [9,] NA NA 88.02
## [10,] NA NA 95.74
## [11,] NA NA 105.17
## [12,] NA NA 104.68
## [13,] NA NA 114.10
## [14,] NA NA 125.02
## [15,] NA NA 138.35
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $s.tree$nxt
## [1] 16
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 11.67
asian.option.binomial.strike.tree(lvls = 4, flg = "g")
## $tree
## $tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 12.567
## [2,] 4 5 7.540
## [3,] 6 7 17.581
## [4,] 8 9 1.859
## [5,] 10 11 12.871
## [6,] 12 13 7.971
## [7,] 14 15 26.842
## [8,] NA NA 0.000
## [9,] NA NA 3.572
## [10,] NA NA 0.000
## [11,] NA NA 24.734
## [12,] NA NA 0.000
## [13,] NA NA 15.318
## [14,] NA NA 5.051
## [15,] NA NA 47.182
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $tree$nxt
## [1] 16
##
## $tree$inc
## [1] 10
##
##
## $s.tree
## $s.tree$mat
## [,1] [,2] [,3]
## [1,] 2 3 100.00
## [2,] 4 5 92.94
## [3,] 6 7 110.51
## [4,] 8 9 86.37
## [5,] 10 11 96.94
## [6,] 12 13 108.81
## [7,] 14 15 122.12
## [8,] NA NA 80.27
## [9,] NA NA 87.53
## [10,] NA NA 95.45
## [11,] NA NA 104.08
## [12,] NA NA 104.08
## [13,] NA NA 113.50
## [14,] NA NA 123.76
## [15,] NA NA 134.96
## [16,] NA NA NA
## [17,] NA NA NA
## [18,] NA NA NA
## [19,] NA NA NA
## [20,] NA NA NA
## [21,] NA NA NA
## [22,] NA NA NA
## [23,] NA NA NA
## [24,] NA NA NA
## [25,] NA NA NA
## [26,] NA NA NA
## [27,] NA NA NA
## [28,] NA NA NA
## [29,] NA NA NA
## [30,] NA NA NA
##
## $s.tree$nxt
## [1] 16
##
## $s.tree$inc
## [1] 10
##
##
## $value
## [1] 12.57
print("************************Prob 14.6**********************************************")
## [1] "************************Prob 14.6**********************************************"
stock <- 40
strike <- 45
vol <- 0.3
r <- 0.08
T <- 1
ir <- 0
GBSOption("c", stock, strike, T, r, r, vol) #Standard european call
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "c", S = stock, X = strike, Time = T, r = r,
## b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag c
## S 40
## X 45
## Time 1
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 4.129
##
## Description:
## Tue Sep 18 04:56:15 2012
print("Price of Standard Call, 4.12932 B.C. have to cross to boundary to get to strike")
## [1] "Price of Standard Call, 4.12932 B.C. have to cross to boundary to get to strike"
print("0 Can never get to strike without being knocked out b/c of bonadary")
## [1] "0 Can never get to strike without being knocked out b/c of bonadary"
print("******************************Prob 14.7*****************************************")
## [1] "******************************Prob 14.7*****************************************"
stock <- 40
strike < 45
## [1] FALSE
sigma <- 0.3
r <- 0.08
delta <- 0
H <- 38
T = c(0.25, 0.5, 1, 2, 3, 4, 5, 100)
opt.val <- StandardBarrierOption("cdo", stock, strike, H, 0, T, r, r, sigma)
show(opt.val)
##
## Title:
## Standard Barrier Option
##
## Call:
## StandardBarrierOption(TypeFlag = "cdo", S = stock, X = strike,
## H = H, K = 0, Time = T, r = r, b = r, sigma = sigma)
##
## Parameters:
## Value:
## TypeFlag cdo
## S 40
## X 45
## H 38
## K 0
## Time1 0.25
## Time2 0.5
## Time3 1
## Time4 2
## Time5 3
## Time6 4
## Time7 5
## Time8 100
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 0.7323 1.248 1.822 2.45 2.853 3.156 3.4 5.311
##
## Description:
## Tue Sep 18 04:56:15 2012
stock <- 40
strike < 45
## [1] FALSE
sigma <- 0.3
r <- 0.08
delta <- 0
H <- 38
T = c(0.25, 0.5, 1, 2, 3, 4, 5, 100)
opt.val1 <- GBSOption("c", stock, strike, T, r, r, vol) #Standard european call
show(opt.val1)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "c", S = stock, X = strike, Time = T, r = r,
## b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag c
## S 40
## X 45
## Time1 0.25
## Time2 0.5
## Time3 1
## Time4 2
## Time5 3
## Time6 4
## Time7 5
## Time8 100
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 0.9744 2.13 4.129 7.44 10.24 12.7 14.9 39.99
##
## Description:
## Tue Sep 18 04:56:15 2012
plot(T, opt.val1@price/opt.val@price, main = "Ratio Option Values 14.7")
print("Down an out option less valuable b/c becomes worthless after crossing barrier")
## [1] "Down an out option less valuable b/c becomes worthless after crossing barrier"
windows()
## Error: could not find function "windows"
print("**************************Problem 14.8*********************************")
## [1] "**************************Problem 14.8*********************************"
H <- 44
opt.val1 <- StandardBarrierOption("puo", stock, strike, H, 0, T, r, r, sigma)
show(opt.val)
##
## Title:
## Standard Barrier Option
##
## Call:
## StandardBarrierOption(TypeFlag = "cdo", S = stock, X = strike,
## H = H, K = 0, Time = T, r = r, b = r, sigma = sigma)
##
## Parameters:
## Value:
## TypeFlag cdo
## S 40
## X 45
## H 38
## K 0
## Time1 0.25
## Time2 0.5
## Time3 1
## Time4 2
## Time5 3
## Time6 4
## Time7 5
## Time8 100
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 0.7323 1.248 1.822 2.45 2.853 3.156 3.4 5.311
##
## Description:
## Tue Sep 18 04:56:15 2012
opt.val <- GBSOption("p", stock, strike, T, r, r, vol) #Standard european call
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "p", S = stock, X = strike, Time = T, r = r,
## b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag p
## S 40
## X 45
## Time1 0.25
## Time2 0.5
## Time3 1
## Time4 2
## Time5 3
## Time6 4
## Time7 5
## Time8 100
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 5.083 5.366 5.67 5.786 5.635 5.374 5.065 0.001225
##
## Description:
## Tue Sep 18 04:56:15 2012
plot(T, opt.val1@price/opt.val@price, main = "Ratio Option Values 14.8")
windows()
## Error: could not find function "windows"
print("*****************************Ditto for Up and Out put*************************")
## [1] "*****************************Ditto for Up and Out put*************************"
print("*********************************Prob14.9***************************************")
## [1] "*********************************Prob14.9***************************************"
T <- seq(from = 1/12, to = 1, length = 12)
H <- 60
opt.val1 <- StandardBarrierOption("cuo", stock, strike, H, 0, T, r, r, sigma)
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "p", S = stock, X = strike, Time = T, r = r,
## b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag p
## S 40
## X 45
## Time1 0.25
## Time2 0.5
## Time3 1
## Time4 2
## Time5 3
## Time6 4
## Time7 5
## Time8 100
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 5.083 5.366 5.67 5.786 5.635 5.374 5.065 0.001225
##
## Description:
## Tue Sep 18 04:56:15 2012
opt.val <- GBSOption("c", stock, strike, T, r, r, vol) #Standard european call
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "c", S = stock, X = strike, Time = T, r = r,
## b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag c
## S 40
## X 45
## Time1 0.0833333333333333
## Time2 0.166666666666667
## Time3 0.25
## Time4 0.333333333333333
## Time5 0.416666666666667
## Time6 0.5
## Time7 0.583333333333333
## Time8 0.666666666666667
## Time9 0.75
## Time10 0.833333333333333
## Time11 0.916666666666667
## Time12 1
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 0.1727 0.5641 0.9744 1.374 1.759 2.13 2.489 2.835 3.172 3.499 3.818 4.129
##
## Description:
## Tue Sep 18 04:56:15 2012
plot(T, opt.val1@price/opt.val@price, main = "Ratio Option Values 14.9")
windows()
## Error: could not find function "windows"
print("***************************************Problem 14.10******************************")
## [1] "***************************************Problem 14.10******************************"
print(" In the first case in the time allotted the probability crossing option negligible b/c\nprice is low so value is same to 3 decimpal places. In the second case Knock out boun dary is close to strke so knock out is significantly cheaper")
## [1] " In the first case in the time allotted the probability crossing option negligible b/c\nprice is low so value is same to 3 decimpal places. In the second case Knock out boun dary is close to strke so knock out is significantly cheaper"
print("As time to expiration grows probability of crossing boundary grows so at least at first diffeences magnify, i.e. beofre asymptote")
## [1] "As time to expiration grows probability of crossing boundary grows so at least at first diffeences magnify, i.e. beofre asymptote"
source("newton_script.R")
##
## Title:
## ypprob set
##
## Call:
## GBSOption(TypeFlag = "c", S = stk.price, X = strk.price, Time = tm,
## r = rate, b = rate, sigma = vol, title = "ypprob set", description = "startbs")
##
## Parameters:
## Value:
## TypeFlag c
## S 40
## X 40
## Time 2
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 9.61
##
## Description:
## startbs
##
## $oval
## [1] 2
##
## $stock
## [1] 26.07
##
##
## Title:
## Option On Option Valuation
##
## Call:
## OptionOnOption(TypeFlag = "cc", S = stk.price, X1 = strk.price,
## X2 = 2, time1 = tm, Time2 = tms, r = rate, b = rate, sigma = vol)
##
## Parameters:
## Value:
## S 40
## X1 40
## X2 2
## time1 2
## Time2 1
## r 0.08
## b 0.08
## sigma 0.3
## criticalValue 31.7229605573112
##
## Option Price:
## 7.948
##
## Description:
## Tue Sep 18 04:56:15 2012
##
##
## Title:
## Option On Option Valuation
##
## Call:
## OptionOnOption(TypeFlag = "pc", S = stk.price, X1 = strk.price,
## X2 = 2, time1 = tm, Time2 = tms, r = rate, b = rate, sigma = vol)
##
## Parameters:
## Value:
## S 40
## X1 40
## X2 2
## time1 2
## Time2 1
## r 0.08
## b 0.08
## sigma 0.3
## criticalValue 31.7229605573112
##
## Option Price:
## 0.1845
##
## Description:
## Tue Sep 18 04:56:15 2012
##
## [1] "Compound Option Parity"
## [1] 1.776e-15
##
## Title:
## ypprob set
##
## Call:
## GBSOption(TypeFlag = "p", S = stk.price, X = strk.price, Time = tm,
## r = rate, b = rate, sigma = vol, title = "ypprob set", description = "put")
##
## Parameters:
## Value:
## TypeFlag p
## S 40
## X 40
## Time 2
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 3.696
##
## Description:
## put
##
## $oval
## [1] 2
##
## $stock
## [1] 48.07
##
##
## Title:
## Option On Option Valuation
##
## Call:
## OptionOnOption(TypeFlag = "cp", S = stk.price, X1 = strk.price,
## X2 = 2, time1 = tm, Time2 = tms, r = rate, b = rate, sigma = vol)
##
## Parameters:
## Value:
## S 40
## X1 40
## X2 2
## time1 2
## Time2 1
## r 0.08
## b 0.08
## sigma 0.3
## criticalValue 44.3494002305686
##
## Option Price:
## 2.298
##
## Description:
## Tue Sep 18 04:56:15 2012
##
##
## Title:
## Option On Option Valuation
##
## Call:
## OptionOnOption(TypeFlag = "pp", S = stk.price, X1 = strk.price,
## X2 = 2, time1 = tm, Time2 = tms, r = rate, b = rate, sigma = vol)
##
## Parameters:
## Value:
## S 40
## X1 40
## X2 2
## time1 2
## Time2 1
## r 0.08
## b 0.08
## sigma 0.3
## criticalValue 44.3494002305686
##
## Option Price:
## 0.4484
##
## Description:
## Tue Sep 18 04:56:15 2012
##
## [1] -8.882e-16
print("***************************Problem 14.13****************************************")
## [1] "***************************Problem 14.13****************************************"
gap.strike <- c(0.8, 0.9, 1)
gap.trigger <- c(0.8, 0.9, 1)
stock <- 0.9
vol <- 0.1
rfrate <- 0.03
Time <- 0.5
r <- 0.06
b <- 0.03
opt.val <- GBSOption("p", stock, gap.strike, Time, r, b, vol) #Standard european put
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "p", S = stock, X = gap.strike, Time = Time,
## r = r, b = b, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag p
## S 0.9
## X1 0.8
## X2 0.9
## X3 1
## Time 0.5
## r 0.06
## b 0.03
## sigma 0.1
##
## Option Price:
## 0.0006865 0.01878 0.08697
##
## Description:
## Tue Sep 18 04:56:15 2012
for (i in gap.strike) {
opt.val <- GapOption("p", stock, gap.trigger, i, Time, r, b, vol, title = "Put Table",
description = "Currency")
show(opt.val)
}
##
## Title:
## Put Table
##
## Call:
## GapOption(TypeFlag = "p", S = stock, X1 = gap.trigger, X2 = i,
## Time = Time, r = r, b = b, sigma = vol, title = "Put Table",
## description = "Currency")
##
## Parameters:
## Value:
## TypeFlag p
## S 0.9
## X11 0.8
## X12 0.9
## X13 1
## X2 0.8
## Time 0.5
## r 0.06
## b 0.03
## sigma 0.1
##
## Option Price:
## 0.0006865 -0.02294 -0.08877
##
## Description:
## Currency
##
##
## Title:
## Put Table
##
## Call:
## GapOption(TypeFlag = "p", S = stock, X1 = gap.trigger, X2 = i,
## Time = Time, r = r, b = b, sigma = vol, title = "Put Table",
## description = "Currency")
##
## Parameters:
## Value:
## TypeFlag p
## S 0.9
## X11 0.8
## X12 0.9
## X13 1
## X2 0.9
## Time 0.5
## r 0.06
## b 0.03
## sigma 0.1
##
## Option Price:
## 0.00386 0.01878 -0.0008962
##
## Description:
## Currency
##
##
## Title:
## Put Table
##
## Call:
## GapOption(TypeFlag = "p", S = stock, X1 = gap.trigger, X2 = i,
## Time = Time, r = r, b = b, sigma = vol, title = "Put Table",
## description = "Currency")
##
## Parameters:
## Value:
## TypeFlag p
## S 0.9
## X11 0.8
## X12 0.9
## X13 1
## X2 1
## Time 0.5
## r 0.06
## b 0.03
## sigma 0.1
##
## Option Price:
## 0.007034 0.06049 0.08697
##
## Description:
## Currency
gap.trigger <- 1
gap.strike <- 0.8
vol <- seq(from = 0.01, to = 100, by = 0.1)
opt.val <- GapOption("p", stock, gap.trigger, gap.strike, Time, r, b, vol, title = "Put Table",
description = "Currency")
plot(vol, opt.val@price, main = "Gap by Volatility")
windows()
## Error: could not find function "windows"
print("**********************************Problem 14.14*************************************")
## [1] "**********************************Problem 14.14*************************************"
vol <- 0.3
gap.trigger <- 100
gap.strike <- 90
tol <- 1e-06
gap_delta <- function(type, stock, trigger, strike, Time, r, b, vol, tol) {
inc <- GapOption(type, stock + tol, trigger, strike, Time, r, b, vol)
dec <- GapOption(type, stock - tol, trigger, strike, Time, r, b, vol)
(inc@price - dec@price)/tol
}
stk.seq <- seq(from = 90, to = 110, by = 0.01)
gpp.vals <- gap_delta("c", stk.seq, gap.trigger, gap.strike, 1/52, r, b, vol,
tol)
plot(stk.seq, gpp.vals, main = "gap deltas")
gpp.vals <- gap_delta("c", stk.seq, gap.trigger, gap.strike, 0.25, r, b, vol,
tol)
points(stk.seq, gpp.vals, col = "green")
gpp.vals <- gap_delta("c", stk.seq, gap.trigger, gap.strike, 1, r, b, vol, tol)
points(stk.seq, gpp.vals, col = "red")
print("*******************************Problem 14.15******************************************")
## [1] "*******************************Problem 14.15******************************************"
gap_vega <- function(type, stock, trigger, strike, Time, r, b, vol, tol) {
inc <- GapOption(type, stock, trigger, strike, Time, r, b, vol + tol)
dec <- GapOption(type, stock - tol, trigger, strike, Time, r, b, vol - tol)
(inc@price - dec@price)/tol
}
windows()
## Error: could not find function "windows"
stk.seq <- seq(from = 80, to = 110, by = 0.01)
gpp.vals <- gap_vega("p", stk.seq, gap.trigger, gap.strike, 1/52, r, b, vol,
tol)
gpp.vals2 <- gap_vega("p", stk.seq, gap.trigger, gap.strike, 0.25, r, b, vol,
tol)
gpp.vals3 <- gap_vega("p", stk.seq, gap.trigger, gap.strike, 1, r, b, vol, tol)
a <- min(gpp.vals, gpp.vals2, gpp.vals3)
b <- max(gpp.vals, gpp.vals2, gpp.vals3)
c <- min(stk.seq)
d <- max(stk.seq)
plot(c(c, d), c(a, b), type = "n", main = "Stock Vegas", xlab = "Stock Price",
ylab = "Option")
points(stk.seq, gpp.vals, main = "gap vegas")
points(stk.seq, gpp.vals2, col = "red")
points(stk.seq, gpp.vals3, col = "green")
print("***************************Problem 14.16*******************************************")
## [1] "***************************Problem 14.16*******************************************"
stock <- 40
strike <- 40
vol <- 0.3
r <- 0.08
T <- 1
delta <- 0
stockQ <- 60
volQ <- 0.5
deltaq <- 0
rho <- 0.5
strike <- 40
Q <- 1
Q1 <- 0.667
opt.val <- GBSOption("c", stock, strike, T, r, r, vol)
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "c", S = stock, X = strike, Time = T, r = r,
## b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag c
## S 40
## X 40
## Time 1
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 6.285
##
## Description:
## Tue Sep 18 04:56:15 2012
opt.val <- EuropeanExchangeOption(stock, stockQ, Q, Q1, T, r, r, r, vol, volQ,
rho, title = "first exchange option")
show(opt.val)
##
## Title:
## first exchange option
##
## Call:
## EuropeanExchangeOption(S1 = stock, S2 = stockQ, Q1 = Q, Q2 = Q1,
## Time = T, r = r, b1 = r, b2 = r, sigma1 = vol, sigma2 = volQ,
## rho = rho, title = "first exchange option")
##
## Parameters:
## Value:
## S1 40
## S2 60
## Q1 1
## Q2 0.667
## Time 1
## r 0.08
## b1 0.08
## b2 0.08
## sigma1 0.3
## sigma2 0.5
## rho 0.5
##
## Option Price:
## 6.893
##
## Description:
## Tue Sep 18 04:56:15 2012
print("****************************Problem 14.17*****************************************")
## [1] "****************************Problem 14.17*****************************************"
seq.rho <- seq(from = -0.01, to = 0.99, by = 0.001)
seq.intr <- seq(from = 0, to = 0.1, by = 0.001)
opt.val <- EuropeanExchangeOption(stock, stockQ, Q, Q1, T, r, r - seq.intr,
r, vol, volQ, rho, title = "second exchange option")
opt.val1 <- EuropeanExchangeOption(stock, stockQ, Q, Q1, T, r, r, r - seq.intr,
vol, volQ, rho, title = "third exchange option")
opt.val2 <- EuropeanExchangeOption(stock, stockQ, Q, Q1, T, r, r, r, vol, volQ,
seq.rho, title = "third exchange option")
p1 <- opt.val@price
p2 <- opt.val1@price
xmin <- min(seq.intr)
xmax <- max(seq.intr)
ymin <- min(p1, p2)
ymax <- max(p1, p2)
par(mfrow = c(2, 1))
plot(c(xmin, xmax), c(ymin, ymax), type = "n", main = "Exchange Option Interest",
xlab = "int", ylab = "option")
points(seq.intr, opt.val@price)
points(seq.intr, opt.val1@price, col = "red")
plot(seq.rho, opt.val2@price, main = "Exchange Plots -- correlation", xlab = "cc",
ylab = "option")
print("*************************** Problem 14.18*****************************************")
## [1] "*************************** Problem 14.18*****************************************"
print("(a)Because the standard deviation in part (a) is zero and the option is at the money. Price is in fact undefined. Might call it Zero")
## [1] "(a)Because the standard deviation in part (a) is zero and the option is at the money. Price is in fact undefined. Might call it Zero"
print("(b) With differing variances now leads to a standard Black Scholes Call")
## [1] "(b) With differing variances now leads to a standard Black Scholes Call"
opt.val <- EuropeanExchangeOption(stock, stock, Q, Q, T, 0, 0, 0, vol, vol,
1, title = "third exchange option")
show(opt.val)
##
## Title:
## third exchange option
##
## Call:
## EuropeanExchangeOption(S1 = stock, S2 = stock, Q1 = Q, Q2 = Q,
## Time = T, r = 0, b1 = 0, b2 = 0, sigma1 = vol, sigma2 = vol,
## rho = 1, title = "third exchange option")
##
## Parameters:
## Value:
## S1 40
## S2 40
## Q1 1
## Q2 1
## Time 1
## r 0
## b1 0
## b2 0
## sigma1 0.3
## sigma2 0.3
## rho 1
##
## Option Price:
## NaN
##
## Description:
## Tue Sep 18 04:56:15 2012
opt.val <- EuropeanExchangeOption(stock, stock, Q, Q, T, 0, 0, 0, vol, 0.4,
1, title = "third exchange option")
show(opt.val)
##
## Title:
## third exchange option
##
## Call:
## EuropeanExchangeOption(S1 = stock, S2 = stock, Q1 = Q, Q2 = Q,
## Time = T, r = 0, b1 = 0, b2 = 0, sigma1 = vol, sigma2 = 0.4,
## rho = 1, title = "third exchange option")
##
## Parameters:
## Value:
## S1 40
## S2 40
## Q1 1
## Q2 1
## Time 1
## r 0
## b1 0
## b2 0
## sigma1 0.3
## sigma2 0.4
## rho 1
##
## Option Price:
## 1.595
##
## Description:
## Tue Sep 18 04:56:15 2012
print("***************************Problem 14.19****************************************")
## [1] "***************************Problem 14.19****************************************"
print("An exchange option of the Europe against oil as an underlying strike does the job")
## [1] "An exchange option of the Europe against oil as an underlying strike does the job"
print("****************************Problem 14.20****************************************")
## [1] "****************************Problem 14.20****************************************"
print("If the Chooser and underlying expire simultaneously one gets Abs(|Stk -k|) which is exactly equivalent to sum of put and call as that time")
## [1] "If the Chooser and underlying expire simultaneously one gets Abs(|Stk -k|) which is exactly equivalent to sum of put and call as that time"
print("Given formula follows from put call parity")
## [1] "Given formula follows from put call parity"
print("*******************************Problem 14.21**************************************")
## [1] "*******************************Problem 14.21**************************************"
stock <- 100
vol <- 0.3
r <- 0.08
div <- 0
tim <- 0.25
opt.val <- GBSOption("c", c(150, 50, 200), c(150, 50, 200), tim, r, r, vol)
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "c", S = c(150, 50, 200), X = c(150, 50,
## 200), Time = tim, r = r, b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag c
## S1 150
## S2 50
## S3 200
## X1 150
## X2 50
## X3 200
## Time 0.25
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 10.44 3.481 13.92
##
## Description:
## Tue Sep 18 04:56:15 2012
opt.val@price/c(150, 50, 200)
## [1] 0.06962 0.06962 0.06962
print("Since one needs a fixed fraction of the share price to buy the at the money call.\nToday one can by this fraction of a share or pay the cost for this fraction of the share cost wgatever that may be")
## [1] "Since one needs a fixed fraction of the share price to buy the at the money call.\nToday one can by this fraction of a share or pay the cost for this fraction of the share cost wgatever that may be"
opt.val <- GBSOption("c", c(150, 50, 200), 1.05 * c(150, 50, 200), tim, r, r,
vol)
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "c", S = c(150, 50, 200), X = 1.05 * c(150,
## 50, 200), Time = tim, r = r, b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag c
## S1 150
## S2 50
## S3 200
## X1 157.5
## X2 52.5
## X3 210
## Time 0.25
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 7.075 2.358 9.433
##
## Description:
## Tue Sep 18 04:56:15 2012
opt.val@price/c(150, 50, 200)
## [1] 0.04717 0.04717 0.04717
print("In both cases it appears what is necessary that current value is a fixed percentage of the current stock price")
## [1] "In both cases it appears what is necessary that current value is a fixed percentage of the current stock price"
print("***********************Prioblem 14.22*******************************************")
## [1] "***********************Prioblem 14.22*******************************************"
stock <- 100
vol <- 0.3
r <- 0.08
del <- 0
opt.val <- GBSOption("p", stock, 0.95 * stock, 1, r, r, vol)
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "p", S = stock, X = 0.95 * stock, Time = 1,
## r = r, b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag p
## S 100
## X 95
## Time 1
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 6.083
##
## Description:
## Tue Sep 18 04:56:15 2012
opt.val@price/stock
## [1] 0.06083
opt.val <- GBSOption("p", stock, 0.95 * stock, 1/12, r, r, vol)
show(opt.val)
##
## Title:
## Black Scholes Option Valuation
##
## Call:
## GBSOption(TypeFlag = "p", S = stock, X = 0.95 * stock, Time = 1/12,
## r = r, b = r, sigma = vol)
##
## Parameters:
## Value:
## TypeFlag p
## S 100
## X 95
## Time 0.0833333333333333
## r 0.08
## b 0.08
## sigma 0.3
##
## Option Price:
## 1.265
##
## Description:
## Tue Sep 18 04:56:15 2012
12 * opt.val@price/stock
## [1] 0.1518
@
\end{document}