Я пытаюсь создать свою собственную функцию в R на основе переменных черного Шоулза и решить «назад», я полагаю, для сигмы.
Я создал функцию для поиска цены звонка;однако теперь я должен найти сигма (подразумеваемую волатильность) оценки в R и затем проверить свою функцию, чтобы увидеть, работает ли она ... Я пробовал разные функции, но я не могу понять, что я делаю неправильно, частьЯ думаю, мне нужно знать сигму, чтобы найти сигму, но я не уверен, имеет ли это смысл.
Вот функция, которую я создал по цене европейского опциона в модели Блэка Шоулза:
call <- function(s0, K, r, T, sigma) {
d1 <- (log(s0/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sigma*sqrt(T
c <- s0*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
c
}
Я проверил свою функцию, чтобы увидеть, работает ли она правильно с другим кодом, который она делает:
call(100, 70, 0.05, 1, 0.16)
[1] 33.43686
call(300, 280, 0.03, 3, 0.18)
[1] 60.81694
call(400, 350, 0.04, 5, 0.20)
[1] 133.1626
Теперь мне нужно использовать следующую функцию для поиска сигмы:
sigma <- function(call, s0, K, r, T) {
???
}
После создания функции мне нужно проверить ее, используя следующее:
sigma(33.43686, 100, 70, 0.05, 1)
sigma(60.81694, 300, 280, 0.03, 3)
sigma(133.1626, 400, 350, 0.04, 5)
Тот же формат, но я не могу понять это.Мне нужно включить диапазон или последовательность, чтобы найти сигму?
Я пробовал это, но я не верю, что мы должны включить 'v' в функцию
sigma <- function(call, s0, K, r, T, v) {
d1 <- (log(s0/K) + (r + v^2/2)*T) / (v*sqrt(T))
d2 <- d1 - v*sqrt(T)
c <- s0*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
sigma_value <- d1 - d2 / sqrt(T)
sigma_value
}
sigma(33.43686, 100, 70, 0.05, 1, 0.16)
[1] 0.16
sigma(60.81694, 300, 280, 0.03, 3, 0.18)
[1] 0.4614232
sigma(133.1626, 400, 350, 0.04, 5, 0.20)
[1] 0.7358743
0.16"Сигма" Я пытаюсь найти приблизительную оценку, создавая свою собственную функцию.
Я также чувствую, что мои сигмы удалены, тогда они должны быть
Я также пытался:
sigma <- function(call, s0, K, r, T) {
v = seq(from = 0.1, to = .2, by = .01)
k.range = floor(seq(from = 100, to = 400, length.out = length(v)))
for (i in 1:length(v)) {
d1 <- (log(s0/K[i]) + (r + (v^2)/2) * T) / (v * sqrt(T))
d2 <- d1 - v * sqrt(T)
C <- s0 * pnorm(d1) - K[i] * exp(-r*T) * pnorm(d2) - call[i]
}
v
}
Любая помощь в аспекте функций будет отличной.Спасибо