{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "9551c4ae",
   "metadata": {},
   "source": [
    "---\n",
    "title: \"Pricing Derivatives Using Black-Scholes-Merton Model\"\n",
    "date: \"11/12/2023\"\n",
    "author: Rafiq Islam\n",
    "categories: [Programming, Finance, Financial Mathematics, Pricing, Hedging]\n",
    "citation: true\n",
    "search: true\n",
    "image: bsm.png\n",
    "lightbox: true\n",
    "listing: \n",
    "    contents: \"/../../posts\"\n",
    "    max-items: 3\n",
    "    type: grid\n",
    "    categories: true\n",
    "    date-format: full\n",
    "    fields: [image, date, title, author, reading-time]\n",
    "format: \n",
    "    html: default\n",
    "    ipynb: default\n",
    "    docx: \n",
    "      toc: true\n",
    "      adsense:\n",
    "        enable-ads: false\n",
    "    epub:\n",
    "      toc: true\n",
    "      adsense:\n",
    "        enable-ads: false\n",
    "    pdf: \n",
    "      toc: true\n",
    "      pdf-engine: pdflatex\n",
    "      adsense:\n",
    "        enable-ads: false\n",
    "      number-sections: false\n",
    "      colorlinks: true\n",
    "      cite-method: biblatex\n",
    "toc-depth: 4\n",
    "---   \n",
    "\n",
    "## Introduction\n",
    "\n",
    "In this blog, we will explore how to price simple equity derivatives using the Black-Scholes-Merton (BSM) model. We will derive the mathematical formula and then provide Python code to implement it.   \n",
    "\n",
    "### Background and Preliminaries  \n",
    "Before proceeding to the deep of the discussion, we need to know some definition and terminology \n",
    "\n",
    "<p style=\"text-align: justify\">\n",
    "**Brownian Motion:**  Brownian motion is a concept with definitions and applications across various disciplines, named after the botanist Robert Brown, is the random, erratic movement of particles suspended in a fluid (liquid or gas) due to their collisions with the fast-moving molecules of the fluid.</p>  \n",
    "\n",
    "*Brownian motion is a stochastic process $(B_t)_{t \\geq 0}$ defined as a continuous-time process with the following properties:*  \n",
    "\n",
    "- $B_0 = 0$ almost surely.\n",
    "- $B_t$ has independent increments.\n",
    "- For $t > s$, $B_t - B_s \\sim N(0, t-s)$ (normally distributed with mean 0 and variance $t-s$).\n",
    "- $B_t$ has continuous paths almost surely.  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cf03d9c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/pdf": "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NSAwIG9iago8PCAvVHlwZSAvRm9udCAvQmFzZUZvbnQgL0JNUVFEVitEZWphVnVTYW5zIC9GaXJzdENoYXIgMCAvTGFzdENoYXIgMjU1Ci9Gb250RGVzY3JpcHRvciAxNCAwIFIgL1N1YnR5cGUgL1R5cGUzIC9OYW1lIC9CTVFRRFYrRGVqYVZ1U2FucwovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Gb250TWF0cml4IFsgMC4wMDEgMCAwIDAuMDAxIDAgMCBdCi9DaGFyUHJvY3MgMTYgMCBSCi9FbmNvZGluZyA8PCAvVHlwZSAvRW5jb2RpbmcKL0RpZmZlcmVuY2VzIFsgMzIgL3NwYWNlIDQ2IC9wZXJpb2QgNDggL3plcm8gL29uZSAvdHdvIDUyIC9mb3VyIDU0IC9zaXggNTYgL2VpZ2h0IDU4Ci9jb2xvbiA2NiAvQiA3NyAvTSA4MCAvUCA4MyAvUyAvVCA5NyAvYSAxMDEgL2UgMTAzIC9nIC9oIC9pIDEwOCAvbCAvbSAvbiAvbwoxMTQgL3IgL3MgL3QgMTE5IC93IF0KPj4KL1dpZHRocyAxMyAwIFIgPj4KZW5kb2JqCjE0IDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0JNUVFEVitEZWphVnVTYW5zIC9GbGFncyAzMgovRm9udEJCb3ggWyAtMTAyMSAtNDYzIDE3OTQgMTIzMyBdIC9Bc2NlbnQgOTI5IC9EZXNjZW50IC0yMzYgL0NhcEhlaWdodCAwCi9YSGVpZ2h0IDAgL0l0YWxpY0FuZ2xlIDAgL1N0ZW1WIDAgL01heFdpZHRoIDEzNDIgPj4KZW5kb2JqCjEzIDAgb2JqClsgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAKNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCA2MDAgNjAwIDYwMCAzMTggNDAxIDQ2MCA4MzggNjM2Cjk1MCA3ODAgMjc1IDM5MCAzOTAgNTAwIDgzOCAzMTggMzYxIDMxOCAzMzcgNjM2IDYzNiA2MzYgNjM2IDYzNiA2MzYgNjM2IDYzNgo2MzYgNjM2IDMzNyAzMzcgODM4IDgzOCA4MzggNTMxIDEwMDAgNjg0IDY4NiA2OTggNzcwIDYzMiA1NzUgNzc1IDc1MiAyOTUKMjk1IDY1NiA1NTcgODYzIDc0OCA3ODcgNjAzIDc4NyA2OTUgNjM1IDYxMSA3MzIgNjg0IDk4OSA2ODUgNjExIDY4NSAzOTAgMzM3CjM5MCA4MzggNTAwIDUwMCA2MTMgNjM1IDU1MCA2MzUgNjE1IDM1MiA2MzUgNjM0IDI3OCAyNzggNTc5IDI3OCA5NzQgNjM0IDYxMgo2MzUgNjM1IDQxMSA1MjEgMzkyIDYzNCA1OTIgODE4IDU5MiA1OTIgNTI1IDYzNiAzMzcgNjM2IDgzOCA2MDAgNjM2IDYwMCAzMTgKMzUyIDUxOCAxMDAwIDUwMCA1MDAgNTAwIDEzNDIgNjM1IDQwMCAxMDcwIDYwMCA2ODUgNjAwIDYwMCAzMTggMzE4IDUxOCA1MTgKNTkwIDUwMCAxMDAwIDUwMCAxMDAwIDUyMSA0MDAgMTAyMyA2MDAgNTI1IDYxMSAzMTggNDAxIDYzNiA2MzYgNjM2IDYzNiAzMzcKNTAwIDUwMCAxMDAwIDQ3MSA2MTIgODM4IDM2MSAxMDAwIDUwMCA1MDAgODM4IDQwMSA0MDEgNTAwIDYzNiA2MzYgMzE4IDUwMAo0MDEgNDcxIDYxMiA5NjkgOTY5IDk2OSA1MzEgNjg0IDY4NCA2ODQgNjg0IDY4NCA2ODQgOTc0IDY5OCA2MzIgNjMyIDYzMiA2MzIKMjk1IDI5NSAyOTUgMjk1IDc3NSA3NDggNzg3IDc4NyA3ODcgNzg3IDc4NyA4MzggNzg3IDczMiA3MzIgNzMyIDczMiA2MTEgNjA1CjYzMCA2MTMgNjEzIDYxMyA2MTMgNjEzIDYxMyA5ODIgNTUwIDYxNSA2MTUgNjE1IDYxNSAyNzggMjc4IDI3OCAyNzggNjEyIDYzNAo2MTIgNjEyIDYxMiA2MTIgNjEyIDgzOCA2MTIgNjM0IDYzNCA2MzQgNjM0IDU5MiA2MzUgNTkyIF0KZW5kb2JqCjE2IDAgb2JqCjw8IC9CIDE3IDAgUiAvTSAxOCAwIFIgL1AgMTkgMCBSIC9TIDIwIDAgUiAvVCAyMSAwIFIgL2EgMjIgMCBSCi9jb2xvbiAyMyAwIFIgL2UgMjQgMCBSIC9laWdodCAyNSAwIFIgL2ZvdXIgMjYgMCBSIC9nIDI3IDAgUiAvaCAyOCAwIFIKL2kgMjkgMCBSIC9sIDMwIDAgUiAvbSAzMSAwIFIgL24gMzMgMCBSIC9vIDM0IDAgUiAvb25lIDM1IDAgUgovcGVyaW9kIDM2IDAgUiAvciAzNyAwIFIgL3MgMzggMCBSIC9zaXggMzkgMCBSIC9zcGFjZSA0MCAwIFIgL3QgNDEgMCBSCi90d28gNDIgMCBSIC93IDQzIDAgUiAvemVybyA0NCAwIFIgPj4KZW5kb2JqCjMgMCBvYmoKPDwgL0YxIDE1IDAgUiA+PgplbmRvYmoKNCAwIG9iago8PCAvQTEgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMCAvY2EgMSA+PgovQTIgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMSAvY2EgMSA+PgovQTMgPDwgL1R5cGUgL0V4dEdTdGF0ZSAvQ0EgMC44IC9jYSAwLjggPj4KL0E0IDw8IC9UeXBlIC9FeHRHU3RhdGUgL0NBIDAuNSAvY2EgMSA+PiA+PgplbmRvYmoKNSAwIG9iago8PCA+PgplbmRvYmoKNiAwIG9iago8PCA+PgplbmRvYmoKNyAwIG9iago8PCAvRjEtRGVqYVZ1U2Fucy1taW51cyAzMiAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsgMTEgMCBSIF0gL0NvdW50IDEgPj4KZW5kb2JqCjQ1IDAgb2JqCjw8IC9DcmVhdG9yIChNYXRwbG90bGliIHYzLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcpCi9Qcm9kdWNlciAoTWF0cGxvdGxpYiBwZGYgYmFja2VuZCB2My4xMC41KQovQ3JlYXRpb25EYXRlIChEOjIwMjUwODEzMTgwMDM4WikgPj4KZW5kb2JqCnhyZWYKMCA0NgowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTYgMDAwMDAgbiAKMDAwMDAyODQ1OSAwMDAwMCBuIAowMDAwMDI4MTUzIDAwMDAwIG4gCjAwMDAwMjgxODUgMDAwMDAgbiAKMDAwMDAyODM2OCAwMDAwMCBuIAowMDAwMDI4Mzg5IDAwMDAwIG4gCjAwMDAwMjg0MTAgMDAwMDAgbiAKMDAwMDAwMDA2NSAwMDAwMCBuIAowMDAwMDAwMzQzIDAwMDAwIG4gCjAwMDAwMTg5ODAgMDAwMDAgbiAKMDAwMDAwMDIwOCAwMDAwMCBuIAowMDAwMDE4OTU4IDAwMDAwIG4gCjAwMDAwMjY3NzkgMDAwMDAgbiAKMDAwMDAyNjU3MiAwMDAwMCBuIAowMDAwMDI2MDk5IDAwMDAwIG4gCjAwMDAwMjc4MzIgMDAwMDAgbiAKMDAwMDAxOTAwMCAwMDAwMCBuIAowMDAwMDE5MzM3IDAwMDAwIG4gCjAwMDAwMTk0OTkgMDAwMDAgbiAKMDAwMDAxOTc0MiAwMDAwMCBuIAowMDAwMDIwMTU2IDAwMDAwIG4gCjAwMDAwMjAyOTQgMDAwMDAgbiAKMDAwMDAyMDY3NCAwMDAwMCBuIAowMDAwMDIwODE5IDAwMDAwIG4gCjAwMDAwMjExNDEgMDAwMDAgbiAKMDAwMDAyMTYwOSAwMDAwMCBuIAowMDAwMDIxNzc1IDAwMDAwIG4gCjAwMDAwMjIxODkgMDAwMDAgbiAKMDAwMDAyMjQyNiAwMDAwMCBuIAowMDAwMDIyNTcwIDAwMDAwIG4gCjAwMDAwMjI2ODkgMDAwMDAgbiAKMDAwMDAyMzAyMCAwMDAwMCBuIAowMDAwMDIzMTkyIDAwMDAwIG4gCjAwMDAwMjM0MjggMDAwMDAgbiAKMDAwMDAyMzcxOSAwMDAwMCBuIAowMDAwMDIzODc0IDAwMDAwIG4gCjAwMDAwMjM5OTcgMDAwMDAgbiAKMDAwMDAyNDIzMCAwMDAwMCBuIAowMDAwMDI0NjM3IDAwMDAwIG4gCjAwMDAwMjUwMzAgMDAwMDAgbiAKMDAwMDAyNTEyMCAwMDAwMCBuIAowMDAwMDI1MzI2IDAwMDAwIG4gCjAwMDAwMjU2NTAgMDAwMDAgbiAKMDAwMDAyNTgxMSAwMDAwMCBuIAowMDAwMDI4NTE5IDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgNDYgL1Jvb3QgMSAwIFIgL0luZm8gNDUgMCBSID4+CnN0YXJ0eHJlZgoyODY3MgolJUVPRgo=",
      "text/plain": [
       "<Figure size 2370x1170 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#| code-fold: true\n",
    "from mywebstyle import plot_style\n",
    "plot_style('#f4f4f4')\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Parameters\n",
    "n_steps = 100  # Number of steps\n",
    "n_paths = 20   # Number of paths\n",
    "time_horizon = 1  # Total time\n",
    "dt = time_horizon / n_steps  # Time step\n",
    "t = np.linspace(0, time_horizon, n_steps)  # Time array\n",
    "\n",
    "# Generate Brownian motion\n",
    "def generate_brownian_paths(n_paths, n_steps, dt):\n",
    "    # Standard normal increments scaled by sqrt(dt)\n",
    "    increments = np.random.normal(0, np.sqrt(dt), (n_paths, n_steps))\n",
    "    # Cumulative sum to generate paths\n",
    "    return np.cumsum(increments, axis=1)\n",
    "\n",
    "# Generate one path and multiple paths\n",
    "single_path = generate_brownian_paths(1, n_steps, dt)[0]\n",
    "multiple_paths = generate_brownian_paths(n_paths, n_steps, dt)\n",
    "\n",
    "# Plotting\n",
    "fig, axes = plt.subplots(1, 2, figsize=(7.9, 3.9))\n",
    "\n",
    "# Single path\n",
    "axes[0].plot(t, single_path, label=\"Single Path\")\n",
    "axes[0].set_title(\"Brownian Motion: Single Path\")\n",
    "axes[0].set_xlabel(\"Time\")\n",
    "axes[0].set_ylabel(\"Position\")\n",
    "axes[0].legend()\n",
    "\n",
    "# Multiple paths\n",
    "for path in multiple_paths:\n",
    "    axes[1].plot(t, path, alpha=0.5, linewidth=0.8)\n",
    "axes[1].set_title(f\"Brownian Motion: {n_paths} Paths\")\n",
    "axes[1].set_xlabel(\"Time\")\n",
    "axes[1].set_ylabel(\"Position\")\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79688b11",
   "metadata": {},
   "source": [
    "**Geometric Brownian Motion (GBM)**  \n",
    "A stochastic process $S_t$ is said to follow a geometric Brownian motion if it satisfies the following equation:  \n",
    "$$\n",
    "dS_t = \\mu S_t dt+\\sigma S_t dB_t\n",
    "$$  \n",
    "\n",
    "Which can be written as  \n",
    "$$\n",
    "S_t - S_0 =\\int_0^t \\mu S_u du + \\int_0^t \\sigma S_u dB_u\n",
    "$$  \n",
    "\n",
    "To solve the GBM, we apply Ito's formula to the function $Z_t = f(t, S_t)= \\ln(S_t)$ and then by Taylor's expansion, we have \n",
    "\n",
    "\\begin{align*}\n",
    "df & = \\frac{\\partial f}{\\partial t}dt+ \\frac{\\partial f}{\\partial s}dS_t + \\frac{1}{2} \\frac{\\partial ^2f}{\\partial s^2}(dS_t)^2+\\frac{1}{2}\\frac{\\partial ^2f}{\\partial s^2}(dt)^2+\\frac{\\partial^2 f}{\\partial t\\partial s}dtdS_t\n",
    "\\end{align*}  \n",
    "\n",
    "By definition we have \n",
    "\\begin{align*}\n",
    "dS_t &= \\mu S_t dt+\\sigma S_t dB_t\\\\\n",
    "(dS_t)^2 & = \\mu^2 (dt)^2+2\\mu \\sigma dt dB_t + \\sigma^2 (dB_t)^2\n",
    "\\end{align*}  \n",
    "\n",
    "The term $(dt)^2$ is negligible compared to the term $dt$ and it is also assume that the product $dtdB_t$ is negligible. Furthermore, the quadratic variation of $B_t$ i.e., $(dB_t)^2= dt$. With these values, we obtain \n",
    "\n",
    "\\begin{align*}\n",
    "dZ_t & = \\frac{1}{S_t} dS_t + \\frac{1}{2} \\left\\{-\\frac{1}{S_t^2}\\right\\}[dS_t]^2\\\\\n",
    "& =  \\frac{1}{S_t} (\\mu S_t dt+\\sigma S_t dB_t) + \\frac{1}{2} \\left\\{-\\frac{1}{S_t^2}\\right\\}\\sigma^2S_t^2dt\\\\\n",
    "\\implies dZ_t &= (\\mu dt +\\sigma dB_t) -\\frac{1}{2}\\sigma^2 dt\\\\\n",
    "& = \\left(\\mu-\\frac{1}{2}\\sigma^2\\right)dt+\\sigma dB_t\n",
    "\\end{align*}  \n",
    "\n",
    "with $Z_0=\\ln S_0$. Now we have the following  \n",
    "\\begin{align*}\n",
    "\\int_0^t dZ_s &= \\int_0^t \\left(\\mu-\\frac{1}{2}\\sigma^2\\right)ds + \\int_0^t\\sigma dB_s\\\\\n",
    "\\implies Z_t - Z_0 &= \\left(\\mu-\\frac{1}{2}\\sigma^2\\right)t + \\sigma B_t\\\\\n",
    "\\implies \\ln S_t - \\ln S_0&= \\left(\\mu-\\frac{1}{2}\\sigma^2\\right)t + \\sigma B_t\\\\\n",
    "\\implies \\ln \\left(\\frac{S_t}{S_0}\\right) &= \\left(\\mu-\\frac{1}{2}\\sigma^2\\right)t + \\sigma B_t\\\\\n",
    "\\implies S_t &= S_0 \\exp{\\left\\{\\left(\\mu-\\frac{1}{2}\\sigma^2\\right)t + \\sigma B_t\\right\\}}\n",
    "\\end{align*}\n",
    "\n",
    "## Black-Scholes-Merton Formula  \n",
    "\n",
    "Now we are ready to derive the BSM PDE. The payoff of an *option* $V(S,T)$ at maturity is is known. To find the value at an earlier stage, we need to know how V behaves as a function of $S$ and $t$. By Ito's lemma we have \n",
    "\\begin{align*}\n",
    "dV& = \\left(\\mu S\\frac{\\partial V}{\\partial S}+\\frac{\\partial V}{\\partial t}+\\frac{1}{2}\\sigma^2S^2\\frac{\\partial^2 V}{\\partial S^2}\\right)dt+\\sigma S\\frac{\\partial V}{\\partial S}dB.\n",
    "\\end{align*}  \n",
    "\n",
    "Now let's consider a portfolio consisting of a short one option and long $\\frac{\\partial V}{\\partial S}$ shares at time $t$. The value of this portfolio is \n",
    "\n",
    "$$\n",
    "\\Pi = -V+\\frac{\\partial V}{\\partial S}S\n",
    "$$  \n",
    "\n",
    "over the time $[t,t+\\Delta t]$, the total profit or loss from the changes in the values of the portfolio is \n",
    "$$\n",
    "\\Delta \\Pi = -\\Delta V + \\frac{\\partial V}{\\partial S}\\Delta S\n",
    "$$  \n",
    "\n",
    "Now by the discretization we have, \n",
    "\\begin{align*}\n",
    "\\Delta S &= \\mu S \\Delta t +\\sigma S \\Delta B\\\\\n",
    "\\Delta V & = \\left(\\mu S\\frac{\\partial V}{\\partial S}+\\frac{\\partial V}{\\partial t}+\\frac{1}{2}\\sigma^2S^2\\frac{\\partial^2 V}{\\partial S^2}\\right)\\Delta t+\\sigma S\\frac{\\partial V}{\\partial S}\\Delta B\\\\\n",
    "\\implies \\Delta \\Pi  & = \\left(-\\frac{\\partial V}{\\partial t} -\\frac{1}{2}\\sigma^2S^2\\frac{\\partial^2 V}{\\partial S^2}\\right)\\Delta t\n",
    "\\end{align*}\n",
    "\n",
    "At this point, if $r$ is the risk-free interest rate then we will have following relationship \n",
    "$$\n",
    "r\\Pi \\Delta t = \\Delta \\Pi \n",
    "$$ \n",
    "\n",
    "The rationale of this relation is that no-aribtrage assumption. Thus, we have  \n",
    "\\begin{align*}\n",
    "\\left(-\\frac{\\partial V}{\\partial t} -\\frac{1}{2}\\sigma^2S^2\\frac{\\partial^2 V}{\\partial S^2}\\right)\\Delta t & = r \\left(- V + \\frac{\\partial V}{\\partial S} S\\right)\\Delta t \\\\\n",
    "\\implies \\frac{\\partial V}{\\partial t} + \\frac{1}{2} \\sigma^2 S^2 \\frac{\\partial^2 V}{\\partial S^2} + rS \\frac{\\partial V}{\\partial S} -rV &=0\n",
    "\\end{align*}  \n",
    "\n",
    "This is the famous Black-Scholes-Merton PDF, formally written with the boundary conditions as follows  \n",
    "\n",
    "\\begin{align*}\n",
    "\\frac{\\partial c}{\\partial t} + \\frac{1}{2} \\sigma^2 c^2 \\frac{\\partial^2 c}{\\partial S^2} + rc \\frac{\\partial c}{\\partial S} -rc &=0\\\\\n",
    "c(0,t) &= 0\\\\ \n",
    "c(S_{+\\infty}, t) &= S - Ke^{-r(T-t)}\\\\\n",
    "c(S,T) & = max\\{S-K,0\\}\n",
    "\\end{align*}  \n",
    "\n",
    "This Black-Scholes-Merton PDE can be reduced to the heat equation using the substitutions $S = K e^x$, $t = T - \\frac{\\tau}{\\frac{1}{2} \\sigma^2}$, and $c(S, t) = K v(x, \\tau)$. Let’s derive the solution step by step in full mathematical detail and show how this leads to the normal CDF.\n",
    "\n",
    "#### Step 1: Substitutions\n",
    "We aim to reduce the BSM PDE:\n",
    "$$\n",
    "\\frac{\\partial c}{\\partial t} + \\frac{1}{2} \\sigma^2 S^2 \\frac{\\partial^2 c}{\\partial S^2} + r S \\frac{\\partial c}{\\partial S} - r c = 0\n",
    "$$\n",
    "\n",
    "to the heat equation. Using the substitutions:\n",
    "\n",
    "- $S = K e^x$, where $x = \\ln(S / K)$, and $S \\in (0, \\infty)$ maps $x \\in (-\\infty, \\infty)$,\n",
    "- $t = T - \\frac{\\tau}{\\frac{1}{2} \\sigma^2}$, so $\\tau = \\frac{1}{2} \\sigma^2 (T - t)$,\n",
    "- $c(S, t) = K v(x, \\tau)$, where $v(x, \\tau)$ is the transformed function.\n",
    "\n",
    "#### Step 2: Derivative Transformations\n",
    "For $c(S, t) = K v(x, \\tau)$, we compute derivatives.\n",
    "\n",
    "1. The first derivative of $c$ with respect to $S$:\n",
    "   $$\n",
    "   \\frac{\\partial c}{\\partial S} = \\frac{\\partial}{\\partial S} \\big(K v(x, \\tau)\\big) = K \\frac{\\partial v}{\\partial x} \\frac{\\partial x}{\\partial S},\n",
    "   $$\n",
    "   where $x = \\ln(S / K)$ implies $\\frac{\\partial x}{\\partial S} = \\frac{1}{S}$. Thus:\n",
    "   $$\n",
    "   \\frac{\\partial c}{\\partial S} = K \\frac{\\partial v}{\\partial x} \\frac{1}{S}.\n",
    "   $$\n",
    "\n",
    "2. The second derivative of $c$ with respect to $S$:\n",
    "   $$\n",
    "   \\frac{\\partial^2 c}{\\partial S^2} = \\frac{\\partial}{\\partial S} \\left( K \\frac{\\partial v}{\\partial x} \\frac{1}{S} \\right).\n",
    "   $$\n",
    "   Using the product rule:\n",
    "   $$\n",
    "   \\frac{\\partial^2 c}{\\partial S^2} = K \\frac{\\partial^2 v}{\\partial x^2} \\frac{1}{S^2} - K \\frac{\\partial v}{\\partial x} \\frac{1}{S^2}.\n",
    "   $$\n",
    "\n",
    "3. The time derivative:\n",
    "   $$\n",
    "   \\frac{\\partial c}{\\partial t} = K \\frac{\\partial v}{\\partial \\tau} \\frac{\\partial \\tau}{\\partial t}, \\quad \\text{and } \\frac{\\partial \\tau}{\\partial t} = -\\frac{1}{\\frac{1}{2} \\sigma^2}.\n",
    "   $$\n",
    "\n",
    "#### Step 3: Transforming the PDE\n",
    "Substituting the above derivatives into the BSM PDE, we rewrite each term.\n",
    "\n",
    "1. For $\\frac{\\partial c}{\\partial t}$:\n",
    "   $$\n",
    "   \\frac{\\partial c}{\\partial t} = -\\frac{1}{\\frac{1}{2} \\sigma^2} K \\frac{\\partial v}{\\partial \\tau}.\n",
    "   $$\n",
    "\n",
    "2. For $\\frac{\\partial c}{\\partial S}$:\n",
    "   $$\n",
    "   S \\frac{\\partial c}{\\partial S} = S \\cdot \\left(K \\frac{\\partial v}{\\partial x} \\frac{1}{S}\\right) = K \\frac{\\partial v}{\\partial x}.\n",
    "   $$\n",
    "\n",
    "3. For $\\frac{\\partial^2 c}{\\partial S^2}$:\n",
    "   $$\n",
    "   \\frac{1}{2} \\sigma^2 S^2 \\frac{\\partial^2 c}{\\partial S^2} = \\frac{1}{2} \\sigma^2 S^2 \\left(K \\frac{\\partial^2 v}{\\partial x^2} \\frac{1}{S^2} - K \\frac{\\partial v}{\\partial x} \\frac{1}{S^2}\\right) = \\frac{1}{2} \\sigma^2 K \\frac{\\partial^2 v}{\\partial x^2}.\n",
    "   $$\n",
    "\n",
    "Substituting all these into the BSM PDE:\n",
    "$$\n",
    "-\\frac{1}{\\frac{1}{2} \\sigma^2} K \\frac{\\partial v}{\\partial \\tau} + \\frac{1}{2} \\sigma^2 K \\frac{\\partial^2 v}{\\partial x^2} + r K \\frac{\\partial v}{\\partial x} - r K v = 0.\n",
    "$$\n",
    "\n",
    "Divide through by $K$:\n",
    "$$\n",
    "-\\frac{\\partial v}{\\partial \\tau} + \\frac{\\partial^2 v}{\\partial x^2} + \\frac{2r}{\\sigma^2} \\frac{\\partial v}{\\partial x} - \\frac{2r}{\\sigma^2} v = 0.\n",
    "$$\n",
    "\n",
    "To simplify, let $v(x, \\tau) = e^{\\alpha x + \\beta \\tau} u(x, \\tau)$, where $\\alpha$ and $\\beta$ are constants. Substituting and choosing $\\alpha = -\\frac{r}{\\sigma^2}$ and $\\beta = -\\frac{r^2}{2 \\sigma^2}$, the equation reduces to:\n",
    "$$\n",
    "\\frac{\\partial u}{\\partial \\tau} = \\frac{\\partial^2 u}{\\partial x^2}.\n",
    "$$\n",
    "\n",
    "#### Step 4: Solving the Heat Equation\n",
    "The heat equation $\\frac{\\partial u}{\\partial \\tau} = \\frac{\\partial^2 u}{\\partial x^2}$ has a well-known solution using Fourier methods:\n",
    "$$\n",
    "u(x, \\tau) = \\frac{1}{\\sqrt{2 \\pi \\tau}} \\int_{-\\infty}^\\infty e^{-\\frac{(x-y)^2}{2\\tau}} f(y) \\, dy,\n",
    "$$\n",
    "\n",
    "where $f(y)$ is the initial condition.\n",
    "\n",
    "For the BSM problem, the initial condition is the payoff:\n",
    "$$\n",
    "f(y) = \\max(e^y - 1, 0).\n",
    "$$\n",
    "\n",
    "Performing the integration leads to the final solution involving the cumulative normal distribution function:\n",
    "$$\n",
    "v(x, \\tau) = N(d_1) - e^{-x} N(d_2),\n",
    "$$\n",
    "\n",
    "where:\n",
    "$$\n",
    "d_1 = \\frac{x + \\frac{1}{2} \\tau}{\\sqrt{\\tau}}, \\quad d_2 = \\frac{x - \\frac{1}{2} \\tau}{\\sqrt{\\tau}}.\n",
    "$$\n",
    "\n",
    "Transforming back to the original variables gives the Black-Scholes formula:\n",
    "$$\n",
    "C(S, t) = S e^{-q(T-t)} N(d_1) - K e^{-r(T-t)} N(d_2),\n",
    "$$\n",
    "where:\n",
    "$$\n",
    "d_1 = \\frac{\\ln(S / K) + (r - q + \\frac{\\sigma^2}{2})(T-t)}{\\sigma \\sqrt{T-t}}, \\quad d_2 = d_1 - \\sigma \\sqrt{T-t}.\n",
    "$$\n",
    "\n",
    "\n",
    "Similarly, we can derive the price of a European put option:\n",
    "\n",
    "$$\n",
    "P = K e^{-rT} N(-d_2) - S e^{-qT} N(-d_1)\n",
    "$$\n",
    "\n",
    "Where:\n",
    "$$\n",
    "d_1 = \\frac{\\ln(\\frac{S}{K}) + (r - q + \\frac{\\sigma^2}{2})T}{\\sigma \\sqrt{T}}, \\quad d_2 = d_1 - \\sigma \\sqrt{T}\n",
    "$$\n",
    "\n",
    "### Asymptotic Behavior of the BSM formula for call and put options  \n",
    "What if $K\\rightarrow 0$? In that case,  \n",
    "\n",
    "1. $\\ln(S_0/K)\\rightarrow \\infty$, causing $d_1 \\rightarrow \\infty$ and $d_2 \\rightarrow \\infty$  \n",
    "2. The cdf $N(d_1)\\rightarrow 1$ and $N(d_2)\\rightarrow 1$  \n",
    "3. The second term $Ke^{-rT}N(d_2)\\rightarrow 0$ as $K\\rightarrow 0$  \n",
    "\n",
    "In this case, the price of a call option $C\\rightarrow S_0$ and the price of a put option $P \\rightarrow 0$\n",
    "\n",
    "\n",
    "## Greeks: Delta and Gamma\n",
    "\n",
    "**Delta** ($\\Delta$) is the sensitivity of the option price to changes in the underlying asset price:\n",
    "\n",
    "$$\n",
    "\\Delta = \\frac{\\partial C}{\\partial S}\\approx \\frac{C(S_0 + h) - C(S_0 - h)}{2h}\n",
    "$$  \n",
    "\n",
    "This is the **central difference approximation**, which provides a more accurate estimate of delta compared to the forward or backward difference methods.\n",
    "\n",
    "- $C(S_0 + h)$: Calculate the option price with the spot price increased by $h$.\n",
    "- $C(S_0 - h)$: Calculate the option price with the spot price decreased by $h$.\n",
    "\n",
    "**Gamma** ($\\Gamma$) measures the rate of change of delta with respect to the underlying asset price:\n",
    "\n",
    "$$\n",
    "\\Gamma = \\frac{\\partial^2 C}{\\partial S^2}\\approx \\frac{\\Delta(S_0 + h) - \\Delta(S_0 - h)}{2h}\\approx \\frac{C(S_0 + h) - 2C(S_0) + C(S_0 - h)}{h^2}\n",
    "$$\n",
    "\n",
    "Gamma ($\\Gamma$) measures the rate of change of delta ($\\Delta$) with respect to the underlying spot price ($S_0$). \n",
    "\n",
    "- $C(S_0 + h)$: Option price with the spot price increased by $h$.\n",
    "- $C(S_0)$: Option price at the current spot price.\n",
    "- $C(S_0 - h)$: Option price with the spot price decreased by $h$.\n",
    "\n",
    "**Relationship Between Delta and Gamma:**  \n",
    "\n",
    "- Gamma represents how much delta changes for a small change in $S_0$.\n",
    "- If gamma is high, delta is more sensitive to changes in $S_0$, which is important for hedging strategies.\n",
    "\n",
    "## Implementation  \n",
    "\n",
    "### Notation \n",
    "\n",
    "- $S$: Spot price of the stock.\n",
    "- $K$: Strike price of the option.\n",
    "- $T$: Time to maturity (in years).\n",
    "- $r$: Risk-free rate (continuously compounded).\n",
    "- $q$: Dividend yield (continuously compounded).\n",
    "- $\\sigma$: Volatility of the stock.\n",
    "- $N(\\cdot)$: Cumulative distribution function of the standard normal distribution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "bed78d89",
   "metadata": {},
   "outputs": [],
   "source": [
    "from dataclasses import dataclass\n",
    "import numpy as np\n",
    "from scipy.stats import norm\n",
    "\n",
    "@dataclass\n",
    "class Equity:\n",
    "    spot: float\n",
    "    dividend_yield: float\n",
    "    volatility: float\n",
    "\n",
    "@dataclass\n",
    "class EquityOption:\n",
    "    strike: float\n",
    "    time_to_maturity: float\n",
    "    put_call: str\n",
    "\n",
    "@dataclass\n",
    "class EquityForward:\n",
    "    strike: float\n",
    "    time_to_maturity: float\n",
    "\n",
    "def bsm(underlying: Equity, option: EquityOption, rate: float) -> float:\n",
    "    S = underlying.spot\n",
    "    K = option.strike\n",
    "    T = option.time_to_maturity\n",
    "    r = rate\n",
    "    q = underlying.dividend_yield\n",
    "    sigma = underlying.volatility\n",
    "\n",
    "    # Handle edge case where strike is effectively zero\n",
    "    if K < 1e-8:\n",
    "        if option.put_call.lower() == \"call\":\n",
    "            return S \n",
    "        else:\n",
    "            return 0.0\n",
    "\n",
    "    d1 = (np.log(S / K) + (r - q + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))\n",
    "    d2 = d1 - sigma * np.sqrt(T)\n",
    "\n",
    "    if option.put_call.lower() == \"call\":\n",
    "        price = S * np.exp(-q * T) * norm.cdf(d1) \\\n",
    "                - K * np.exp(-r * T) * norm.cdf(d2)\n",
    "    elif option.put_call.lower() == \"put\":\n",
    "        price = K * np.exp(-r * T) * norm.cdf(-d2) \\\n",
    "                - S * np.exp(-q * T) * norm.cdf(-d1)\n",
    "    else:\n",
    "        raise ValueError(\"Invalid option type. Must be 'call' or 'put'.\")\n",
    "\n",
    "    return price\n",
    "\n",
    "def delta(underlying: Equity, option: EquityOption, rate: float) -> float:\n",
    "    bump = 0.01 * underlying.spot\n",
    "    bumped_up = Equity(spot=underlying.spot + bump, \n",
    "                       dividend_yield=underlying.dividend_yield, \n",
    "                       volatility=underlying.volatility)\n",
    "    bumped_down = Equity(spot=underlying.spot - bump, \n",
    "                         dividend_yield=underlying.dividend_yield, \n",
    "                         volatility=underlying.volatility)\n",
    "    price_up = bsm(bumped_up, option, rate)\n",
    "    price_down = bsm(bumped_down, option, rate)\n",
    "    return (price_up - price_down) / (2 * bump)\n",
    "\n",
    "def gamma(underlying: Equity, option: EquityOption, rate: float) -> float:\n",
    "    bump = 0.01 * underlying.spot\n",
    "    bumped_up = Equity(spot=underlying.spot + bump, \n",
    "                       dividend_yield=underlying.dividend_yield, \n",
    "                       volatility=underlying.volatility)\n",
    "    bumped_down = Equity(spot=underlying.spot - bump, \n",
    "                         dividend_yield=underlying.dividend_yield, \n",
    "                         volatility=underlying.volatility)\n",
    "    original_price = bsm(underlying, option, rate)\n",
    "    price_up = bsm(bumped_up, option, rate)\n",
    "    price_down = bsm(bumped_down, option, rate)\n",
    "    return (price_up - 2 * original_price + price_down) / (bump**2)\n",
    "\n",
    "def fwd(underlying: Equity, forward: EquityForward, rate: float) -> float:\n",
    "    S = underlying.spot\n",
    "    K = forward.strike\n",
    "    T = forward.time_to_maturity\n",
    "    r = rate\n",
    "    q = underlying.dividend_yield\n",
    "    forward_price = S * np.exp((r - q) * T) - K\n",
    "\n",
    "    return forward_price\n",
    "\n",
    "def check_put_call_parity(\n",
    "    underlying: Equity, \n",
    "    call_option: EquityOption, \n",
    "    put_option: EquityOption, \n",
    "    rate: float\n",
    "    ) -> bool:\n",
    "\n",
    "    call_price = bsm(underlying, call_option, rate)\n",
    "    put_price = bsm(underlying, put_option, rate)\n",
    "    S = underlying.spot\n",
    "    K = call_option.strike\n",
    "    T = call_option.time_to_maturity\n",
    "    r = rate\n",
    "    q = underlying.dividend_yield\n",
    "\n",
    "    parity_lhs = call_price - put_price\n",
    "    parity_rhs = S * np.exp(-q * T) - K * np.exp(-r * T)\n",
    "\n",
    "    return np.isclose(parity_lhs, parity_rhs, atol=1e-4)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19478579",
   "metadata": {},
   "source": [
    "### Example Usage\n",
    "<p style=\"text-align: justify\">\n",
    "Say, we want to price a call option on an equity with spot price $S_0 = 450$ with dividend yield $q=1.4\\%$, and volatility $14\\%$. The strike price of the call is $K=470$, with time to maturity in years $T=0.23$ and the risk free rate $r = 0.05$.<br>\n",
    "<br>\n",
    "Next, we want to see the asymptotic behavior of the call option if the strike price $K\\rightarrow 0$ with interest rate 0.<br>\n",
    "<br>\n",
    "Next, we want to price a put option on the same equity but strike price $K=500$, time to maturity in years $T=0.26$ and interest rate is 0.<br>\n",
    "<br>\n",
    "Finally, we want to check if the put-call parity relationship is hold. <br>\n",
    "<br>\n",
    "In each case, we consider $h=0.01$ a bump or small change in the stock price.\n",
    "</p> "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4347171d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.834035584709966\n",
      "450\n",
      "50.0\n",
      "True\n"
     ]
    }
   ],
   "source": [
    "if __name__ == \"__main__\":\n",
    "    eq = Equity(450, 0.014, 0.14)\n",
    "    option_call = EquityOption(470, 0.23, \"call\")\n",
    "    option_put = EquityOption(500, 0.26, \"put\")\n",
    "    \n",
    "    print(bsm(eq, option_call, 0.05))  \n",
    "    print(bsm(eq, EquityOption(1e-15, 0.26, \"call\"), 0.0))  \n",
    "    print(bsm(Equity(450, 0.0, 1e-9), option_put, 0.0))  \n",
    "\n",
    "    # Check put-call parity\n",
    "    eq = Equity(450, 0.015, 0.15)\n",
    "    option_call = EquityOption(470, 0.26, \"call\")\n",
    "    option_put = EquityOption(470, 0.26, \"put\")\n",
    "    print(check_put_call_parity(eq, option_call, option_put, 0.05)) "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "227f7b5c",
   "metadata": {},
   "source": [
    "## References  \n",
    "\n",
    "- Karatzas, I., & Shreve, S. E. (1991). *Brownian Motion and Stochastic Calculus*.  \n",
    "- Options, Futures, and Other Derivatives by John C. Hull  \n",
    "- Arbitrage Theory in Continuous Time Book by Tomas Björk\n",
    "\n",
    "\n",
    "**Share on**  \n",
    "\n",
    "::::{.columns}\n",
    ":::{.column width=\"33%\"}\n",
    "<a href=\"https://www.facebook.com/sharer.php?u=https://mrislambd.github.io/statandprob/posts/optionprice/\" target=\"_blank\" style=\"color:#1877F2; text-decoration: none;\">\n",
    " \n",
    "{{< fa brands facebook size=3x >}}\n",
    "</a>\n",
    " \n",
    ":::\n",
    " \n",
    ":::{.column width=\"33%\"}\n",
    "<a href=\"https://www.linkedin.com/sharing/share-offsite/?url=https://mrislambd.github.io/statandprob/posts/optionprice/\" target=\"_blank\" style=\"color:#0077B5; text-decoration: none;\">\n",
    " \n",
    "{{< fa brands linkedin size=3x >}}\n",
    "</a>\n",
    " \n",
    ":::\n",
    " \n",
    ":::{.column width=\"33%\"}\n",
    "<a href=\"https://www.twitter.com/intent/tweet?url=https://mrislambd.github.io/statandprob/posts/optionprice/\" target=\"_blank\" style=\"color:#1DA1F2; text-decoration: none;\">\n",
    " \n",
    "{{< fa brands twitter size=3x >}}\n",
    "</a>\n",
    " \n",
    ":::\n",
    "::::\n",
    " \n",
    "<script src=\"https://giscus.app/client.js\"\n",
    "        data-repo=\"mrislambd/mrislambd.github.io\" \n",
    "        data-repo-id=\"R_kgDOMV8crA\"\n",
    "        data-category=\"Announcements\"\n",
    "        data-category-id=\"DIC_kwDOMV8crM4CjbQW\"\n",
    "        data-mapping=\"pathname\"\n",
    "        data-strict=\"0\"\n",
    "        data-reactions-enabled=\"1\"\n",
    "        data-emit-metadata=\"0\"\n",
    "        data-input-position=\"bottom\"\n",
    "        data-theme=\"light\"\n",
    "        data-lang=\"en\"\n",
    "        crossorigin=\"anonymous\"\n",
    "        async>\n",
    "</script>\n",
    " \n",
    "<div id=\"fb-root\"></div>\n",
    "<script async defer crossorigin=\"anonymous\"\n",
    " src=\"https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v20.0\"></script>\n",
    "<div class=\"fb-comments\" data-href=\"https://mrislambd.github.io/statandprob/posts/optionprice/\" data-width=\"750\" data-numposts=\"5\"></div>\n",
    "\n",
    "**You may also like**  \n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3",
   "path": "/opt/hostedtoolcache/Python/3.10.18/x64/share/jupyter/kernels/python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
