Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Approximate European option price under SABR model #8

Open
cyrilchim opened this issue Sep 11, 2019 · 21 comments
Open

Approximate European option price under SABR model #8

cyrilchim opened this issue Sep 11, 2019 · 21 comments
Labels
good first issue Good for newcomers

Comments

@cyrilchim
Copy link
Contributor

SABR model has accurate density approximations (see, e.g., here). It is of interest to use the approximations to estimate European option prices.

The module implementing this method should live under tf_quant_finance/volatility/sabr_approximation.py. It should support both European puts and calls approximations. Tests should be in sabr_approximation_test.py in the same folder.

@cyrilchim cyrilchim added the good first issue Good for newcomers label Sep 11, 2019
@joybh98
Copy link

joybh98 commented Sep 12, 2019

Can I work on this issue?

@cyrilchim cyrilchim assigned cyrilchim and joybh98 and unassigned cyrilchim Sep 12, 2019
@cyrilchim
Copy link
Contributor Author

Hi Joy!

Thanks for your interest! I've assigned the issue to you. Please follow Google Python and TensorFlow Probability Style Guides. Will update with the internal one once it is published.

In case you are new to TensorFlow, we have create a training you might find useful

As a guidance, please familiarize yourself with option_price and binary_price implementations so that it is easier for you to get started.

Please reach out if you have any issues.

@joybh98
Copy link

joybh98 commented Sep 13, 2019

Sure, will do.

@saxena-ashish-g
Copy link
Contributor

@joybh98

Hi Joy, Are you still working on this issue? If you aren't could you please let us know?

-Ashish

@joybh98
Copy link

joybh98 commented Jun 2, 2020

@saxena-ashish-g I'm not working on this issue. Whoever wants to take this please go ahead.

@Rish001
Copy link

Rish001 commented Jul 24, 2020

@cyrilchim I didnt come across any folder named volatility under tf_quant_finance. Can you please point me to the file?

@cyrilchim
Copy link
Contributor Author

@Rish001 It has been refactored. This has to go to models/sabr/approximations/european_option.py (similarly to heston structure)

@Rish001
Copy link

Rish001 commented Jul 26, 2020

Do you want this approximation of SABR model to be implemented?

image

@cyrilchim
Copy link
Contributor Author

Yes, Rishav, that is the approximation. One could use it for calibration purposes as described in the paper

@Rish001
Copy link

Rish001 commented Jul 30, 2020

What are the possible test cases that my implementation needs to be tested against?

@cyrilchim
Copy link
Contributor Author

cyrilchim commented Jul 31, 2020 via email

@Rish001
Copy link

Rish001 commented Aug 1, 2020

How are these integrations working? are these integrations nested in one inside the other?
image
It would help me if you can give me a clue how this integral would look like for tenor T2 and beyond.
And, from where can I obtain the value of B(t,T_N)?
And, while numerically evaluating the integral how should I set up the grid? the domain of integration is (0,infinity)^2
source : Wu

Also, in the same paper, data has been collected in the following manner:

image
and model has been calibrated in the following manner:

image

summary statistics of data:

image

and that of residuals errors of model calibration:

image

my question is, for the purpose of calibration, are volatility values of two option tenors say 3M(10.81,10.22,...) and 6M(10.99,10.32...) are being considered?
if so, then what are the option tenors T1 and T2 that are mentioned in residual error summary?

@cyrilchim
Copy link
Contributor Author

@Rish001 The approximation p(t, ... ) is the forward transition density of the SABR process. Computing option prices could be done by creating a uniform grid of points in (F, A) space and computing the average in the formula (2.6) from the original paper. B is a zero-coupon bond price which is a standard notion. In case of a constant interest rate r it is a discount factor exp(-r * (T - t)). (see, e.g., here)

I think the best way to get started is to implement the approximation first. It seems that the original paper is self-contained in terms of notations.

By the time this is implemented, we will have the SABR model in the module and you will be able to use Monte Carlo method to get option prices and get your implementation tested. Does this sound good?

@Rish001
Copy link

Rish001 commented Aug 17, 2020

As the mentioned integral is unbounded, I think Monte Carlo integration is to be applied. Do you think there is any other way to compute the integral?

@Rish001
Copy link

Rish001 commented Aug 21, 2020

@cyrilchim I have built a minimal viable code for determining option price for option tenor T1. But i am encountering overflow error which I am unable to remove. I would really appreciate it if you can provide me some helpful direction.
image
Please find the link to code in google colab

@cyrilchim
Copy link
Contributor Author

@Rish001 Could you please give me access to the colab? As for the integration boundaries, make them function arguments and give them some sensible values for the tests. We will figure out appropriate default values later (e.g., based on the analytical approximations to implied vol)

@Rish001
Copy link

Rish001 commented Aug 21, 2020

@cyrilchim I have given the access. Please check it out

@cyrilchim
Copy link
Contributor Author

cyrilchim commented Aug 21, 2020

@Rish001 You need to write unit tests for the functions. There is clearly a bug somewhere as it seems your values overflow. At this point this is not a TF problem but this is an issue with the numpy code you have written. Try rerunning monte carlo with fewer iterations and maybe use pdb tool to debug the code (see colab usage here)

@Rish001
Copy link

Rish001 commented Sep 11, 2020

Just to leave you an update. I have mostly finished debugging and will be submitting shortly

@Rish001
Copy link

Rish001 commented Dec 7, 2020

@cyrilchim could you give me a set of test cases to test my implementation against? I need a number of combinations of alpha, beta,rho, nu,forwards,strikes and time to maturity and corresponding implied volatility values so that I can test my SABR implied vol calculation

@cyrilchim
Copy link
Contributor Author

cyrilchim commented Dec 10, 2020

Hi Rishav,

We do not have explicit tests but you should be able to use current SABR model to sample trajectories and estimate European option price (put or call). Your approximation should give similar results. For parameters use similar values to what we have in tests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

4 participants