Demo entry 6742769

Code 1

   

Submitted by anonymous on May 19, 2018 at 01:07
Language: S. Code size: 6.5 kB.

###### Установка необходимых пакетов ######

install.packages('fOptions')
install.packages('quantmod')
install.packages('fExoticOptions')
install.packages('pbivnorm')
install.packages('lattice')
install.packages('optimization')

library("fOptions")
library("quantmod")
library("fExoticOptions")
library("pbivnorm")
library("lattice")
library("optimization")

##### Устанвока начальных параметров модели #####

V0 <- 99482 # Начальная стоимость пакета акций компании
T1 <- 1 # Срок действия внешено опциона (лет)
T2 <- 10 # Срок действия внутреннего опциона (лет)
sigma1 <- 0.65 # Стандартное отклонение на промежутке [0,T1]
sigma2 <- 0.53 # Стандартное отклонение на промежутке [T1,T2]
tau1 <- T1 
tau2 <- T2-T1
tau <- tau1 + tau2
r <- 0.075 # безрисковая ставка доходности 
I1 <- 80000 # Цена исполнения внешнего опциона
I2 <- 96221 # Цена исполнения внутреннего опциона
e<-exp(1) # число e

### Нахождение порогового значения Vcrit стоимости пакета акций компании на момент T1,###
### при котором внешней опцион исполняется ###

# Задаем оптимизируемую функцию #
Optimize <- function(Vcrit)
{
lcritplus = (log(Vcrit/I2)+r*tau2+1/2*(sigma2^2*tau2))/sqrt(sigma2^2*tau2)
lcritminus =  lcritplus - sqrt(sigma2^2*tau2)
abs(V0*pnorm(lcritplus) - I2*e^(-r*tau2)*pnorm(lcritminus)-I1)
}

Vcrit <- optim_nm(Optimize, k=1, s=1)$par

# Визуализация оптимизации функции #
Optimization<-c()
for (i in c(1:3000))
{
  Optimization[i]<-Optimize(i*100)
}
plot(Optimization, type = "l", lwd = 3, xlab = "Значения V/100", ylab = "Значения оптимизируемой функции")
abline(v=Vcrit/100, lwd=2, col =4, lty = 2)

### Расчет параметров модели составного опциона колл по модифицированной формуле Р. Геске ###

Hplus <- (log(V0/Vcrit)+r*tau1+1/2*sigma1^2*tau1)/sqrt(sigma1^2*tau1)
Hminus <- Hplus - sqrt(sigma1^2*tau1)
Lplus <- (log(V0/I2)+r*tau+1/2*(sigma1^2*tau1+sigma2^2*tau2))/sqrt(sigma1^2*tau1+sigma2^2*tau2)
Lminus <- Lplus - sqrt(sigma1^2*tau1+sigma2^2*tau2)
rho <- sqrt((sigma1^2*tau1)/(sigma1^2*tau1 + sigma2^2*tau2))
Compound <- V0*pbivnorm(Hplus,Lplus,rho) - I2*e^(-r*tau)*pbivnorm(Hminus,Lminus,rho) -
  I1*e^(-r*tau1)*pnorm(Hminus)
Compound

### Анализ зависимости цены составного опциона колл от различных факторов ###
## Первоначальная стоимость поекта ##

Cvalues <-c()
for (i in c(1:1500))
{
  V0 <- i*100
  Hplus <- (log(V0/Vcrit)+r*tau1+1/2*sigma1^2*tau1)/sqrt(sigma1^2*tau1)
  Hminus <- Hplus - sqrt(sigma1^2*tau1)
  Lplus <- (log(V0/I2)+r*tau+1/2*(sigma1^2*tau1+sigma2^2*tau2))/sqrt(sigma1^2*tau1+sigma2^2*tau2)
  Lminus <- Lplus - sqrt(sigma1^2*tau1+sigma2^2*tau2)
  rho <- sqrt((sigma1^2*tau1)/(sigma1^2*tau1 + sigma2^2*tau2))
  Compound <- V0*pbivnorm(Hplus,Lplus,rho) - I2*e^(-r*tau)*pbivnorm(Hminus,Lminus,rho) -
    I1*e^(-r*tau1)*pnorm(Hminus)
  Cvalues[i]<- Compound
  }
plot(Cvalues, type = "l", lwd =3, xlab = "Первоначальная стоимсоть пакета акций V0/100", ylab = "Стоимость составного опциона")
V0 <- 103939 
abline(v=V0/100, lwd=2, col = 3, lty = 2)

## Волатильность на промежутке времени [0,T1] ##

