-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlookback.R
More file actions
69 lines (68 loc) · 2.74 KB
/
lookback.R
File metadata and controls
69 lines (68 loc) · 2.74 KB
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#'@title Look Back Option
#'
#' @description
#' \code{lookback} calculates the option price of a lookback option
#' of type fixed/floating and call/put option .
#'
#' @param Type call or put "c" for call "p" for put
#' @param Type2 fixed or floating "fx" for fixed and "fl" for floating
#' @param Time Time to maturity
#' @param S spot price of the underlying
#' @param SminorMax Max or minimum spot price of the underlying during the duration
#' @param r Risk free rate of return
#' @param q dividend yield
#' @param sigma standard deviation
#' @param K Strike Price to be input for fixed lookback option
#' @keywords maximum drawdown,brownian motion
#' @examples
#' lookback("c","fix",1000,1100,0.25,0.08,0.01,0.30,900)
#'
#' @references Options, Futures and Other Derivatives
#'
lookback<-function (Type,Type2, S, SminorMax, Time, r,q, sigma,K)
{
if(Type2=="fix" & Type=="c"){
m<-max(SminorMax,K)
a1 = (log(m/S) + (-r+q + sigma^2/2) * Time)/(sigma * sqrt(Time))
a2 = a1 - sigma * sqrt(Time)
a3 = (log(m/S)+(r-q-sigma^2/2)*Time)/(sigma*sqrt(Time))
Y1 = -(2*(r-q-sigma^2/2)*log(m/S))/sigma^2
price <- -S*exp(-q*Time)*pnorm(a2) +S*exp(-q*Time)*sigma^2/(2*(r-q))*pnorm(-a2)+m*exp(-r*Time)*(pnorm(a1)-sigma^2/(2*(r-q))*exp(Y1)*pnorm(-a3))
price=price+S*exp(-q*Time)-K*exp(-r*Time)
}
if(Type2=="fix" & Type=="p"){
m<-min(SminorMax,K)
a1 <- (log(S/m) + ((r-q) + sigma^2/2) * Time)/(sigma * sqrt(Time))
a2 <- a1 - sigma * sqrt(Time)
a3 <- (log(S/m)+((-r+q)+sigma^2/2)*Time)/(sigma*sqrt(Time))
Y1 <- -(2*(r-q-sigma^2/2)*log(S/m))/sigma^2
price <- S*exp(-q*Time)*pnorm(a1) - S*exp(-q*Time)*sigma^2/(2*(r-q))*pnorm(-a1)-m*exp(-r*Time)*(pnorm(a2)-sigma^2/(2*(r-q))*exp(Y1)*pnorm(-a3))
price<-price-S*exp(-q*Time)+K*exp(-r*Time)
}
if (Type2=="fl" & Type == "c"){
m<-SminorMax
a1 <- (log(S/m) + ((r-q) + sigma^2/2) * Time)/(sigma * sqrt(Time))
a2 <- a1 - sigma * sqrt(Time)
a3 <- (log(S/m)+((-r+q)+sigma^2/2)*Time)/(sigma*sqrt(Time))
Y1 <- -(2*(r-q-sigma^2/2)*log(S/m))/sigma^2
price <- S*exp(-q*Time)*pnorm(a1) - S*exp(-q*Time)*sigma^2/(2*(r-q))*pnorm(-a1)-m*exp(-r*Time)*(pnorm(a2)-sigma^2/(2*(r-q))*exp(Y1)*pnorm(-a3))
}
if (Type2=="fl" & Type == "p"){
m<-SminorMax
a1 = (log(m/S) + (-r+q + sigma^2/2) * Time)/(sigma * sqrt(Time))
a2 = a1 - sigma * sqrt(Time)
a3 = (log(m/S)+(r-q-sigma^2/2)*Time)/(sigma*sqrt(Time))
Y1 = -(2*(r-q-sigma^2/2)*log(m/S))/sigma^2
price <- -S*exp(-q*Time)*pnorm(a2) +S*exp(-q*Time)*sigma^2/(2*(r-q))*pnorm(-a2)+m*exp(-r*Time)*(pnorm(a1)-sigma^2/(2*(r-q))*exp(Y1)*pnorm(-a3))
}
param = list()
param$Type = Type
param$S = S
param$SminorMax = SminorMax
param$Time = Time
param$r = r
param$q = q
param$sigma = sigma
write.table(param)
print(price)
}