언어/R
R BlackSholes
newlibra
2025. 2. 19. 22:20
BlackScholes <- function(TypeFlag=c("c", "p"), S, X, Time, r, b, sigma)
{
# Check Type Flag:
TypeFlag = TypeFlag[1]
# Compute d1 and d2:
d1 = ( log(S/X) + (b+sigma*sigma/2)*Time ) / (sigma*sqrt(Time))
d2 = d1 - sigma*sqrt(Time)
# Compute Option Price:
if (TypeFlag == "c")
price = S*exp((b-r)*Time)*pnorm(d1) - X*exp(-r*Time)*pnorm(d2)
else if (TypeFlag == "p")
price = X*exp(-r*Time)*pnorm(-d2) - S*exp((b-r)*Time)*pnorm(-d1)
# Save Parameters:
param <- list(TypeFlag=TypeFlag, S=S, X=X, Time=Time, r=r, b=b, sigma=sigma)
ans <- list(parameters=param, price=price, option = "Black Scholes")
class(ans) <- c("option", "list")
# Return Value:
ans
}
print.option <- function(x, ...)
{
# Parameters:
cat("\nOption:\n ")
cat(x$option, "\n\n")
# Parameters:
cat("Parameters:\n")
Parameter = x$parameters
Names = names(Parameter)
Parameter = cbind(as.character(Parameter))
rownames(Parameter) = Names
colnames(Parameter) = "Value:"
print(Parameter, quote = FALSE)
# Price:
cat("\nOption Price:\n")
cat(x$price, "\n")
# Return Value:
invisible()
}
S = 100 - 2 * exp(-0.1 * 0.25) - 2 * exp(-0.1 * 0.5)
r = 0.1
BlackScholes("c", S = S, X = 90, Time = 0.75, r = r, b = r, sigma = 0.25)
r = 0.1
q = 0.05
BlackScholes("p", S = 100, X = 95, Time = 0.5, r = r, b = r-q, sigma = 0.2)
FuturesPrice = 19
b = 0
BlackScholes("c", S = FuturesPrice, X = 19, Time = 0.75, r = 0.1, b = b, sigma = 0.28)
r = 0.06
rf = 0.08
BlackScholes("c", S = 1.56, X = 1.6, Time = 0.5, r = r, b = r-rf, sigma = 0.12)