Skip to content

Instantly share code, notes, and snippets.

Created January 2, 2016 01:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/41bc651094b728b1f181 to your computer and use it in GitHub Desktop.
Save anonymous/41bc651094b728b1f181 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "Binomial Trees"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": "The Binomial Model\n=========================\n\nYou have discussed the *Binomial Tree Model* in class and can even compute simple examples with pen and paper. This lecture will generalize the binomial method to arbitrary lengths of time period, etc. I have provided a simple example in an Excel Spreadsheet to get the gist of what we are doing. This works well for relatively simple models, but for more complicated examples, switching to a more sophisticated language is useful. However, in the beginning it is useful to have an example we know the answer to for computation. Let's start with our import statements."
},
{
"cell_type": "code",
"collapsed": false,
"input": "import numpy as np\nfrom matplotlib import pyplot as plt\n%matplotlib inline",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": "A Simple Example\n------------------\n\nThe example that I compute in the Excel Spreadsheet is a 4 step, multiplicative binomial tree for a European Call Option. However, since there are no dividends, the same model could apply to an American Call as these will never be exercised early.\n\nExogenous Parameters:\n\n- The length of time to expiration: $T = 1$\n- The initial stock price: $S = \\$100$\n- The strike price: $K = \\$100$\n- The risk free rate: $r = 0.06$\n- The number of time steps: $N = 3$\n- The up proportion: $u = 1.1$\n- The down proportion: $d = 0.9091$\n\nEndogenous Parameters:\n\n- The time step: $\\Delta t = \\frac{T}{N}$\n- The risk neutral probability: $p = \\frac{e^{r \\Delta t} - d}{u-d}$\n- The discount factor: $e^{-r\\Delta t}$\n\nThe first step is to enter the computational parameters and compute the endogenous ones before proceeding."
},
{
"cell_type": "code",
"collapsed": false,
"input": "#Exogenous Parameters - note how I am careful to include decimal places for real numbers.\nT, S, K, r, N, u, d = 1.0, 100.0, 100.0, .06, 3, 1.1, .9091\n\ndt = T / N\ndisc = np.exp(-r * dt)\np = (np.exp(r * dt) - d) / (u - d)\n\nprint 'The exogenous parameters: dt, disc, p'\nprint dt, disc, p",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "The exogenous parameters: dt, disc, p\n0.333333333333 0.980198673307 0.581987113812\n"
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": "The computational parameters match those in our Excel example, which is a good first step. Now solving for the $t = 0$ price involves solving for the asset price and call price at all nodes on the tree, subject to the boundary condition. Lets first calculate the stock value at the $4$ grid points at the end of time. "
},
{
"cell_type": "code",
"collapsed": false,
"input": "St = np.zeros(N + 1)\nSt[0] = S * d ** N\n\nfor j in range(1, N+1):\n St[j] = St[j-1] * u / d\n\n# Check that the end values for the stock price are correct\nprint St",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "[ 75.13373406 90.9109091 110.0011 133.1 ]\n"
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Next we want to calculate the value of the option at the end of time."
},
{
"cell_type": "code",
"collapsed": false,
"input": "C = np.zeros(N + 1)\n\nfor j in range(N + 1):\n C[j] = max(0,St[j] - K)\n\n#Check that the end values for the call price value are correct\nprint C",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "[ 0. 0. 10.0011 33.1 ]\n"
}
],
"prompt_number": 20
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now we want to step back through the tree to find the value at time $0$. This is an inherently recursive procedure. Therefore, we don't store all of the grid points, just those from the first period in the future."
},
{
"cell_type": "code",
"collapsed": false,
"input": "C = np.zeros(N + 1)\n\nfor j in range(N + 1):\n C[j] = max(0,St[j] - K)\n\nfor i in range(N):\n k = N - i - 1\n for j in range(k+1):\n C[j] = disc * (p * C[j+1] + (1- p) * C[j])\nprint 'The price of the option is:', C[0]",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "The price of the option is: 10.1454621546\n"
}
],
"prompt_number": 34
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now what if we wanted to change some of the key parameters? This can be made easier by setting up our Call Option Pricing Example as a function. This can be done as follows:\n"
},
{
"cell_type": "code",
"collapsed": false,
"input": "def CallPrice(T = 1.0, S = 100.0, K = 100.0, r = 0.06, N = 3, u = 1.1, d =.9091):\n dt = T / N\n disc = np.exp(-r * dt)\n p = (np.exp(r * dt) - d) / (u - d)\n St = np.zeros(N + 1)\n C = np.zeros(N + 1)\n St[0] = S * d ** N\n \n for j in range(1, N+1):\n St[j] = St[j-1] * u / d\n \n for j in range(N + 1):\n C[j] = max(0,St[j] - K)\n \n for i in range(N):\n k = N - i - 1\n for j in range(k+1):\n C[j] = disc * (p * C[j+1] + (1- p) * C[j])\n \n return C[0], dt, p, disc\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": "C = CallPrice()[0]\nC",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": "10.145462154644788"
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": "C0, dt, p, disc = CallPrice()\n\nprint 'The Call Price is: ', C0\nprint 'The risk neutral probability is:', p",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "The Call Price is: 10.1454621546\nThe risk neutral probability is: 0.581987113812\n"
}
],
"prompt_number": 54
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Notice how I have initialised the parameters for our example. This means that I don't need to provide arguments to the function, it will just use the defaults. However, if we want to check that the example is stable as the grid size is increased we can set $N = 100$"
},
{
"cell_type": "code",
"collapsed": false,
"input": "C0, dt, p, disc = CallPrice(N = 100)\nprint 'The Call price is: ', C0\nprint 'The step size is: ', dt\nprint 'The risk neutral probability is:', p",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "The Call price is: 38.453570645\nThe step size is: 0.01\nThe risk neutral probability is: 0.479309481592\n"
}
],
"prompt_number": 58
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Notice that the call price changes a lot as we change the grid size. This method turns out to be unstable. Therefore, we need to be a little more careful about how we alter the step size. It turns out that when we alter the step size we also must alter the up and down jumps and the risk neutral probability accordingly. There are four methods proposed in **Clemlow and Strickland**. Each of these methods takes as given the risk neutral mean of the process ($\\nu = r - \\frac{1}{2}\\sigma^2$) and the risk neutral variance, $\\sigma^2$. The problem arises from the fact that these two parameters are needed to tie down $u, d, p$ leading to overidentification. We therefore require additional assumptions to pin down the parameter values. The four methods below use different assumptions.\n\n- Cox, Ross and Rubenstein\n\nIn this method we set $p = \\frac{1}{2}$ and then find:\n$$ u = e^{(r - \\frac{1}{2}\\sigma^2)\\Delta t + \\sigma \\sqrt{\\Delta t}} \\qquad d = e^{(r - \\frac{1}{2}\\sigma^2)\\Delta t - \\sigma \\sqrt{\\Delta t}} $$\n\n- Jarrow and Rudd\n\nIn this method we set $u = -d = e^{\\sigma \\sqrt{\\Delta t}}$ and $p = \\frac{1}{2} + \\frac{r - \\frac{1}{2}\\sigma^2}{2\\sigma}\\sqrt{\\Delta t}$.\n\n- Equal Probabilities/Additive\n\nThe second two methods employ an additive binomial tree structure. Previously we have assumed a multiplicative one. With an additive structure the natural logarithm of $S$, which we denote $x$ changes to $x + \\Delta x_u$ with probability $p_u$. This leads to the following two equations in three unknowns:\n\n$$\\mathbb{E}[\\Delta x] = p \\Delta x_u + (1-p)\\Delta x_d = \\nu \\Delta t $$\n$$\\mathbb{E}[\\Delta x^2] = p \\Delta x_u^2 + (1-p)\\Delta x_d ^2 = \\sigma^2 \\Delta t + \\nu^2 \\Delta t^2 $$\n\nWhere $\\nu = r - \\frac{1}{2} \\sigma^2$ as before. We once again can set $p = \\frac{1}{2}$ to find:\n$$\\Delta x_u = \\frac{1}{2}\\nu\\Delta t + \\frac{1}{2}\\sqrt{4\\sigma^2\\Delta t - 3 \\nu^2 \\Delta t^2}$$\n$$\\Delta x_d = \\frac{3}{2}\\nu\\Delta t - \\frac{1}{2}\\sqrt{4\\sigma^2\\Delta t - 3 \\nu^2 \\Delta t^2}$$\n\n- Trigeorgis\n\nIn this method we use equal jump sizes like in the Jarrow and Rudd method. This leads to:\n\n$$\\Delta x = \\sqrt{\\sigma^2 \\Delta t + \\nu^2 \\Delta t^2} \\qquad p = \\frac{1}{2} + \\frac{\\nu \\Delta t}{2\\Delta x} $$\n\nI don't expect you guys to understand why these approximations make sense at this point. However, once you learn about **Geometric Brownian Motion** and its random walk approximation you may see where the math comes from. Note that the key problem with binomial trees is that we have to make additional assumptions to pin down either the probability or the step size. The finite difference methods we introduce later will solve this problem."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Example: Using the Trigeorgis Method to Price a European Call\n-----------------------------------------------------------------\n\n- $K = \\$100$\n- $T = 1$\n- $S = \\$100$\n- $\\sigma = 0.2$\n- $r = 0.06$\n- $N = 3$\n\nNotice that now we don't specify the up and down jumps. They are based on the parameter values. As well, we will start by computing a simple 3 period example and hope to scale it up to a finer grid. The idea is that this time the solution should be more stable for large $N$."
},
{
"cell_type": "code",
"collapsed": false,
"input": "def EuroCallPriceTrig(K = 100.0, T = 1.0, S = 100.0, sigma = 0.2, r = 0.06, N = 3):\n #Precompute constants\n dt = T/N\n nu = r - 0.5 * sigma ** 2\n dxu = np.sqrt(dt * sigma ** 2 + (nu * dt) ** 2)\n dxd = - dxu #symmetric jump sizes\n p = 0.5 + 0.5 * (nu * dt / dxu)\n disc = np.exp(-r * dt)\n \n St = np.zeros(N + 1)\n C = np.zeros(N + 1)\n \n #Initialize end of time Stock price\n St[0] = S * np.exp(N * dxd)\n for j in range(1,N+1):\n St[j] = St[j-1] * np.exp(dxu - dxd)\n \n #Initialize end of time call price - boundary condition\n for j in range(N + 1):\n C[j] = max(0, St[j] - K)\n \n #Step back through the tree\n for i in range(N):\n k = N - i - 1\n for j in range(k + 1):\n C[j] = disc * (p * C[j+1] + (1- p) * C[j])\n \n return C[0]\n",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Remember that before when we changed the grid size we saw large fluctuations in the price of the option. Lets do a test to confirm that this is a stable method."
},
{
"cell_type": "code",
"collapsed": false,
"input": "pricestrig = np.zeros(100)\nnrange = np.zeros(100)\n\nfor n in range(1,101):\n NN = 5 * n \n nrange[n-1] = NN\n pricestrig[n-1] = EuroCallPriceTrig(N = NN)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 117
},
{
"cell_type": "markdown",
"metadata": {},
"source": "We can also check the stability of the equal probabilities method."
},
{
"cell_type": "code",
"collapsed": false,
"input": "def EuroCallPriceEqP(K = 100.0, T = 1.0, S = 100.0, sigma = 0.2, r = 0.06, N = 3):\n #Precompute constants\n dt = T/N\n nu = r - 0.5 * sigma ** 2\n dxu = 0.5 * nu * dt + 0.5 * np.sqrt(4 * dt * sigma ** 2 - 3 * (nu*dt) **2) \n dxd = 1.5 * nu * dt - 0.5 * np.sqrt(4 * dt * sigma ** 2 - 3 * (nu*dt) **2) \n p = 0.5 \n disc = np.exp(-r * dt)\n \n St = np.zeros(N + 1)\n C = np.zeros(N + 1)\n \n #Initialize end of time Stock price\n St[0] = S * np.exp(N * dxd)\n for j in range(1,N+1):\n St[j] = St[j-1] * np.exp(dxu - dxd)\n \n #Initialize end of time call price - boundary condition\n for j in range(N + 1):\n C[j] = max(0, St[j] - K)\n \n #Step back through the tree\n for i in range(N):\n k = N - i - 1\n for j in range(k + 1):\n C[j] = disc * (p * C[j+1] + (1- p) * C[j])\n \n return C[0]\n\npriceseq = np.zeros(100)\nnrange = np.zeros(100)\n\nfor n in range(1,101):\n NN = 5 * n \n nrange[n-1] = NN\n priceseq[n-1] = EuroCallPriceEqP(N = NN)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 118
},
{
"cell_type": "code",
"collapsed": false,
"input": "plt.plot(nrange, pricestrig, 'b-', linewidth = 3, label ='Trigeorgis Method')\nplt.plot(nrange, priceseq, 'g-', linewidth = 3, label ='Equal Prob. Method')\nplt.xlabel('Number of Grid Points')\nplt.ylabel('Price of a European Call Option')\nplt.title('Stability of the Binomial Tree Method')\nplt.legend()\nplt.show()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nEqLyMQAAAABJRU5ErkJggg==\n",
"text": "<matplotlib.figure.Figure at 0x8bdedf0>"
}
],
"prompt_number": 119
},
{
"cell_type": "markdown",
"metadata": {},
"source": "As you can see, the price of the call settles down around $\\$11$ as the grid gets finer. As well, there are still minor fluctuations in the price, showing that the approximation is not exact. As I mentioned before, we will use finite difference methods to come up with a more stable solution. As well, note how handy it is to define a function for pricing this type of option. We can easily change the key parameters with minimal hassle. This is not the case in a program like Excel. Note how there seems to be some discrepancy between the two methods, even for fine grids. This is another reason to use more accurate methods as we should worry that the assumption we make regarding the free parameter is influencing our results. From now on we will use the **Trigeorgis Method** as it seems to settle down the quickest."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Computing the Greeks\n======================\n\nWe will now use our EuroCallTrig() function to determine the hedge sensitivities: \n\n- $$\\delta = \\frac{\\partial C}{\\partial S}$$\n\nFor a small enough time step, $\\Delta t$ we can use the one step ahead finite difference approximation:\n$$\\frac{\\partial C}{\\partial S} = \\frac{C_{1,1} - C_{1,0}}{S_{1,1}- S_{1,0}} $$\nThis will require saving the one step ahead values for $C$ and $S$. We can easily add this to our pricing function.\n\n- $$\\gamma = \\frac{\\partial^2 C}{\\partial S^2}$$\n\nFor the second partial derivative we can use the following formula:\n\n$$ \\frac{\\partial^2 C}{\\partial S^2} = \\frac{(C_{2,2} - C_{2,1})/(S_{2,2} - S_{2,1}) - (C_{2,1} - C_{2,0}) / (S_{2,1} - S_{2,0})}{\\frac{1}{2}(S_{2,2} - S_{2,0})}$$\nThis requires two step ahead information from our binomial tree, however, for small $\\Delta t$ this approximation should work well.\n\n\n- $$\\nu = \\frac{\\partial C}{\\partial \\sigma}$$\n\nFor the last two Greeks we can just use small perturbations of the option pricing function to approximate the derivatives:\n$$ \\frac{\\partial C}{\\partial \\sigma} = \\frac{C(\\sigma + \\Delta \\sigma) - C(\\sigma - \\Delta \\sigma)}{2 \\Delta \\sigma}$$\n\n- $$\\rho = \\frac{\\partial C}{\\partial r}$$\n\nLikewise:\n\n$$ \\frac{\\partial C}{\\partial r} = \\frac{C(r + \\Delta r) - C(r - \\Delta r)}{2 \\Delta r}$$\n\nThese are just central finite difference approximations to the derivative. \n\nLet's amend our pricing function to return $\\delta$ and $\\gamma$ as outputs as well."
},
{
"cell_type": "code",
"collapsed": false,
"input": "def EuroCallPriceTrig(K = 100.0, T = 1.0, S = 100.0, sigma = 0.2, r = 0.06, N = 3):\n #Precompute constants\n dt = T/N\n nu = r - 0.5 * sigma ** 2\n dxu = np.sqrt(dt * sigma ** 2 + (nu * dt) ** 2)\n dxd = - dxu #symmetric jump sizes\n p = 0.5 + 0.5 * (nu * dt / dxu)\n disc = np.exp(-r * dt)\n \n St = np.zeros(N + 1)\n C = np.zeros(N + 1)\n Cd = np.zeros(5)\n Sd = np.zeros(5)\n s = 0\n \n Sd[1] = np.exp(dxu) * S \n Sd[0] = np.exp(dxd) * S\n Sd[4] = np.exp(2 * dxu) * S\n Sd[3] = S\n Sd[2] = np.exp(2 * dxd) * S\n #Initialize end of time Stock price\n St[0] = S * np.exp(N * dxd)\n for j in range(1,N+1):\n St[j] = St[j-1] * np.exp(dxu - dxd)\n \n #Initialize end of time call price - boundary condition\n for j in range(N + 1):\n C[j] = max(0, St[j] - K)\n \n #Step back through the tree\n for i in range(N):\n k = N - i - 1\n for j in range(k + 1):\n C[j] = disc * (p * C[j+1] + (1- p) * C[j])\n if k == 2:\n gamma1 = (C[2] - C[1]) / (Sd[4] - Sd[3])\n gamma2 = (C[1] - C[0])/(Sd[3] - Sd[2]) \n gamma3 = .5 * (Sd[4] - Sd[2])\n gamma = (gamma1 - gamma2) / gamma3\n if k == 1:\n delta = (C[1] - C[0]) / (Sd[1] - Sd[0])\n \n return C[0], delta, gamma",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 30
},
{
"cell_type": "code",
"collapsed": false,
"input": "C, delta, gamma = EuroCallPriceTrig(N = 200)\nprint 'The Solution: Call Price, delta, gamma'\nprint C, delta, gamma\n\nsig = .2\ndsig = .0001 * sig\nsigmaplus = sig + dsig\nsigmamin = sig - dsig\n\nr = .06\ndr = r * .0001\nrplus = r + dr\nrmin = r - dr\n\nvega = (EuroCallPriceTrig(N=200, sigma = sigmaplus)[0] - EuroCallPriceTrig(N=200, sigma = sigmamin)[0]) / (dsig * 2.0)\nrho = (EuroCallPriceTrig(N=200, r = rplus)[0] - EuroCallPriceTrig(N=200, r = rmin)[0]) / (dr * 2.0)\nprint 'The Estimates of Vega and Rho are:'\nprint vega, rho",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "The Solution: Call Price, delta, gamma\n10.9800066195 0.655230638912 0.0184934321947\nThe Estimates of Vega and Rho are:"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n36.7683026989 54.5754665916\n"
}
],
"prompt_number": 46
},
{
"cell_type": "markdown",
"metadata": {},
"source": "An American Put Option: Adjusting for Early Exercise\n======================================================\n\nI am not going to write the function for the put option as this will be left as an exercise. However, I will discuss the key changes that occur.\n\n- The time $T$ payoffs are different: \n\n$$P_{N,j} = \\max\\{0, K - S_{N,j} \\} $$\n\n- We have to account for early exercise. Thus at time node $i < N we have that:\n\n$$ P_{n,j} = \\max \\{K - S_{n,j}, P_{n,j}\\}$$\n\nThese two simple modifications should allow you to complete the exercise listed below."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Dealing with Dividends\n=======================\n\nIt is very easy to incorporate a constant flow rate of dividends, $\\delta$, into the binomial model. We simply have to adjust the drift of the process, $\\nu = r - \\delta - \\frac{1}{2} \\sigma^2$ to account for the dividend payout. Once we make this simple correction the rest of the results carry through. We won't discuss this simple modification as it is relatively straightforward. But here is a European Call Price function which incorporates this feature:\n"
},
{
"cell_type": "code",
"collapsed": false,
"input": "def EuroCallPrice(K = 100.0, T = 1.0, S = 100.0, sigma = 0.2, r = 0.06, N = 3, delta = .02):\n #Precompute constants\n dt = T/N\n nu = r - delta - 0.5 * sigma ** 2\n dxu = np.sqrt(dt * sigma ** 2 + (nu * dt) ** 2)\n dxd = - dxu #symmetric jump sizes\n p = 0.5 + 0.5 * (nu * dt / dxu)\n disc = np.exp(-r * dt)\n \n St = np.zeros(N + 1)\n C = np.zeros(N + 1)\n Cd = np.zeros(5)\n Sd = np.zeros(5)\n s = 0\n \n Sd[1] = np.exp(dxu) * S \n Sd[0] = np.exp(dxd) * S\n Sd[4] = np.exp(2 * dxu) * S\n Sd[3] = S\n Sd[2] = np.exp(2 * dxd) * S\n #Initialize end of time Stock price\n St[0] = S * np.exp(N * dxd)\n for j in range(1,N+1):\n St[j] = St[j-1] * np.exp(dxu - dxd)\n \n #Initialize end of time call price - boundary condition\n for j in range(N + 1):\n C[j] = max(0, St[j] - K)\n \n #Step back through the tree\n for i in range(N):\n k = N - i - 1\n for j in range(k + 1):\n C[j] = disc * (p * C[j+1] + (1- p) * C[j])\n if k == 2:\n gamma1 = (C[2] - C[1]) / (Sd[4] - Sd[3])\n gamma2 = (C[1] - C[0])/(Sd[3] - Sd[2]) \n gamma3 = .5 * (Sd[4] - Sd[2])\n gamma = (gamma1 - gamma2) / gamma3\n if k == 1:\n delta = (C[1] - C[0]) / (Sd[1] - Sd[0])\n \n return C[0], delta, gamma\n\nC0 = EuroCallPrice(delta = 0.0, N = 200)[0]\nC1 = EuroCallPrice(delta = .02, N = 200)[0]\n\nprint 'The Euro Call Price with No dividends: ', C0\nprint 'The Euro Call Price with delta = .02: ', C1",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "The Euro Call Price with No dividends: 10.9800066195\nThe Euro Call Price with delta = .02: 9.71884531718\n"
}
],
"prompt_number": 48
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Adding dividends clearly reduces the price of the call. This is because a constant flow rate of dividends slows the growth of the stock price, lowering the likelihood of a high stock price at the exercise date. Thus, it is less likely the call will be exercised. Even if it is the payoff will be smaller on average, leading to a lower call price.\n\nIf the asset pays a known discrete proportional dividend at a known time in the future we can adjust the binomial tree to account for this. We will assume that the dividend date corresponds with a node on the tree. If the time is before the dividend date, $\\tau$, then the grid remains unchanged. However, the value of the stock at all days after $\\tau$ is $(1-\\hat{\\delta})S_{t,i}$, where $\\hat{\\delta}$ is the proportional dividend. Once we adjust the end of time stock price downwards by the dividend factor we can compute the tree as above. However, we had to make a lot of assumptions regarding the dividend (proportional, known date, known size). To accomodate more realistic dividend structures is complicated (and not discussed in **Clemlow and Strickland**. We will not further discuss dividends."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Time Varying Volatility\n========================\n\nA common requirement in practice is the incorporation of time varying volatility into a derivative pricing model. In order to price securities consistently we must make adjustments to the binomial tree model to account for time varying volatilities. However, for time varying volatilities it is probably best to use a more advanced method, such as finite differences.\n\nThe simplest way to adjust the binomial model for time varying volatility is to fix the space step and adjust the probabilities and the length of the time step. This ensures that the tree recombines. If we fix the space step as $\\Delta x$ and have a time varying volatility, $\\sigma_i$ for time step $i$, this leads to time varying risk neutral probabilities, time step and drifts:\n$$p_i \\Delta x - (1-p_i)\\Delta x = \\nu_i \\Delta t_i $$\n$$p_i \\Delta x^2 + (1-p_i)\\Delta x^2 = \\sigma_i^2\\Delta t_i + \\nu_i^2\\Delta t_i^2 $$\n$$\\nu_i = r - \\frac{1}{2}\\sigma_i^2$$\n\nSolving the above system for $\\nu_i, \\Delta t_i$ and $p_i$ for each time and for an appropriately chosen $\\Delta x$ leads to a time varying volatility version of the binomial method. A good choice of $\\Delta x$ is:\n$$\\Delta x = \\sqrt{\\bar{\\sigma}^2 \\Delta \\bar{t} + \\bar{\\nu}^2 \\Delta \\bar{t}^2} \\qquad\\mbox{Where:} \\;\\; \\bar{\\sigma} = \\frac{1}{N}\\sum_{i=1}^{N}\\sigma_i\\qquad \\bar{\\nu} = \\frac{1}{N}\\sum_{i=1}^{N}\\nu_i $$"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Exercise: Pricing an American Put\n==================================\n\n1. Write a function which uses the binomial method to price an American put option with the following parameters:\n\n\n- $K = 100$, $T = 1$, $N = 100$, $S = 100$, $r = .06$, $\\sigma = 0.2$\n\nYou can use either the Equal Probability or the Trigeorgis method. Report the price for $N = \\{100, 200, 300\\}$. Is the method convergent? Use your function to calculate vega. "
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment