Created
November 17, 2024 20:17
-
-
Save tycoi2005/d30d2f0880e39c248e68e1a0711f54e2 to your computer and use it in GitHub Desktop.
MODULE 6 | LESSON 1 IMPLIED VOLATILITY AND VOLATILITY SMILE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"('2024-11-22',\n", | |
" '2024-11-29',\n", | |
" '2024-12-06',\n", | |
" '2024-12-13',\n", | |
" '2024-12-20',\n", | |
" '2024-12-27',\n", | |
" '2025-01-17',\n", | |
" '2025-03-21',\n", | |
" '2025-04-17',\n", | |
" '2025-06-20',\n", | |
" '2025-09-19',\n", | |
" '2026-01-16',\n", | |
" '2027-01-15')" | |
] | |
}, | |
"execution_count": 2, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import yfinance as yf\n", | |
"\n", | |
"ibm = yf.Ticker(\"ibm\")\n", | |
"\n", | |
"\n", | |
"ibm.options" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"204.99" | |
] | |
}, | |
"execution_count": 7, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"price = ibm.info['currentPrice']\n", | |
"price" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>contractSymbol</th>\n", | |
" <th>lastTradeDate</th>\n", | |
" <th>strike</th>\n", | |
" <th>lastPrice</th>\n", | |
" <th>bid</th>\n", | |
" <th>ask</th>\n", | |
" <th>change</th>\n", | |
" <th>percentChange</th>\n", | |
" <th>volume</th>\n", | |
" <th>openInterest</th>\n", | |
" <th>impliedVolatility</th>\n", | |
" <th>inTheMoney</th>\n", | |
" <th>contractSize</th>\n", | |
" <th>currency</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>IBM250117C00060000</td>\n", | |
" <td>2024-08-08 19:56:23+00:00</td>\n", | |
" <td>60.0</td>\n", | |
" <td>132.30</td>\n", | |
" <td>140.10</td>\n", | |
" <td>141.90</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>503</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000010</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>IBM250117C00065000</td>\n", | |
" <td>2023-11-08 20:56:28+00:00</td>\n", | |
" <td>65.0</td>\n", | |
" <td>83.20</td>\n", | |
" <td>96.05</td>\n", | |
" <td>98.65</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>60</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000010</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>IBM250117C00070000</td>\n", | |
" <td>2024-02-07 20:52:18+00:00</td>\n", | |
" <td>70.0</td>\n", | |
" <td>113.25</td>\n", | |
" <td>124.50</td>\n", | |
" <td>128.55</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>1950</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000010</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>IBM250117C00075000</td>\n", | |
" <td>2024-02-07 20:31:07+00:00</td>\n", | |
" <td>75.0</td>\n", | |
" <td>108.10</td>\n", | |
" <td>119.50</td>\n", | |
" <td>123.50</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>2</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000010</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>IBM250117C00080000</td>\n", | |
" <td>2024-02-07 20:31:07+00:00</td>\n", | |
" <td>80.0</td>\n", | |
" <td>103.10</td>\n", | |
" <td>114.55</td>\n", | |
" <td>118.60</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>3</td>\n", | |
" <td>0</td>\n", | |
" <td>0.000010</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>IBM250117C00085000</td>\n", | |
" <td>2024-09-16 14:03:05+00:00</td>\n", | |
" <td>85.0</td>\n", | |
" <td>132.97</td>\n", | |
" <td>145.80</td>\n", | |
" <td>149.10</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>3</td>\n", | |
" <td>0</td>\n", | |
" <td>3.497316</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>IBM250117C00090000</td>\n", | |
" <td>2024-11-11 20:41:58+00:00</td>\n", | |
" <td>90.0</td>\n", | |
" <td>124.90</td>\n", | |
" <td>114.55</td>\n", | |
" <td>117.00</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>979</td>\n", | |
" <td>1</td>\n", | |
" <td>1.088872</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>IBM250117C00095000</td>\n", | |
" <td>2024-11-11 20:36:02+00:00</td>\n", | |
" <td>95.0</td>\n", | |
" <td>119.00</td>\n", | |
" <td>109.55</td>\n", | |
" <td>111.75</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>24</td>\n", | |
" <td>1</td>\n", | |
" <td>0.993652</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>IBM250117C00100000</td>\n", | |
" <td>2024-11-13 18:26:44+00:00</td>\n", | |
" <td>100.0</td>\n", | |
" <td>111.76</td>\n", | |
" <td>104.70</td>\n", | |
" <td>107.10</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4</td>\n", | |
" <td>24</td>\n", | |
" <td>0.989746</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>IBM250117C00105000</td>\n", | |
" <td>2024-11-13 18:12:56+00:00</td>\n", | |
" <td>105.0</td>\n", | |
" <td>106.44</td>\n", | |
" <td>99.70</td>\n", | |
" <td>102.30</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>4</td>\n", | |
" <td>19</td>\n", | |
" <td>0.948975</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>IBM250117C00110000</td>\n", | |
" <td>2024-11-11 20:37:12+00:00</td>\n", | |
" <td>110.0</td>\n", | |
" <td>104.00</td>\n", | |
" <td>94.70</td>\n", | |
" <td>97.45</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>13</td>\n", | |
" <td>0</td>\n", | |
" <td>0.903810</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>IBM250117C00115000</td>\n", | |
" <td>2024-11-11 20:42:02+00:00</td>\n", | |
" <td>115.0</td>\n", | |
" <td>99.35</td>\n", | |
" <td>90.00</td>\n", | |
" <td>91.95</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>2140</td>\n", | |
" <td>237</td>\n", | |
" <td>0.831545</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>IBM250117C00120000</td>\n", | |
" <td>2024-11-13 18:16:10+00:00</td>\n", | |
" <td>120.0</td>\n", | |
" <td>91.58</td>\n", | |
" <td>85.00</td>\n", | |
" <td>87.35</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>8</td>\n", | |
" <td>73</td>\n", | |
" <td>0.808596</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>IBM250117C00125000</td>\n", | |
" <td>2024-11-14 17:27:15+00:00</td>\n", | |
" <td>125.0</td>\n", | |
" <td>83.17</td>\n", | |
" <td>80.55</td>\n", | |
" <td>82.00</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>3</td>\n", | |
" <td>892</td>\n", | |
" <td>0.769289</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>IBM250117C00130000</td>\n", | |
" <td>2024-11-14 20:57:32+00:00</td>\n", | |
" <td>130.0</td>\n", | |
" <td>80.00</td>\n", | |
" <td>75.50</td>\n", | |
" <td>77.40</td>\n", | |
" <td>0.0</td>\n", | |
" <td>0.0</td>\n", | |
" <td>20</td>\n", | |
" <td>296</td>\n", | |
" <td>0.738772</td>\n", | |
" <td>True</td>\n", | |
" <td>REGULAR</td>\n", | |
" <td>USD</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" contractSymbol lastTradeDate strike lastPrice bid \\\n", | |
"0 IBM250117C00060000 2024-08-08 19:56:23+00:00 60.0 132.30 140.10 \n", | |
"1 IBM250117C00065000 2023-11-08 20:56:28+00:00 65.0 83.20 96.05 \n", | |
"2 IBM250117C00070000 2024-02-07 20:52:18+00:00 70.0 113.25 124.50 \n", | |
"3 IBM250117C00075000 2024-02-07 20:31:07+00:00 75.0 108.10 119.50 \n", | |
"4 IBM250117C00080000 2024-02-07 20:31:07+00:00 80.0 103.10 114.55 \n", | |
"5 IBM250117C00085000 2024-09-16 14:03:05+00:00 85.0 132.97 145.80 \n", | |
"6 IBM250117C00090000 2024-11-11 20:41:58+00:00 90.0 124.90 114.55 \n", | |
"7 IBM250117C00095000 2024-11-11 20:36:02+00:00 95.0 119.00 109.55 \n", | |
"8 IBM250117C00100000 2024-11-13 18:26:44+00:00 100.0 111.76 104.70 \n", | |
"9 IBM250117C00105000 2024-11-13 18:12:56+00:00 105.0 106.44 99.70 \n", | |
"10 IBM250117C00110000 2024-11-11 20:37:12+00:00 110.0 104.00 94.70 \n", | |
"11 IBM250117C00115000 2024-11-11 20:42:02+00:00 115.0 99.35 90.00 \n", | |
"12 IBM250117C00120000 2024-11-13 18:16:10+00:00 120.0 91.58 85.00 \n", | |
"13 IBM250117C00125000 2024-11-14 17:27:15+00:00 125.0 83.17 80.55 \n", | |
"14 IBM250117C00130000 2024-11-14 20:57:32+00:00 130.0 80.00 75.50 \n", | |
"\n", | |
" ask change percentChange volume openInterest impliedVolatility \\\n", | |
"0 141.90 0.0 0.0 503 0 0.000010 \n", | |
"1 98.65 0.0 0.0 60 0 0.000010 \n", | |
"2 128.55 0.0 0.0 1950 0 0.000010 \n", | |
"3 123.50 0.0 0.0 2 0 0.000010 \n", | |
"4 118.60 0.0 0.0 3 0 0.000010 \n", | |
"5 149.10 0.0 0.0 3 0 3.497316 \n", | |
"6 117.00 0.0 0.0 979 1 1.088872 \n", | |
"7 111.75 0.0 0.0 24 1 0.993652 \n", | |
"8 107.10 0.0 0.0 4 24 0.989746 \n", | |
"9 102.30 0.0 0.0 4 19 0.948975 \n", | |
"10 97.45 0.0 0.0 13 0 0.903810 \n", | |
"11 91.95 0.0 0.0 2140 237 0.831545 \n", | |
"12 87.35 0.0 0.0 8 73 0.808596 \n", | |
"13 82.00 0.0 0.0 3 892 0.769289 \n", | |
"14 77.40 0.0 0.0 20 296 0.738772 \n", | |
"\n", | |
" inTheMoney contractSize currency \n", | |
"0 True REGULAR USD \n", | |
"1 True REGULAR USD \n", | |
"2 True REGULAR USD \n", | |
"3 True REGULAR USD \n", | |
"4 True REGULAR USD \n", | |
"5 True REGULAR USD \n", | |
"6 True REGULAR USD \n", | |
"7 True REGULAR USD \n", | |
"8 True REGULAR USD \n", | |
"9 True REGULAR USD \n", | |
"10 True REGULAR USD \n", | |
"11 True REGULAR USD \n", | |
"12 True REGULAR USD \n", | |
"13 True REGULAR USD \n", | |
"14 True REGULAR USD " | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"opt = ibm.option_chain('2025-01-17')\n", | |
"callData = opt.calls\n", | |
"putData = opt.puts\n", | |
"\n", | |
"callData.head(15)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"df_call = callData\n", | |
"df_call = df_call[df_call[\"impliedVolatility\"] > 0]\n", | |
"df_call[\"strike\"] = df_call[\"strike\"].astype(float)\n", | |
"df_call = df_call[\n", | |
" df_call[\"strike\"] > price * 0.8\n", | |
"] # We will only consider those options within a certain range of the current price\n", | |
"df_call = df_call[\n", | |
" df_call[\"strike\"] < price * 1.2\n", | |
"] # One reason for this is that it is precisely those options that are most often traded.\n", | |
"\n", | |
"\n", | |
"df_call.plot(kind=\"scatter\", x=\"strike\", y=\"impliedVolatility\", color=\"red\")\n", | |
"plt.grid()\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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DgEIAAB4HAIQAADwOAQgAADgcQhAAADA4xCAAACAxyEAAQAAj0MAAgAAHocABMDjvPjii+rRo4d1e+7cuYqNjXVaPQA6HgEIgFu46667NHHixFbNnTJlioqLi9u3IACdWhdnFwAAHclsNiswMFCBgYHOLgWAE7ECBMClvP766xo+fLgCAwN1ySWXyGQy6dFHH9VLL72kt99+W15eXvLy8lJBQYEOHTokLy8vrV+/XjfccIMCAgL02muvNToFdr6SkhINHDhQKSkpMgxDNTU1euSRRxQREaGuXbtq7NixKigo6LCeATgeK0AAXMaRI0c0depULVq0SD/72c905swZffDBB0pMTFRpaakqKyu1evVqSVLPnj1VVlYmSZo9e7aee+45jRo1SgEBAcrOzr7gr/HZZ58pISFBd999t+bPny9JSklJ0b///W+tW7dO4eHhevPNNzVhwgT961//UnR0dPs3DsDhCEAAXMaRI0f0/fffa9KkSerfv78kafjw4ZKkwMBA1dTUKCwsrNHrZs2apUmTJrV4/G3btuknP/mJnnjiCf3617+WJJWWlmr16tUqLS1VeHi4JOmRRx5RVlaWVq9erWeffdZR7QHoQAQgAC5j5MiR+vGPf6zhw4crISFB8fHxmjx5skJDQ5t9XVxcXIvHLi0t1fjx4/XMM89o1qxZ1vF//etfqqurU0xMjM38mpoaXXLJJXb1AcD5CEAAXIaPj49ycnK0bds2bd68WcuWLdMTTzyh7du3N/u6rl27tnjsSy+9VOHh4Vq7dq2mT5+ukJAQSdLZs2fl4+OjnTt3ysfHx+Y1wcHB9jcDwKm4CBqAS/Hy8tI111yjefPmadeuXfLz89Obb74pPz8/1dXV2X3cwMBAvfPOOwoICFBCQoLOnDkjSRo1apTq6up09OhRDR482OarqdNtAFwDAQiAy9i+fbueffZZffrppyotLdWGDRt07NgxXX755YqKitJnn32m/fv36/jx4zKbzW0+fteuXbVp0yZ16dJFN910k86ePauYmBjdeeedSkxM1IYNG/Tll19qx44dysjI0KZNm9qhSwAdgQAEwGWEhITo/fff180336yYmBj99re/1XPPPaebbrpJM2bM0JAhQxQXF6dLL71UH330kV2/RnBwsN577z0ZhqFbbrlFVVVVWr16tRITE/XrX/9aQ4YM0cSJE/XJJ5+oX79+Du4QQEfxMgzDcHYRAAAAHYkVIAAA4HEIQAAAwOMQgAAAgMchAAEAAI9DAAIAAB6HAAQAADwOAQgAAHgcAhAAAPA4BCAAAOBxCEAAAMDjEIAAAIDH+f9mSWxtnaGbfwAAAABJRU5ErkJggg==", | |
"text/plain": [ | |
"<Figure size 640x480 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"df_put = putData\n", | |
"\n", | |
"df_put = df_put[df_put[\"impliedVolatility\"] > 0]\n", | |
"df_put[\"strike\"] = df_put[\"strike\"].astype(float)\n", | |
"df_put = df_put[df_put[\"strike\"] > price * 0.8]\n", | |
"df_put = df_put[df_put[\"strike\"] < price * 1.2]\n", | |
"\n", | |
"df_put.plot(kind=\"scatter\", x=\"strike\", y=\"impliedVolatility\", color=\"red\")\n", | |
"plt.grid()\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# The Newton-Raphson Method" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"from scipy.stats import norm\n", | |
"\n", | |
"N_prime = norm.pdf\n", | |
"N = norm.cdf" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def black_scholes_call(S, K, T, r, sigma):\n", | |
" \"\"\"\n", | |
" :param S: Asset price\n", | |
" :param K: Strike price\n", | |
" :param T: Time to maturity\n", | |
" :param r: risk-free rate (treasury bills)\n", | |
" :param sigma: volatility\n", | |
" :return: call price\n", | |
" \"\"\"\n", | |
"\n", | |
" # Black-Scholes Formula\n", | |
" d1 = (np.log(S / K) + (r + sigma**2 / 2) * T) / (sigma * np.sqrt(T))\n", | |
" d2 = d1 - sigma * np.sqrt(T)\n", | |
"\n", | |
" call = S * N(d1) - N(d2) * K * np.exp(-r * T)\n", | |
" return call" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def vega(S, K, T, r, sigma):\n", | |
" \"\"\"\n", | |
"\n", | |
" :param S: Asset price\n", | |
" :param K: Strike price\n", | |
" :param T: Time to Maturity\n", | |
" :param r: risk-free rate (treasury bills)\n", | |
" :param sigma: volatility\n", | |
" :return: partial derivative w.r.t volatility\n", | |
" \"\"\"\n", | |
"\n", | |
" # Calculating d1 from black scholes\n", | |
" d1 = (np.log(S / K) + (r + sigma**2 / 2) * T) / sigma * np.sqrt(T)\n", | |
" vega = S * np.sqrt(T) * N_prime(d1)\n", | |
" return vega" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def implied_volatility_call(C, S, K, T, r, tol=0.0001, max_iterations=100):\n", | |
" \"\"\"\n", | |
"\n", | |
" :param C: Observed call price\n", | |
" :param S: Asset price\n", | |
" :param K: Strike Price\n", | |
" :param T: Time to Maturity\n", | |
" :param r: risk free rate\n", | |
" :param tol: error tolerance in result\n", | |
" :param max_iterations: max iterations to update vol\n", | |
" :return: implied volatility in percent\n", | |
" \"\"\"\n", | |
"\n", | |
" # assigning initial volatility estimate for input in Newton_rap procedure\n", | |
" sigma = 0.3\n", | |
"\n", | |
" for i in range(max_iterations):\n", | |
" # calculate difference between black-scholes price and market price with\n", | |
" # iteratively updated volatility estimate\n", | |
" diff = black_scholes_call(S, K, T, r, sigma) - C\n", | |
"\n", | |
" # break if difference is less than specified tolerance level\n", | |
" if abs(diff) < tol:\n", | |
" print(f\"found on {i}th iteration\")\n", | |
" print(f\"difference is equal to {diff}\")\n", | |
" break\n", | |
"\n", | |
" # use Newton-Rapshon to update the estimate\n", | |
" sigma = sigma - diff / vega(S, K, T, r, sigma)\n", | |
"\n", | |
" return sigma" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"found on 2th iteration\n", | |
"difference is equal to -7.274655111189077e-06\n", | |
"Implied volatility using Newton Rapshon is: 0.5428424065162358\n" | |
] | |
} | |
], | |
"source": [ | |
"observed_price = 18\n", | |
"S = 100\n", | |
"K = 115\n", | |
"T = 1\n", | |
"r = 0.05\n", | |
"\n", | |
"imp_vol = implied_volatility_call(observed_price, S, K, T, r)\n", | |
"print(\"Implied volatility using Newton Rapshon is: \", imp_vol)" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "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.13.0" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment