\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")

plot of chunk Chap14.R


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")

plot of chunk Chap14.R

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")

plot of chunk Chap14.R

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")

plot of chunk Chap14.R


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")

plot of chunk Chap14.R

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")

plot of chunk Chap14.R


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")

plot of chunk Chap14.R


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}