Pricing Analytics — American Options
Options form an important part of the portfolio of banks, financial institutions and investors. Traded on regulated Exchanges as well as the Over-the-Counter (OTC) market, they are popular derivative products which serve multiple purposes including: hedging, speculation or arbitraging.
Plain vanilla options are primarily classified as Call and Put options indicating the right to Buy/Sell a certain asset by the buyer of the option. Further, options are also classified based on the time to exercise as European and American.
· European options can be exercised only at maturity / option expiry
· American options can be exercised at anytime from trade date until and at maturity / option expiry
The volume of European options surpasses the volume of American options the market trades by a great degree. As a result, the liquidity of European options is higher leading to a better price discovery. The same may not be true for American options, as there are limited market participants trading these options comparatively. Market participants use sophisticated models for pricing of American options in order to MTM such options on their books on a daily basis.
In this article, we will the explore an approach for pricing of an American option and implement the methodology using Python programming.
American options pricing adds one additional level complexity over European options as we need to account for the probability of early exercise of an American option. Naturally, assuming all else equal, it would be safe to say that an American option is expensive vis-à-vis a European option owing to the added flexibility it provides to the option holder of exercising early.
In this post, we will use the Binomial Model and extend it to handle the probability of early exercise of American options. A quick recap of binomial model: starting from the time today (i.e., root node), we can have two possible prices which the underlying stock price can take in the next tree step. Thus, one root node takes us to two possible nodes on the next time step. This process continues for each node on the binomial tree until we reach the option maturity point.
For a European option, we need not worry about where the stock price is prior to maturity, however, for American options, that isn’t the case. For American options, one needs to keep track of stock price at every single node along the binomial tree. This is required for the model to compare the intrinsic value of the option vis-à-vis option price arrived at via backward induction from the binomial tree, at all the intermediate nodes of the binomial tree.
We will assume a hypothetical American option contract and build a model for pricing this option using Python.
Below are the steps for implementing this pricing model:
- Import the required libraries to be used for this implementation along with the required details pertaining to the option trade.
2) Option specific parameters
3) We describe handles for spot, rates, dividends and volatility. These are required for building the model process which will be used subsequently for the binomial pricer:
4) Creation of a function implementing the Binomial model
5) Telling the binomial model that it needs to handle an American option
6) Calling the method, and plotting the option price for different number of time steps in the binomial tree.
From the above plot, we observe that the model price converges as we go on increasing the number of steps in the tree. This validates the model working. We have priced an American Call option. The same model can be applied for pricing of an American Put option by changing one small portion of the code.
Python programming makes it very convenient to perform such pricing analytics tasks with ease. One need not build the model from scratch, but leverage the powerful libraries which Python provides for rapid prototyping of models. Further, Python supports visualization of results which is again accomplished through just a few additional lines of code. Personally, this is what I love about Python, as it allows us to put our core concepts into practice fairly easily, and with ease of Python coding, one can delve deeper into further understanding the core concepts rather than worry about complexities in programming.