Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/luphord/longstaff_schwartz
A Python implementation of the Longstaff-Schwartz linear regression algorithm for the evaluation of call rights an American options.
https://github.com/luphord/longstaff_schwartz
Last synced: 3 months ago
JSON representation
A Python implementation of the Longstaff-Schwartz linear regression algorithm for the evaluation of call rights an American options.
- Host: GitHub
- URL: https://github.com/luphord/longstaff_schwartz
- Owner: luphord
- License: mit
- Created: 2019-08-05T04:40:39.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-11-02T21:42:25.000Z (over 1 year ago)
- Last Synced: 2024-10-31T18:38:32.716Z (4 months ago)
- Language: Jupyter Notebook
- Size: 10.1 MB
- Stars: 38
- Watchers: 2
- Forks: 13
- Open Issues: 2
-
Metadata Files:
- Readme: README.rst
- Changelog: HISTORY.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
- Authors: AUTHORS.rst
Awesome Lists containing this project
README
============================
Longstaff-Schwartz Algorithm
============================.. image:: https://img.shields.io/pypi/v/longstaff_schwartz.svg
:target: https://pypi.python.org/pypi/longstaff_schwartz.. image:: https://github.com/luphord/longstaff_schwartz/actions/workflows/build-test.yml/badge.svg
:target: https://github.com/luphord/longstaff_schwartz/actions.. image:: https://readthedocs.org/projects/longstaff-schwartz/badge/?version=latest
:target: https://longstaff-schwartz.readthedocs.io/en/latest/?badge=latest
:alt: Documentation StatusA Python implementation of the Longstaff-Schwartz linear regression algorithm for the evaluation of call rights and American options.
* Seminal paper: **Francis A. Longstaff, Eduardo S. Schwartz**, *Valuing American Options by Simulation: A Simple Least-Squares Approach* (The Review of Financial Studies) (2001) Vol 14, No 1, pp. 113-147
* Documentation: https://longstaff-schwartz.readthedocs.io
* Free software: MIT licenseTalks
-----* PyConDE 2019-10-10: `Slides `__, `Jupyter Notebook `__
* PyData Meetup 2019-09-18: Slides_, `Jupyter Notebook`_.. _Slides: https://raw.githack.com/luphord/longstaff_schwartz/master/talks/talk_meetup_2019-09-18/index.html
.. _`Jupyter Notebook`: https://github.com/luphord/longstaff_schwartz/blob/master/talks/talk_meetup_2019-09-18/Notebook_Meetup_2019-09-18.ipynbUsage
-----.. code-block:: python
from longstaff_schwartz.algorithm import longstaff_schwartz
from longstaff_schwartz.stochastic_process import GeometricBrownianMotion
import numpy as np# Model parameters
t = np.linspace(0, 5, 100) # timegrid for simulation
r = 0.01 # riskless rate
sigma = 0.15 # annual volatility of underlying
n = 100 # number of simulated paths# Simulate the underlying
gbm = GeometricBrownianMotion(mu=r, sigma=sigma)
rnd = np.random.RandomState(1234)
x = gbm.simulate(t, n, rnd) # x.shape == (t.size, n)# Payoff (exercise) function
strike = 0.95def put_payoff(spot):
return np.maximum(strike - spot, 0.0)# Discount factor function
def constant_rate_df(t_from, t_to):
return np.exp(-r * (t_to - t_from))# Approximation of continuation value
def fit_quadratic(x, y):
return np.polynomial.Polynomial.fit(x, y, 2, rcond=None)# Selection of paths to consider for exercise
# (and continuation value approxmation)
def itm(payoff, spot):
return payoff > 0# Run valuation of American put option
npv_american = longstaff_schwartz(x, t, constant_rate_df,
fit_quadratic, put_payoff, itm)# European put option for comparison
npv_european = constant_rate_df(t[0], t[-1]) * put_payoff(x[-1]).mean()# Check results
assert np.round(npv_american, 4) == 0.0734
assert np.round(npv_european, 4) == 0.0626
assert npv_american > npv_europeanPlots
-----For details see `PyData Meetup Jupyter Notebook`_.
.. _`PyData Meetup Jupyter Notebook`: https://github.com/luphord/longstaff_schwartz/blob/master/talks/talk_meetup_2019-09-18/Notebook_Meetup_2019-09-18.ipynb
Approximation of continuation value
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~.. image:: docs/_static/approximated-continuation-and-exercise-value-1.svg
Favourable exercise
~~~~~~~~~~~~~~~~~~~.. image:: docs/_static/exercise-or-hold.svg
.. image:: docs/_static/first-exercises.svgCredits
-------Main developer is luphord_.
.. _luphord: https://github.com/luphord
Primary source for the algorithm is **Francis A. Longstaff, Eduardo S. Schwartz**, *Valuing American Options by Simulation: A Simple Least-Squares Approach* (The Review of Financial Studies) (2001) Vol 14, No 1, pp. 113-147.
There is no affiliation between the authors of the paper and this code.This package was prepared with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage