One of the core financial applications of derivatives pricing theory is to be able to manage risk via a liquid options market. Such a market provides the capability for firms and individuals to tailor their risk exposure depending upon their hedging or speculation requirements. In order to effectively assess such risks, it is necessary to calculate the sensitivity of an options price to the factors that affect it, such as the underlying asset price, volatility and time to option expiry.
The common sensitivities of interest include:. Since all of the sensitivities are commonly denoted by letters of the Greek alphabet except Vega! In this chapter we will calculate the Greeks using three separate methods. In the first instance we will utilise formula derived directly from the analytic formulae for European vanilla call and put options on a single asset. This will provide us with a baseline to determine the accuracy of subsequent numerical methods.
The first numerical approach utilised will be based on a Finite Difference Method FDM and the original analytical formulae. The latter approach is readily applicable to a wider range of contingent claims as it is not dependent upon the existence of an analytic solution.
The formulae of the Greeks for a European vanilla call and put option on a single asset are tabulated below:.
It also includes a basic Monte Carlo pricer, which is taken from this article. We are now going to compare the analytical prices with those derived from a Finite Difference Method. In this section we are going to apply the same technique, namely the discretisation of the partial derivatives, to create a simple approximation to the Greek sensitivities with which we can compare to the analytical solution.
The essence of the method is that we will approximate the partial derivative representing the particular sensitivity of interest.
To do this we make use of the analytical formulae for the Black-Scholes prices of the call and puts. These formulae are covered in this article. As an example, let's assume we want to calculate the Delta of a call option.
Each of the additional first order sensitivities Vega, Rho and Theta can be calculated in this manner by simply incrementing the correct parameter dimension. Gamma on the other hand is a second order derivative and so must be approximated in a different way.
The usual approach in FDM is to use a central difference approximation to produce the following formula:. At this stage we will keep the code procedural as we wish to emphasise the mathematical formulae.
For the sake of brevity we will restrict ourselves to the calculation of the call Delta and Gamma, as the remaining sensitivities are similar:.During writing my previous post about fraud detection with logistic regression with TensorFlow and gradient descent methods I had the idea to use TensorFlow for the pricing of path dependent exotic options. TensorFlow uses automatic algorithmic differentitation AD to calculate the gradients of the computational graph.
In Theory the automatic differentiation should be a bit times slower than a single pricing but the cost should be independent on the number of greeks we calculate. Monte Carlo Simulations can benefit of AD a lot, when each pricing is computational costly simulation and we have many risk drivers, the calculation of greeks become very challenging.
Imagine a interest rate derivate and we want to calculate the delta and gamma and mixed gammas for each pillar on the yield curve, if we use bump-and-revaluate to calculate the greeks we need many revaluations.
For simplicty we focus on equity options in a Black-Scholes model world since I want to focus on the numerical implementation in TensorFLow. All options in this post are Calls.
You will need TensorFlow 1. Lets start with a plain vanilla Call. Let me give a brief introduction into options for the non-quant readers, if you familiar with options skip this part and go directly to the implementation.
A call gives us the right to buy a unit of a underlying e. So the value the Call at option maturity is. Its very easy to calculate the price of the option at maturity but we are more interested into the todays price before maturity. Black, Scholes and Merton had a very great idea how to solve this problem Nobel prize worth ideaand come up with a closed pricing formula.
We will first implement the closed formula and then implement the pricing with a Monte Carlo Simulation. Not for all kind of options and models we have analytical formula to get the price. A very generic method to price options is the Monte-Carlo Simulation.
Depending on the underlying stochastic process for the underyling in the model we need numerical approximations for the paths. John C. We lets assume the current stock price isthe strike is and maturity is in 2 years from now. The todays price is 9. Now lets implement the same pricing formula in TensorFLow. We use the concept of a function closure. The outer function constructs the static TensorFow graph, and the inner function which we return let us feed in our parameters into the graph and execute it and return the results.
We get the price and all first and 2nd order greeks. The code runs roughly 2. We calculated 30 different greeks and one npv, so for a bump and revaluation we would need 31 times the time for one pricing. But its easy to implement and reduce maybe developing time.
Forecasting Stock Prices with a Monte Carlo Simulation
In the Black Scholes model the underlying price follows a geometric Brownian motion and we now the distribution of the prices in the futures given the current price, the risk free interest rate and the implied volatiliy of the underlying.
So we are able to sample future prices directly. The function will return the operator to calculate the random price paths and the placeholder we need to feed in our parameter. We assume we need to calculate the prices at equidistant points of time. The column of the random matrix dw defines the number of time on each path and the rows the numbers of different paths.Monte Carlo simulation is one of the most important algorithms in finance and numerical science in general.
Its importance stems from the fact that it is quite powerful when it comes to option pricing or risk management problems. In comparison to other numerical methods, the Monte Carlo method can easily cope with high-dimensional problems where the complexity and computational demand, respectively, generally increase in a linear fashion. The downside of the Monte Carlo method is that it is computationally demanding and often needs huge amounts of memory even for quite simple problems.
In this article, we are going to implement a Monte Carlo simulation using pure Python code. We decided to use Python since it is very popular among the Machine Learning community and it increases its popularity in the Finance community. The example that follows illustrates different implementation strategies in Python and offers three different implementation approaches for a Monte Carlo-based valuation of a European option.
The examples are based on the model economy of Black-Scholes-Merton, where the risky underlying stock price or index level follows, under risk neutrality, a geometric Brownian motion with a stochastic differential equation SDE.
Formula 1: Black-Scholes-Merton stochastic differential equation. Formula 2: Black-Scholes-Merton option pricing formula. Image 1: Black-Scholes-Merton option pricing formula parameters.
This is our benchmark value for the Monte Carlo estimators to follow. To implement a Monte Carlo valuation of the European call option, the following recipe can be applied:. Sum up the inner values, average, and discount them back with the riskless short rate according to Formula 4. As you can see the program took almost 37 seconds and predicted value equal to around 8 which is really close to our benchmark.
Note that the estimated option value itself depends on the pseudorandom numbers generated while the time needed is influenced by the hardware the script is executed on. This is the output if we generate numbers. There are more efficient and ways to predict the value of the option that we are going to discuss in some of the upcoming posts. Python is one of the most popular languages in the world since it has easy to understand syntax and has tons of powerful libraries for application development and Artificial Intelligence Machine Learning, Deep Learning, Computer Vision, NLP, Reinforcement Learning, etc.
Getting this popularity, it makes the language to be the number one choice in many other fields where Information Technology is making its way, like finance, medicine, etc. We hope you will find this helpful especially if you are working in finance and you have not programming experience.
Previous Next. View Larger Image. Also, we have a new private Facebook group where we are going to share some materials that are not going to be published online and will be available for our members only. The members will have early access to every new post we make and share your thoughts, tips, articles and questions. Become part of our private Facebook group now. Formula 3: Euler discretization of the SDE. Copy to Clipboard. Facebook Comments. Like this: Like Loading About the Author: Filip Projcheski.
In the finance industry, the decision is typically related to an investment. When combined, all of the separate trials create a probability distribution or risk assessment for a given investment or event. Monte Carlo analysis is a kind of multivariate modeling technique. All multivariate models can be thought of as complex illustrations of "what if? Some of the best-known multivariate models are those used to value stock options.
Research analysts use them to forecast investment outcomes, to understand the possibilities surrounding their investment exposures, and to better mitigate their risks. When investors use the Monte Carlo method, the results are compared to various levels of risk tolerance.
This can help stakeholders decide whether or not to proceed with an investment. Multivariate models—like the Monte Carlo model—are popular statistical tools that use multiple variables to forecast possible outcomes. When employing a multivariate model, a user changes the value of multiple variables to ascertain their potential impact on the decision that is being evaluated.
Many different types of professions use multivariate models. Financial analysts may use multivariate models to estimate cash flows and new product ideas. Portfolio managers and financial advisors use them to determine the impact of investments on portfolio performance and risk. Insurance companies use them to estimate the potential for claims and to price policies.
The Monte Carlo model is named after the geographic location, Monte Carlo technically an administrative area of the Principality of Monacothat has been made famous by its proliferation of casinos.
With games of chance—like those that are played at casinos—all the possible outcomes and probabilities are known. However, with most investments the set of future outcomes is unknown. It's up to the analyst to determine the outcomes as well as the probability that they will occur. In Monte Carlo modeling, the analyst runs multiple trials sometimes even thousands of them to determine all the possible outcomes and the probability that they will occur.
Monte Carlo analysis is useful because many investment and business decisions are made on the basis of one outcome.PyTorch offers similar to TensorFlow auto-gradients, also known as algorithmic differentiation, but the programming style is quite different to TensorFlow. First we will look into analytical pricing of plain vanilla options and compare a pure Numpy versus a PyTorch and the previous TensorFlow implementation before we implement the Monte-Carlo Simulation in PyTorch.
Maturtiy: 1 year Spot : Strike : Volatility: And as expected its super fast. No surprises here. Next we will implement the same formula in PyTorch.
Finance with Python: Monte Carlo Simulation (The Backbone of DeepMind’s AlphaGo Algorithm)
There are only minimal code changes compared to the numpy version required. In the actual pricing function we just need to replace np with torch and exchange the cdf function to use the PyTorch one and we have to convert our input into torch. Seems the PyTorch version is even faster as the pure numpy version. How can we use the auto-grad function in PyTorch to get the greeks? We just need to call the. Its almost 2.
A naive finite-difference approximation would costs us at least 6 calculations and would be only an numerical approximation. The 2nd order greeks are a bit tricky and not so straight-forward. We need to create a computational graph of the gradient. We use the function.
And can then call the backward method on it. Using the same code as in the original notebook but I removed the calculation of the 2nd order greeks. There is a bit of overhead for constructing the computational graph. We are roughly factor times slower in TensorFlow. Maybe my implementation is just bad. Any feedback how to improve it would be very appreciated.
So if anyone has already some pricing routines in Python using Numpy it seems to be much easier to port them to PyTorch instead to TensorFlow.
Maturtiy: 2 year Spot : Strike : Volatility: And again the PyTorch implementation looks very familiar. We have to replace the random number generator and replace the numpy functions with torch functions. There are two cumberstones, there is no equivalent to np. First time users need to request the GPU usage first, the approval takes usually less than 1 day.
You can follow the tutorial here: View at Medium.Previously we introduced the concept of Monte Carlo simulationsand how to build a basic model that can be sampled stochastically.Monte Carlo Financial Calculations in Excel VBA
We're now going to expand on our modelling and show how these simulations can be applied to some financial concepts. An option is a contract that gives the buyer the right to buy or sell an asset at a particular price, at a point in the future. These contracts, known as derivatives, are traded for a number of reasons, but a common usage is to hedge away exposure to an asset's price moving in an undesirable way.
The option, the right to buy or sell, has a price too. The Black Scholes model describes one way of determining a fair price for an option, but there are also many other methods for determining a price. A European style option can only be used or exercised once the option has reached a predetermined date in the future, known as its expiry date.
A call option gives the holder of the option the right to buy at a known price. Similarly, a put option is the right to sell an asset. A put makes money when the asset is below the strike price at maturity, otherwise it's worth nothing. Below are the payoff graphs of a put and a call at maturity.
Our asset price is the x-axis and the payoff is the y-axis.
Pricing options using Monte Carlo simulations
To price an option using a Monte Carlo simulation we use a risk-neutral valuation, where the fair value for a derivative is the expected value of its future payoff. Under the risk-neutral valuation we assume that underlying asset is going to earn, on average, the risk-free interest rate.
By averaging all of the pay offs, we're provided with a value for our expectation of the payoff. The model of stock price behaviour used in the Black Scholes model assumes that we have a known volatility, we have a risk-free interest rate, and that the price of an asset follows a geometric Brownian motion.
A geometric Brownian motion is a random process where the logarithm of the random variable follows a normal distribution. This type of process distributes prices over a lognormal distribution. To price an option in this simulation we: generate many prices that the asset might be at maturity, calculate option payoffs for each of those generated prices, average them, and then discount the final value. Before creating a full simulation, we'll go through a small example of 10 runs.
The more simulations we perform, the more accurate the price. Now we can see how the simulation generates a price, let's build up a small python script that can price an option and see if it matches the real world. Let's look at an option on Vodafone.January 18, By Grace Quigley-Kupfer. Monte Carlo simulation uses random sampling and statistical modelling to estimate mathematical functions and mimic the operations of complex systems [i]. It was first developed by mathematician Stanislaw Ulam [ii] and in modern day it is frequently used in decision making processes in a wide range of fields from energy to finance to engineering and more.
It helps traders understand the probability of different outcomes so that they can make an informed decision. The method uses a random number from 0 to 1 which represents a probability on how your portfolio might do in the first year, second year so on. Then it re-randomises again and goes through the same process over and over. Of all of the thousands or hundreds of models that are run, a trader will look at the percentage of outcomes that were successful.
Overall, it simulates many potential outcomes, provides the trader with the probability of success and helps measure the robustness of a trading system.
Drift is the direction rates of return have been headed in the past and the random value represents volatility. Put simply… r is the return of the asset price between yesterday and today. In this equation, r is unknown so the first step is to use Brownian motion to model r.
In physics, Brownian motion is a process used to describe random movement [iii] and in finance, it is used to model randomness. There are two parts to random movement — a deterministic component and a random stochastic component [iv].
These two components combine to create the observed movement. Brownian motion has been applied to the price of an asset because it is said that price follows a continuous Brownian motion. To model r, we use drift and the random component which represents volatility. The Brownian motion is:. First you need drift. This is the direction rates of return have been headed in the past. Drift is calculated by taking the average daily return minus half of the variance this is the expected daily return of the instrument we are trading.