Skip to content

Option pricing, basic question

8 messages · Adam Ginensky, Oleg Mubarakshin, thp +2 more

thp
#
Hello,

I have a question regarding option pricing. In advance:
thank you for the patience.

I am trying to replay the calculation of plain
vanilla option prices using the Black-Scholes model
(the one leading to the analytic solution seen for
example on the wikipedia page [1]).

Using numerical values as simply obtained from
an arbitrary broker, I am surprised to see that
the formula values and quoted prices mismatch
a lot. (seems cannot all be explained by spread
or dividend details)

My question: What values for r (drift) and \sigma^2
are usually to be used, in which units?

If numerical values are chosen to be given "per year",
then I would expect r to be chosen as \ln(1+i),
where i is the yearly interest rate of the risk-free
portfolio and \ln is the natural logarithm. Would the
risk-free rate currently be chosen as zero?

The \sigma^2 one would accordingly have to choose
as the variance of the underlying security over
a one year period. Should this come out equal in
numerical value to the implied volatility, which is
0.2 to 0.4 for the majority of options?

Tom

[1] https://de.wikipedia.org/wiki/Black-Scholes-Modell
#
I use the 3-month constant maturity Treasury bill rate from FRED (Federal
Reserve Economic ??Database??) for the risk-free rate. For options with
substantially more than 3 months until expiration, I think it makes sense to
use a maturity that best matches the option. The R code I use is:

library(quantmod)
library(chron)


##
## Get DGS3MO Treasury yield from FRED
##

getSymbols('DGS3MO',src='FRED')
DGS3MO<-na.locf(DGS3MO/100.0,na.rm = TRUE)
tail(DGS3MO)
file_name <- "DGS3MO.csv"
write.zoo(DGS3MO, file = file_name, append = FALSE, quote = TRUE, sep = ",")
quit()

I run this text from a batch file in Windows 7 Pro 64-bit. The text in the
batch file is:

REM on Microsoft Windows (adjust the path to R.exe as needed) 
DEL *DGS3MO.csv

"C:\Program Files\R\R-3.2.2\bin\x64\R.exe" CMD BATCH
"C:\Users\Frank\Documents\R\Projects\DGS3MO\DGS3MO.txt"
"C:\Users\Frank\Documents\R\Projects\DGS3MO\DGS3MO.out"
COPY DGS3MO.BAT DGS3MO.BAK
COPY DGS3MO.TXT DGS3MO.TXT.BAK
REM PAUSE

You say "r (drift)". Interest rates do move around despite the constant
interest rate assumption of the Black-Scholes model. This could be
characterized as drift. I'm not sure why else drift is in this post.
Correcting for interest rate drift has not mattered in calculations I've
made.

Volatility is also assumed constant in Black-Scholes. Volatility does drift
and this is the core problem with fitting market data to the standard
Black-Scholes model. Correctly correcting for drift might give you a better
fit to market data. 

Best,

Frank
Chicago, IL

-----Original Message-----
From: R-SIG-Finance [mailto:r-sig-finance-bounces at r-project.org] On Behalf
Of thp
Sent: Thursday, June 09, 2016 1:03 AM
To: r-sig-finance at r-project.org
Subject: [R-SIG-Finance] Option pricing, basic question

Hello,

I have a question regarding option pricing. In advance:
thank you for the patience.

I am trying to replay the calculation of plain
vanilla option prices using the Black-Scholes model
(the one leading to the analytic solution seen for
example on the wikipedia page [1]).

Using numerical values as simply obtained from
an arbitrary broker, I am surprised to see that
the formula values and quoted prices mismatch
a lot. (seems cannot all be explained by spread
or dividend details)

My question: What values for r (drift) and \sigma^2
are usually to be used, in which units?

If numerical values are chosen to be given "per year",
then I would expect r to be chosen as \ln(1+i),
where i is the yearly interest rate of the risk-free
portfolio and \ln is the natural logarithm. Would the
risk-free rate currently be chosen as zero?

The \sigma^2 one would accordingly have to choose
as the variance of the underlying security over
a one year period. Should this come out equal in
numerical value to the implied volatility, which is
0.2 to 0.4 for the majority of options?

Tom

[1] https://de.wikipedia.org/wiki/Black-Scholes-Modell

_______________________________________________
R-SIG-Finance at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions
should go.
#
The comments below address the issue of drift and \sigma .  As for the
interest rate used, I think you will find that the difference in the
values obtained by using different interest rates is on the order of
magnitude of rounding error.

There is a famous quote of Box - " All models are wrong, some are
useful ".  This applies to Black-Scholes in spades.  The B-S model is
almost universally  used to price options, but there are a number of
important caveats about using B-S to price options. I would summarize
my comment by  saying that the  volatility of the underlying is merely
a guideline as to what volatility to use in pricing options.  For at
the money options, the implied volatility ( the \sigma that will give
the value of the option) is a market consensus of what volatility will
be going forward.  In times of high volatility, the implied volatility
will always be lower (and I say always in an informed, not theoretical
way) than the realized volatility and similarly in times of low
volatility the implied volatility will typically be higher than
realized volatility - both situations reflecting 'regression to the
mean' nature of market movement. When I was an active floor trader,
this was called 'tilt' by many people. I would sum this up by saying
that the implied volatility is the market consensus as to what
realized volatility will be going forward.
As another exercise, get the prices of relatively short term options
mid-day on the Friday before a 3 day weekend.  The implied volatility
will typically seem absurdly low but will seem reasonable if the
volatility is computed with the date being 3 days forward. That is the
implied volatility will 'price in' the three day weekend .  This is
also true for most ordinary weekends.  Further, this is just a piece
of the issue.  The Black-Scholes model  significantly underprices out
of the money options.  This is because the real world distribution of
log returns has 'fat tails'.
Finally, there is no such thing as 'the volatility'.  For a given
option class, implied volatility is usually different at every strike.
This is in fundamental contradiction to the assumptions of B-S, but
reflects the reality of what happens in the real world.  For stocks,
volatility of out of the money puts is almost always higher than the
volatility for out of the money calls.  This reflects the fact that
markets usually go down faster than they go up as well as the reality
that people usually want insurance against stock prices going down,
not insurance against stock prices going up.  This volatility curve is
dynamic.  As the market goes higher, the difference between the
volatility of out of the money puts and the volatility of out of the
money calls will usually increase.  When the market goes back down,
the volatility difference usually decreases.
The point is that modeling implied volatility is a complicated and not
well understood item.  hth.
On Thu, Jun 9, 2016 at 1:02 AM, thp <thp at 2pimail.com> wrote:
#
Hi Tom!