Cvalues <-c()
for (i in c(1:100))
{
  sigma1 <- i/50
  Hplus <- (log(V0/Vcrit)+r*tau1+1/2*sigma1^2*tau1)/sqrt(sigma1^2*tau1)
  Hminus <- Hplus - sqrt(sigma1^2*tau1)
  Lplus <- (log(V0/I2)+r*tau+1/2*(sigma1^2*tau1+sigma2^2*tau2))/sqrt(sigma1^2*tau1+sigma2^2*tau2)
  Lminus <- Lplus - sqrt(sigma1^2*tau1+sigma2^2*tau2)
  rho <- sqrt((sigma1^2*tau1)/(sigma1^2*tau1 + sigma2^2*tau2))
  Compound <- V0*pbivnorm(Hplus,Lplus,rho) - I2*e^(-r*tau)*pbivnorm(Hminus,Lminus,rho) - I1*e^(-r*tau1)*pnorm(Hminus)
  Cvalues[i]<- Compound
}
plot(Cvalues, type = "l", lwd =3, xlab = "Стандартное отклонение акции sigma1*50 на промежутке [0,T1]",ylab = "Стоимость составного опциона")
sigma1 <- 0.65 
abline(v=sigma1*50, lwd=2, col = 3, lty = 2)

## Волатильность на промежутке времени [T1,T2] ##

Cvalues <-c()
for (i in c(1:100))
{
  sigma2 <- i/50
  Hplus <- (log(V0/Vcrit)+r*tau1+1/2*sigma1^2*tau1)/sqrt(sigma1^2*tau1)
  Hminus <- Hplus - sqrt(sigma1^2*tau1)
  Lplus <- (log(V0/I2)+r*tau+1/2*(sigma1^2*tau1+sigma2^2*tau2))/sqrt(sigma1^2*tau1+sigma2^2*tau2)
  Lminus <- Lplus - sqrt(sigma1^2*tau1+sigma2^2*tau2)
  rho <- sqrt((sigma1^2*tau1)/(sigma1^2*tau1 + sigma2^2*tau2))
  Compound <- V0*pbivnorm(Hplus,Lplus,rho) - I2*e^(-r*tau)*pbivnorm(Hminus,Lminus,rho) -
    I1*e^(-r*tau1)*pnorm(Hminus)
  Cvalues[i]<- Compound
}
plot(Cvalues, type = "l", lwd =3,xlab = "Стандартное отклонение акции sigma2*50 на промежутке [T1,T2]",ylab = "Стоимость составного опциона")
sigma2 <- 0.53 
abline(v=sigma2*50, lwd=2, col = 3, lty = 2)

## Волатильность на обоих промежутках ##

Cvalue <- function (sigma1, sigma2)
{
  Hplus <- (log(V0/Vcrit)+r*tau1+1/2*sigma1^2*tau1)/sqrt(sigma1^2*tau1)
  Hminus <- Hplus - sqrt(sigma1^2*tau1)
  Lplus <- (log(V0/I2)+r*tau+1/2*(sigma1^2*tau1+sigma2^2*tau2))/sqrt(sigma1^2*tau1+sigma2^2*tau2)
  Lminus <- Lplus - sqrt(sigma1^2*tau1+sigma2^2*tau2)
  rho <- sqrt((sigma1^2*tau1)/(sigma1^2*tau1 + sigma2^2*tau2))
  Compound <- V0*pbivnorm(Hplus,Lplus,rho) - I2*e^(-r*tau)*pbivnorm(Hminus,Lminus,rho) -
    I1*e^(-r*tau1)*pnorm(Hminus)
  Compound <- max(0, Compound)
}

C.Matrix <- Matrix (ncol = 100, nrow = 100)
for (j in c(1:100))
{
for (i in c(1:100))
{
  C.Matrix[i,j]<- Cvalue(i/50,j/50)
}
}

levelplot(as.matrix(C.Matrix), xlim = c(1:dim(C.Matrix)[1]), ylim=c(1:dim(C.Matrix)[2]), xlab = "Стандартное отклонение акции sigma1*50 на промежутке [0,T1]",
          ylab = "Стандартное отклонение акции sigma2*50 на промежутке [T1,T2]", col = terrain.colors(100), main= "Стоимость составного опциона Cvalue")
sigma1 <- 0.65 
sigma2 <- 0.53 

#################################################


## Зависимость критического значения Vcrit от dолатильность на промежутке времени [T1,T2] ##

Vcritvalues <-c()
for (i in c(1:100))
{
  sigma2 <- i/50
  Optimize <- function(Vcrit)
  {
    lcritplus = (log(Vcrit/I2)+r*tau2+1/2*(sigma2^2*tau2))/sqrt(sigma2^2*tau2)
    lcritminus =  lcritplus - sqrt(sigma2^2*tau2)
    abs(V0*pnorm(lcritplus) - I2*e^(-r*tau2)*pnorm(lcritminus)-I1)
  }
  Vcritvalues [i] <- optim_nm(Optimize, k=1, s=1)$par
}


plot(Vcritvalues, type = "l", lwd =3,xlab = "Стандартное отклонение акции sigma2*50 на промежутке [T1,T2]",ylab = "Критического значения Vcrit стоимости пакета акций")
sigma2 <- 0.53 
abline(v=sigma2*50, lwd=2, col = 3, lty = 2)


#######################################################

This snippet took 0.01 seconds to highlight.

Back to the Entry List or Home.

Delete this entry (admin only).