[R-SIG-Finance] Option valuation for arbitrary distribution using monte carlo simulation
Joachim Breit
jbreit at nexgo.de
Fri Dec 23 15:59:23 CET 2011
I gave it a try. See the (ugly) code below. Comments are welcome. There
are still a few issues to solve:
- How can one do the Monte Carlo simulation faster/more efficient?
- Can somebody explain Winston's daily risk free rate?
- Is there a better optimization algorithm for the utility function than
genoud?
----------------------------------------------
library("fImport")
library('fOptions')
library("rgenoud")
msft =
yahooImport(query="MSFT&a=00&b=4&c=1999&d=03&e=9&f=1999&ignore=.csv",file =
"msft", source = "http://ichart.finance.yahoo.com/table.csv?", save = TRUE)
cl = msft at data[,"Close"] ### unadjusted close prices
cl[10:67] = cl[10:67]/2 ### a 2:1 split on 1999-03-29
ret = cl[1:66] /cl[2:67] - 1 ### the returns
logret = log(1+ret) ### log returns
vola = sd(logret) * sqrt(252) ### 0.4091751
bsm = GBSOption(TypeFlag = "p", S = 90, X = 80, Time = 63/252, r =
log(1+0.08), b = log(1+0.08), sigma = vola)@price #### 2.577398 (just
to compare)
rf = .000317 ## don't know where this comes from in Winston's paper;
## should be 1.08^(1/252)-1 = 0.0003054476, right?
meanutil <- function (alpha) {
x = log(alpha * (1 + ret) + (1 - alpha) * (1 + rf)) ### portf. utility
x[which(is.nan(x))] = -100000 ### correct for ln(x<0) undefined
x = mean(x)
return(x)
}
optalpha = genoud(meanutil, nvars = 1, max = TRUE, pop.size = 1000)$par
### the optimal portfolio under utility function ln(x)
portret = optalpha * (1 + ret) + (1 - optalpha) * (1 + rf)
## the optimal portfolio returns (in the sense of: daily end wealth)
num = (1 / length(ret)) * (1 / portret)
rnprob = num/sum(num) ### the risk neutral probabilities
ov=0 #### monte carlo simulation
for (i in 1:100000) {
ov[i] = max(80 - 90 * prod(1+ sample(ret, size=63, replace = TRUE, prob
= rnprob)), 0 )
}
mov = 1/1.08^(63/252) * mean(ov) ### 2.512722 = option value
Am 25.11.2011 09:48, schrieb Charles Ward:
> Luenberger discusses the task of creating risk-neutral probabilities
> from any set of observed returns. I cannot find the specific reference
> in his book (Investment Science) but there is a discussion paper by
> Winston (google) that applies his method using Excel and @Risk to a
> sample of Microsoft returns. I think it would be relatively simple to
> program it in R.
>
> Charles Ward
More information about the R-SIG-Finance
mailing list