I hope you do not try to get option prices with using vol calculated from 
underlying (so called realized or historical vol).
BSM model is a model based on GBM, that we do not see in the real markets of 
course.
Real markets express skew and fat tails in log-return distributions, that 
leads to vol skew and higher implied vol of deep OTM options.

For modeling of option prices often use:
1. Stochastic vol models
2. Local vol models
3. Stochastic local vol models

these models is constructed for catch the effects described by me above.

I hope it will help you!

Kind regards,
Oleg Mubarakshin

-----???????? ?????????----- 
From: thp
Sent: Thursday, June 09, 2016 9:02 AM
To: r-sig-finance at r-project.org
Subject: [R-SIG-Finance] Option pricing, basic question

Hello,

I have a question regarding option pricing. In advance:
thank you for the patience.

I am trying to replay the calculation of plain
vanilla option prices using the Black-Scholes model
(the one leading to the analytic solution seen for
example on the wikipedia page [1]).

Using numerical values as simply obtained from
an arbitrary broker, I am surprised to see that
the formula values and quoted prices mismatch
a lot. (seems cannot all be explained by spread
or dividend details)

My question: What values for r (drift) and \sigma^2
are usually to be used, in which units?

If numerical values are chosen to be given "per year",
then I would expect r to be chosen as \ln(1+i),
where i is the yearly interest rate of the risk-free
portfolio and \ln is the natural logarithm. Would the
risk-free rate currently be chosen as zero?

The \sigma^2 one would accordingly have to choose
as the variance of the underlying security over
a one year period. Should this come out equal in
numerical value to the implied volatility, which is
0.2 to 0.4 for the majority of options?

Tom

[1] https://de.wikipedia.org/wiki/Black-Scholes-Modell

_______________________________________________
R-SIG-Finance at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions 
should go.
thp
#
Hello to all,

I noticed that indeed my questions are not truly specific to R. 
Nevertheless the code in Frank's post
was guiding to FRED which contributes to answers.

With "drift" I mistakenly meant "risk-free rate"; properly one refers to 
"drift" when meaning the overall movement of the _underlying_.

Tom
On 2016-06-09 15:42, Frank wrote:
#
Tom,

If you get some options data up for analysis, you might want to try 0
interest first and then DGS3MO second. Using DGS3MO should produce a lower
variance between the settlement and the B-S prices.

The CBOE sells market data for $3 per month per symbol. The data is
voluminous and is best loaded into a database where you can query a relevant
subset of data. For instance, all the DEC 2016 SPY Call options that have
greater than 0 volume and open interest and are out-of-the-money.

Best,

Frank
Chicago

-----Original Message-----
From: R-SIG-Finance [mailto:r-sig-finance-bounces at r-project.org] On Behalf
Of thp
Sent: Thursday, June 09, 2016 11:27 AM
To: r-sig-finance at r-project.org
Subject: Re: [R-SIG-Finance] Option pricing, basic question

Hello to all,

I noticed that indeed my questions are not truly specific to R. 
Nevertheless the code in Frank's post
was guiding to FRED which contributes to answers.

With "drift" I mistakenly meant "risk-free rate"; properly one refers to 
"drift" when meaning the overall movement of the _underlying_.

Tom
On 2016-06-09 15:42, Frank wrote:
_______________________________________________
R-SIG-Finance at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions
should go.
6 days later
thp
#
Hello Frank / all,

the getSymbols() code written down before in relation to my option 
pricing question (see citation below)
somehow did not work with me. I got

     library(quantmod)


Version 0.4-0 included new data defaults. See ?getSymbols.
Warning messages:
1: package .quantmod. was built under R version 2.14.2
2: package .Defaults. was built under R version 2.14.2


     getSymbols('DGS3MO', verbose=TRUE,src='FRED')


     As of 0.4-0, .getSymbols. uses env=parent.frame() and
  auto.assign=TRUE by default.

   ...

trying URL 
'http://research.stlouisfed.org/fred2/series/DGS3MO/downloaddata/DGS3MO.csv'
Error in download.file(paste(FRED.URL, "/", Symbols[[i]], "/", 
"downloaddata/",  :
   cannot open URL 
'http://research.stlouisfed.org/fred2/series/DGS3MO/downloaddata/DGS3MO.csv'


This is even though I could download the data at the specified url 
manually.

~Tom
On 2016-06-09 15:42, Frank wrote:
#
On Thu, Jun 16, 2016 at 9:45 AM, thp <thp at 2pimail.com> wrote:
This has been fixed for almost a year.  You need to upgrade.
https://github.com/joshuaulrich/quantmod/issues/56